头图

运行

系统启动成功后,取源码out目录下的helloworld可执行文件放入系统的bin目录,通过以下步骤运行“Hello World”。

操作步骤

  1. 在启动界面进入bin目录。

    cd bin
  2. 进入bin目录后可以看到helloworld文件,通过以下命令运行helloworld程序。

    ./helloworld

    界面打印“Hello World!”,程序运行成功。

    quickstart-pkg-3516-running

下一步学习

鸿蒙NEXT开发学习库qr23.cn/FBD4cY

[ate 导入OpenHarmony工程]

概述

本文档将介绍如何基于IoT Camera开发板(Hi3516DV300),利用其摄像头和屏幕,完成拍照、录像和视频预览功能。

通过本文档,开发者能够对OpenHarmony的摄像控制有更深入的了解,可参照本例尝试完成“智能猫眼”、“智能后视镜”、“智能带屏音箱”等设备的开发。

若开发者想先查看示例效果,请进入[应用实例]。如需自定义应用行为,可参考下节“示例开发”对示例代码进行修改。

应用实例

本示例将运行源码中的camera示例代码,通过本示例可以实现使用开发板进行拍照、录像及预览等功能。

  • 本示例源码路径为“applications/sample/camera/media/camera_sample.cpp”。
  • 在运行本示例前需先完成编译烧录、运行镜像等步骤

     说明:  开发板启动后默认会加载launcher应用,应用的图形界面默认显示在媒体图层上方,会影响camera_sample的演示结果,因此需要在编译或是打包时去掉launcher应用。 修改方法:将“build/lite/components/applications.json”中camera_sample_app组件的targets中"//applications/sample/camera/launcher:launcher_hap"整行注释或删除。
  • 本示例编译结果路径为“out/hi3516dv300/ipcamera_hi3516dv300_liteos/dev_tools/bin”,为让文件能在单板中执行,可将示例文件通过读卡器复制至TF卡中,或者修改camera_sample的编译脚本将结果文件复制至rootfs.img中。

    修改源码路径“applications/sample/camera/media/BUILD.gn”中第一处的output_dir。

    • 修改前:output_dir = "$root_out_dir/dev_ools"
    • 修改后:output_dir = "$root_out_dir/"

    重新执行源码仓编译并烧写入单板后,可在单板bin目录下找到camera_sample文件。

须知:  实例运行拍照和录像功能需要插入TF卡(最大容量支持128GB),系统启动后自动将TF卡挂载至/sdcard目录,如果在启动后插入则需要手动挂载。查看拍照和录像内容可将TF卡中内容复制到电脑中进行查看,预览功能无需TF卡。

  • 接下来可通过以下步骤运行示例:
  1. 通过cd命令进入可执行程序的末端路径,启动camera_sample,执行命令如下图。

    图 1 启动示例[]()
     title=

    运行后的控制命令如串口打印所示,按s键停止当前操作(包括录像和预览),按q键退出示例程序。

  2. 按1进行拍照,拍照的文件格式为jpg,存储在/sdcard,文件名Capture*

    图 2 输入拍照指令后串口打印日志[]()
     title=

    若想查看保存文件,可在退出程序后进入文件系统查看,退出后重新进入请回到步骤1。

    图 3 查看文件图[]()
     title=

  3. 按2进行录像,录像的文件格式为mp4,存储在/sdcard,文件名Record*,按s键停止

    图 4 输入录像指令后串口打印日志[]()
     title=

  4. 按3进行预览,预览图像直接送至显示屏,按s键停止。

    图 5 输入预览指令后串口打印日志[]()
     title=

    预览效果如下

    图 6 预览效果[]()
     title=

  5. 按q键退出

    图 7 输出退出指令后串口打印日志[]()
     title=

相机应用开发

基本概念

相机是OpenHarmony多媒体进程提供的服务之一,提供了相机的录像、预览、拍照功能,支持多用户并发取流。

在进行应用的开发前,开发者应了解以下基本概念:

  • 视频帧

    视频流指的是将一系列图片数据按照固定时间间隔排列形成的数据流,每一张图片数据成为一帧,这样的一帧称为视频帧。

  • 帧速率(FPS,Frames Per Second)

    视频播放每秒钟刷新图片的速度,或是视频每秒的帧数,帧速率越高,视频的观感越流畅。

  • 分辨率

    每一帧的图片信息都是由像素点组成的,分辨率描述了一张图片中像素点的个数。例如1920*1080(1080P),是指图片宽1920像素,高1080像素。

运作机制

  • 多媒体服务进程

    多媒体服务作为系统服务,在系统启动时由Init进程拉起,并初始化和分配媒体硬件资源(内存/显示硬件/图像传感器/编解码器等)。初始化过程解析配置文件,确定了多媒体各个服务的能力和资源上限,通常由OEM厂商通过配置文件进行配置。相机服务在多媒体进程初始化时有以下配置项:

    • 内存池:所有媒体服务依赖于内存池中的内存轮转运行
    • 图像传感器:包括了传感器类型、分辨率、ISP等
    • 图像处理器:分辨率、码率、图像翻转等
    • 图像编码器:编码格式、码率、分辨率等
  • 关键类的解释

    应用通过持有下面4个类,配置和使用Camera的功能,包括了Camera类和它的三个异步回调类,三类回调分别对应了不同类型的异步处理场景,详见下表。

    表1 关键类的解释

    对象用途举例
    Camera对相机进行静态配置(通过配置类),触发相机基本功能拍照/录像/预览
    CameraDeviceCallback处理相机硬件状态变化可用/不可用
    CameraStateCallback处理camera自身状态变化创建/释放
    FrameStateCallback处理帧状态的变化拍照开始和结束/帧率发生变化

HarmonyOS与OpenHarmony鸿蒙文档籽料:mau123789是v直接拿

搜狗高速浏览器截图20240326151344.png

  • 流的传递

    Surface是多媒体传递音视频的基本数据结构,Camera一般作为Surface中数据的生产者,在不同的场景下有特定的消费者。

    相机的预览和录像输出均为视频流,拍照输出为图像帧,二者均通过Surface类进行传递。Surface类可以屏蔽进程内/跨进程的场景,进行多媒体信息流的传递。

    以录像为例,用户首先创建Recorder实例,并从Recorder中获取对应Surface,再将此Surface传递给Camera实例,此时Camera将作为生产者向Surface注入视频流,而Recorder作为消费者从Surface中取出视频流进行保存,用户的行为类似桥接,把二者通过Surface连接起来。

    类似的,用户也可以自行创建Surface传递给Camera实例,并实现消费者逻辑(例如通过网络传输视频流,或是将拍照的帧数据保存成图片文件)。

    图形图像模块也通过Surface从Camera获取流资源

  • 相机运行流程

    1. Camera创建流程

      本进程通过CameraManager创建Camera实例,并从服务端绑定camera设备,创建成功后异步通知developer。类之间的时序图如下:

      图1 Camera创建时序图

      zh-cn_image_0000001200114819

    2. Camera录像/预览流程

      开发者首先通过CameraKit创建Camera,然后FrameConfig类对录像或者预览帧属性进行配置。录像/预览时序如下:

      图2 Camera录像/预览时序图

      zh-cn_image_0000001200115193


烧脑猴
24 声望21 粉丝

5年JAVA,3年Android。现转入鸿蒙开发行业,每日分享一些鸿蒙技术!