1. 鸿蒙相机开发核心架构解析
在鸿蒙HarmonyOS 6的Camera Kit中,相机功能被抽象为三个核心模块:输入(Input)、会话(Session)和输出(Output)。这种设计借鉴了专业影视制作中的流水线工作模式,将复杂的硬件操作封装成清晰的逻辑单元。
1.1 输入流(CameraInput)的硬件抽象
CameraInput是对物理相机设备的抽象层,开发者通过它来访问摄像头硬件。在实际开发中,我们需要特别注意:
- 设备枚举:通过
getSupportedCameras()获取设备列表时,返回的可能是多摄像头系统(如主摄、超广角、长焦等) - 能力查询:每个摄像头设备都有独立的
OutputCapability,包含支持的分辨率、帧率范围等参数 - 独占访问:调用
open()方法时会锁定硬件资源,必须确保在不需要时及时调用close()
重要提示:现代手机通常采用多摄协同工作模式,在创建CameraInput时要明确指定使用的物理摄像头ID,特别是在实现变焦功能时需要在不同摄像头间切换。
1.2 会话(CaptureSession)的管道控制
CaptureSession是整个相机功能的中枢神经系统,负责协调数据流动。其核心特点包括:
- 事务性配置:所有修改(添加/删除输入输出、参数调整)必须包裹在
beginConfig()和commitConfig()之间 - 类型专用:HarmonyOS 6提供了三种专用会话类型:
PhotoSession:优化静态图像捕捉VideoSession:针对视频录制优化PreviewSession:仅用于预览场景
- 状态管理:会话具有明确的生命周期(配置中→就绪→运行中),错误的状态转换会抛出异常
实际开发中常见的坑是忘记调用commitConfig()导致配置未生效,或者在没有停止会话(stop())的情况下直接修改配置。
1.3 输出流(Output)的多路复用
输出流决定了相机数据的去向,HarmonyOS 6支持三种主要输出类型:
| 输出类型 | 核心功能 | 典型用途 | 性能要求 |
|---|---|---|---|
| Pr |
