Appearance
分布式相机
鸿蒙分布式相机:多设备摄像头协同、摄像头跨设备调用。
1. 分布式相机概述
1.1 核心能力
| 能力 | 说明 | |---|-|-| | 摄像头发布 | 将设备摄像头暴露为服务 | | 摄像头订阅 | 跨设备订阅使用摄像头 | | 多摄协同 | 多摄像头数据融合 | | 流媒体传输 | 实时视频流跨设备 |
1.2 应用场景
应用场景:
├─ 手机摄像头 → 电视大屏显示(视频会议)
├─ 手机摄像头 → 平板显示(家庭监控)
├─ 多摄协同(广角+长焦融合)
└─ 智能家居摄像头共享2. 摄像头发布
2.1 发布本地摄像头
typescript
import { distributedCamera } from '@kit.DistributedHardwareKit'
// 发布摄像头服务
let cameraPublisher = await distributedCamera.createPublisher({
deviceId: 'local_camera',
cameraId: 'back', // 后置摄像头
resolution: { width: 1920, height: 1080 },
fps: 30,
format: distributedCamera.CameraFormat.YUV_420_SP
})
// 发布服务
await cameraPublisher.publish({
serviceId: 'phone_camera_001',
capabilities: ['1080P', '30fps']
})
console.log('摄像头发布成功')3. 摄像头订阅
3.1 跨设备订阅摄像头
typescript
// 订阅其他设备的摄像头
let cameraSubscriber = await distributedCamera.createSubscriber()
cameraSubscriber.on('frame', (frame: distributedCamera.ImageFrame) => {
// 处理视频帧
this.renderFrame(frame.data)
})
cameraSubscriber.on('error', (err: Error) => {
console.error('订阅错误:', err.message)
})
// 订阅手机摄像头
let result = await cameraSubscriber.subscribe({
serviceId: 'phone_camera_001',
resolution: { width: 1920, height: 1080 },
fps: 30
})
if (result) {
console.log('摄像头订阅成功')
}3.2 视频预览
typescript
@Component
struct CameraPreview {
@State stream: distributedCamera.CameraStream | null = null
aboutToAppear() {
let subscriber = distributedCamera.createSubscriber()
subscriber.subscribe({
serviceId: 'phone_camera_001',
resolution: { width: 1920, height: 1080 },
fps: 30,
onFrame: (frame: distributedCamera.ImageFrame) => {
// 将帧数据渲染到 XComponent
this.renderToXComponent(frame.data)
}
})
}
}4. 多摄协同
4.1 多摄像头数据融合
typescript
// 手机前置 + 后置摄像头协同
class MultiCameraCoordinator {
private frontCamera: distributedCamera.CameraSubscriber
private backCamera: distributedCamera.CameraSubscriber
async startMultiCamera() {
// 订阅前置摄像头(美颜/自拍)
this.frontCamera = distributedCamera.createSubscriber()
await this.frontCamera.subscribe({
serviceId: 'front_camera',
resolution: { width: 1280, height: 720 },
onFrame: (frame) => this.processFrontFrame(frame)
})
// 订阅后置摄像头(广角)
this.backCamera = distributedCamera.createSubscriber()
await this.backCamera.subscribe({
serviceId: 'back_camera',
resolution: { width: 1920, height: 1080 },
onFrame: (frame) => this.processBackFrame(frame)
})
}
// 帧融合
private processFrontFrame(frame: distributedCamera.ImageFrame): void {
// 美颜处理
this.applyBeautyFilter(frame)
}
private processBackFrame(frame: distributedCamera.ImageFrame): void {
// 广角校正
this.applyWideCorrection(frame)
}
}5. 面试高频考点
Q1: 分布式相机的工作原理?
回答:设备发布摄像头服务,其他设备订阅。通过分布式软总线传输视频流,实现跨设备摄像头调用。
Q2: 多摄协同的应用场景?
回答:手机前置+后置融合(美颜+广角),智能家居多摄像头协同监控。
🐱 小猫提示:分布式相机记住 "发布/订阅模式、跨设备摄像头、帧数据处理、多摄融合"。