这几天在编写视频录制模块,所以,闲暇之余,又粗粗的整理了一下,主要是API,以备不时之用
摄像头获取的模拟信号通过经芯片处理(我们使用的是CX25825),将模拟信号转成数字信号,产生标准的ITU 656 YUV格式的数字信号以帧为单位送到编码卡上的DSP和内存中。分别供视频实时预览、移动侦测处理以及编码等使用。其中编码的作用是将编码卡内存中的YUV数据送到H264编码器中,进过H.264编码产生压缩好的码流,送到主机内存中,供录像或网络传输使用。编码模块完成各个协议编码,协调 MD、VPP 相关模块的管理、同步和控制,配合软件调度和硬件共同完成视频编码相关功能。
一、重要概念
主次码流
主次码流是指硬件逻辑单元启动一次同时产生的 2 路码流,即 1 路主码流和 1 路次码流。主码流和次码流可以为不同的编码协议,但其宽高比例都必须满足 1:1、1:2 或 1:4,次码流不能单独存在(必须和 1 路主码流在同一个通道组中) 。
双码流
双码流是指硬件逻辑单元启动 2 次分时产生的 2 个码流,即 2 路主码流。双码流可以为不同的编码协议,双码流之间的大小比例没有约束关系。
通道组
通道组是指芯片能够同时处理的编码通道的集合,相当于一个容器。一个通道组最多可同时包含 1 路主码流(H.264/MJPEG) 、1路次码流(H.264/MJPEG) ,或者仅包含 1 路 JPEG抓拍(即 JPEG抓拍时,不允许包含任何其他通道) ,或者 1 路MPEG4 编码通道。
H264
H.264 的功能分为两层:视频编码层(VCL, VideoCoding Layer)和网络提取层(NAL, NetworkAbstraction Layer)。VCL数据即编码处理的输出,它表示被压缩编码后的视频数序列。在VCL数据传输或存储之前,这些编码的VCL数据,先被映射或封装进 NAL单元中。每个NAL单元包括一个原始字节序列负荷(RBSP, Raw Byte SequencePayload)、一组对应于视频编码的 NAL 头信息。RBSP 的基本结构是:在原始编码数据的后面填加了结尾比特。一个bit“1”若干比特“0”,以便字节对齐。H.264的编码视频序列包括一系列的NAL单元,每个 NAL单元包含一个RBSP。编码片(包括数据分割片 IDR片)和序列RBSP结束符被定义为VCL NAL单元,其余为 NAL 单元。典型的 RBSP 单元序列如图 2 所示。每个单元都按独立的 NAL 单元传送。单元的信息头(一个字节)定义了RBSP 单元的类型,NAL单元的其余部分为 RBSP 数据。
二、相关结构
1.定义编码通道属性结构体:
typedef structhiVENC_CHN_ATTR_S
{
PAYLOAD_TYPE_E enType; //编码协议类型
HI_VOID *pValue; //编码属性指针
}VENC_CHN_ATTR_S;