HarmonyOS 6 相机 C++ API 核心能力与 NDK 开发
在前期实现中,基于 XComponent 实现了基础的相机预览功能,但缺乏实际业务作用。在 HarmonyOS 相机系统开发中,通过 NDK (C/C++) 层接入相机 API 赋予了开发者更高性能与更底层的硬件控制权。尤其是当我们需要集成依赖 C++ 实时处理的算法(如自定义人脸识别模型)或更精细的相机控制时,直接调用 C++ Camera API 将能够避免频繁的跨语言(ArkTS <-> C++)开销,大幅提升采集流水线的效率。
本文我们以拍照、录制视频、对焦等常用功能为例,对其中涉及到的 HarmonyOS 系统相机 C++ API (NDK) 能力及核心系统函数原型进行详细梳理和介绍。
1. 核心会话与模式控制 API
在应用的 ArkTS 层,根据业务需求,需要动态切换正在使用的相机模式(图库、拍照或录像)。前面文章已经介绍了基于预览的实现,主要原理是配置相机后设置相机的输出管道,将相机输出内容一份关联到 XComponent 中,一份给编码器。主要涉及到以下 API:
- 底层 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)。
- 添加/移除 Output:使用
涉及到系统 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
在录制视频时,需要 API 用于处理录像模式下数据流生命周期的控制。
- :分别封装自宏观的 与 / 。


