鸿蒙媒体子系统解读-编码录像流程解读

鸿蒙媒体子系统解读-编码录像流程解读

本文作者:江苏润和软件股份有限公司 王高浩


一、鸿蒙媒体子系统简介
媒体子系统旨在为多媒体应用开发者开发者提供统一的开发接口,使得开发者可以专注于应用业务的开发,轻松使用多媒体的资源。下图分别展现媒体子系统的框架及业务流程。

在这里插入图片描述

图 1 媒体子系统框架图

如图1,多媒体框架支持相机、录像和播放业务功能,这些功能支持鸿蒙JS应用开发及各种使用媒体能力的KIT模块开发,系统框架包括framework层,framework对外提供应用调用的native接口及其对应的业务实现,针对相机、录像及播放业务,framework实现了音视频输入输出,音视频编解码,视频文件的打包及解复用等功能。core service层,core service利用平台提供的能力去实现对底层硬件及相关驱动使用,另外core server实现文件管理,存储管理及日志管理。

在这里插入图片描述

图 2 多媒体业务流程图

如图2,多媒体包括Camera,Recorder和Player,Camera提供YUV、RGB、JPEG以及H264,H265数据到共享内存surface中,Recorder模块将surface中h264/h265数据和音频aac数据打包成mp4文件,Player模块把mp4文件解复用成音频和视频数据,分别送入对应解码器解码,然后进行播放。

目录结构

表1 轻量级多媒体子系统源代码目录结构

名称 描述
foundation/multimedia/frameworks 内部框架实现,包括Audio,Camera,Player,Recorder
foundation/multimedia/interfaces/kits 应用接口对外头文件
foundation/multimedia/services/media_lite 应用接口底层服务实现
foundation/multimedia/utils/lite 应用接口通用模块实现
foundation/multimedia/hals 硬件平台相关媒体适配接口头文件

使用
Native应用接口调用可以参考applications/sample/camera/media下demo实现。应用开发者使用多媒体接口实现录像、预览和播放音视频,使用可以参考《多媒体开发指南》。
本文解读媒体子系统里面的编码录像流程。

二、编码录像流程涉及的各模块

1、录像部分(Recorder子系统)的各功能模块

模块(类)名称 功能
Recorder 用于实现recorder功能的对外接口类,针对录像的各个方面做设置:设置源、音视频编码格式、视频尺寸、视频帧率、视频码率、音频通道数、最大录像时长、录像文件格式。。。以及一些操作:准备、开始、停止、暂停、继续、重置、释放。
RecorderImpl Recorder类的具体实现。该类有两个成员变量:sourceManager_和recorderSink_,前者负责音视频的码流的获取,后者负责录像文件的写入。对Recorder类的所有设置和操作其实都由这两个变量实现。
RecorderSink 与写录像文件功能相关。设置文件句柄、最大时长、最大字节数、创建复用器(muxer)、增加track、写文件、设置文件格式、用回调处理一般性消息和错误消息等。
RecorderVideoSource 基本上的功能就是设置buffer和获取视频码流
RecorderAudioSource 基本上的功能就是设置创建音频源和音频编码器,以及读取音频流。

2、视频编码部分的各功能模块

模块(类)名称 功能
CameraDevice 作用把CameraAbility(帧率和分辨率)里的参数传入设置摄像头,并初始化成员变量prcessorHdls_(处理器句柄)和prcessorAttrs_(处理能力属性)。并在运行之前把摄像头的输出状态设置为以下三者之一:Record、Preview、Capture,并根据输出状态设置对应的assistant。以及执行获取码流。
RecordAssistant CameraDevice类所拥有的用于录像的类,它的功能有设置视频编码器句柄、设置视频码流缓冲区、设置响应码流生成完毕消息的回调函数、以及开始执行编码。

需要注意的是音频的采集和编码功能是在Recorder子系统独立完成的,而视频的采集编码功能在CameraDevice和RecordAssistant模块中完成。

三、编码录像流程代码解读

applications\sample\camera\media\camera_sample.cpp是一个打开摄像头并且进行录像、预览、截图的例子,通过例子程序可以深入了解媒体子系统的编码录像流程。下文先对代码做尽可能的精简,再对剩余代码做简要的解释。

static int32_t
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值