HarmonyOS 6 相机 C++ API 核心能力详解
在之前的实践中,我们已基于 XComponent 完成了基础相机预览功能的搭建,但仅有预览往往无法满足复杂业务需求。在 HarmonyOS 相机系统开发中,通过 NDK (C/C++) 层接入相机 API 赋予了开发者更高性能与更底层的硬件控制权。尤其是当我们需要集成依赖 C++ 实时处理的算法(如自定义人脸识别模型)或进行更精细的相机控制时,直接调用 C++ Camera API 能够避免频繁的跨语言(ArkTS <-> C++)开销,大幅提升采集流水线的效率。
本文将聚焦于拍照、录制视频、对焦等常用功能,对其中涉及到的 HarmonyOS 系统相机 C++ API (NDK) 能力及核心系统函数原型进行梳理和介绍。
1. 核心会话与模式控制
在应用的 ArkTS 层,根据业务需求需要动态切换正在使用的相机模式(图库、拍照或录像)。主要原理是配置相机后设置相机的输出管道,将相机输出内容一份关联到 XComponent 中,一份给编码器。底层 C++ 能力依赖于 CaptureSession 层面对资源配置的管理:
- 添加/移除 Output:使用
OH_CaptureSession_AddPhotoOutput和OH_CaptureSession_AddVideoOutput来动态装载输出流模块,或者用OH_CaptureSession_RemovePhotoOutput卸载。 - 动态提交:调用
OH_CaptureSession_BeginConfig(...)、OH_CaptureSession_CommitConfig(...)和OH_CaptureSession_Start(...)生效这套全新的流组合配置。在这个过程中,不仅使得相机的会话能在不同模式间无缝切换,还支持同时携带多种输出流(如 Preview + Photo,或是 Preview + Video + Photo)。
涉及到系统 API 原型如下:
Camera_ErrorCode OH_CaptureSession_BeginConfig(Camera_CaptureSession* session);
Camera_ErrorCode OH_CaptureSession_CommitConfig(Camera_CaptureSession* session);
Camera_ErrorCode OH_CaptureSession_Start(Camera_CaptureSession* session);
Camera_ErrorCode OH_CaptureSession_AddPhotoOutput(Camera_CaptureSession* session, Camera_PhotoOutput* dest);
Camera_ErrorCode OH_CaptureSession_AddVideoOutput(Camera_CaptureSession* session, Camera_VideoOutput* dest);
Camera_ErrorCode OH_CaptureSession_RemovePhotoOutput(Camera_CaptureSession* session, Camera_PhotoOutput* dest);
2. 视频流控制
在录制视频时,需要 API 用于处理录像模式下数据流生命周期的控制。底层 C++ 能力分别封装自宏观的 OH_VideoOutput_Start 与 OH_VideoOutput_Stop / OH_VideoOutput_Release。



