当前位置: 首页 > 科技观察

OpenHarmony多媒体子系统(相机)源码分析

时间:2023-03-22 16:08:21 科技观察

更多内容请访问:https://harmonyos.51cto.com,与华为共同打造的鸿蒙技术社区,介绍媒体子系统,为开发者提供一个接口接口方便开发者使用系统的媒体资源。本文主要介绍多媒体下的Camera模块。摄像头子系统提供了以下功能接口:摄像头拍照摄像头预览摄像头视频架构示意图搭建HarmonyOS环境我们首先需要完成HarmonyOS开发环境的搭建,可以参考以下步骤进行。安装开发生态工作室。有关详细信息,请参阅下载和安装软件。搭建DevEcoStudio开发环境。DevEcoStudio开发环境依赖于网络环境。需要联网才能保证工具的正常使用。开发环境可根据以下两种情况进行配置:1、如果可以直接上网,只需要下载HarmonyOSSDK运行即可。2、如果网络不能直接访问Internet,需要通过代理服务器访问。请参考配置开发环境。开发者可以参考以下链接完成设备调试相关的配置:1.使用真机调试2.使用模拟器调试相机模块核心类上层初始化示例代码结构解读本文件主要方法执行创建相机的全过程,相机创建并初始化后,根据用户输入的字符,相机会进行拍照、录像、预览等功能。Camkit是CameraKit类的全局变量,主要提供对上层的调用。在这个类中,相关的方法实际上是通过cameraManager_对象来调用的。图中主要流程分为以下几步:获取CameraKit实例调用camKit的GetCameraIds方法获取cameraid列表,根据id列表找到1080P分辨率的cameraid,如果没有报错则直接返回成立。调用camKit的CreateCamera方法。该方法是相机初始化的核心。根据这三个步骤,分析每个步骤的流程,得到CameraKit实例步骤。其实就是逐层调用,实现相机初始化的操作。下面是相关的调用流程(1)GetCameraKit流程(2)GetCameraIds流程CameraKit的调用其实是通过cameraManager_CameraService初始化完成后,通过device和ability创建的CameraImpl实例存放在cameraMapCache_变量中,GetCameraIds方法遍历cameraMapCache_获取可用的cameraId列表。(3)CreateCamera过程CameraKit实际上调用了CameraManagerImpl的CreateCamera方法。首先根据cameraId在cameraMapCache_中找到CameraImpl的位置,将CameraStateCallback回调注册到CameraImpl。CameraStateCallback是应用层通过参数传入的,所以后续CameraImpl中的Configure、Release、OnCreate、OnCreateFailed等方法都会通过回调调用应用层的接口。最后调用CameraService的CreateCamera方法创建相机。CameraService主要回调OnCameraStatusChange方法,在CameraManagerImpl类中实现。CameraManagerImpl通过调用CameraService的Initialize(*this)实现回调接口注册。接下来看CameraManagerImpl类中的回调实现调用cameraMapCache_中cameraId对应的OnCreate方法,其中在CameraService中创建device参数传递给CameraImpl。接下来看CameraImpl的OnCreate方法。首先,在CameraImpl中保存一份device_的副本。其次,在EventHandler中,通过之前注册的CameraStateCallback回调OnCreate方法。该回调由上层应用实现。具体如下图,主要配置FrameStateCallback回调,设置EventHandler,然后保存CameraImpl。应用层拿到CameraImpl对象,并赋值给cam_对象,后面的相机操作都是通过cam_进行的。上层调用相机功能。应用层根据用户输入的字符进行拍照、开始录像、开始预览、停止操作。下面是拍照、录像、预览的时序图。拍摄过程和录制过程总结通过本文的学习,可以大致了解Camera的初始化过程,了解Camera的创建过程,详细了解Camera的拍照、录制等功能。OpenHarmony代码提供了有关使用相机的信息。更多信息请访问:Harmonyos技术社区https://harmonyos.51cto.com与华为官方共建