想深入研究的可以去看原英文文档 h264英文文档下载
x264编码流程:(x264是h264标准的实现)
x264_param_default_preset 设置
x264_param_apply_profile 设置档次
x264_picture_alloc(x264_picture_t输入图像)初始化
x264_encoder_open 打开编码器
x264_encoder_encode 编码
x264_encoder_close( h ) 关闭编码器,释放资源 // x264_picture_clean( x264_picture_t *pic ) 释放 x264_picture_t
H264码流文件分为两层:
(1) VCL(Video Coding Layer)视频编码层:负责高效的视频内容表示,VCL 数据即编码处理的输出,它表示被压缩编码后的视频数据序列。
(2) NAL(Network Abstraction Layer)网络提取层:负责以网络所要求的恰当的方式对数据进行打包和传送,是传输层,不管是在本地播放还是在网络播放的传输,都要通过这一层来传输。
NALU
NALU:网络提取层单元(十六进制),x264编码之后的数据可以理解为很多个NALU组成
NALU举例: 00 00 00 01 06 ...
前4个字节表示NALU的起始码
06 表示 NAL header ,占1个字节
... 为 payload ,表示后续的具体的音视频数据
如果NALU对应的Slice为一帧的开始,则用4字节表示,即0x00000001;否则用3字节表示,0x000001。
NALU头由一个字节组成。
语法:禁止位(1bit)、重要性位(2bit)、NALU类型(5bit)。
NALU头信息的每一位说明如下表所示。
nal_unit_type取值的含义如下:
0 没有定义
1-23 NAL单元,单个 NAL 单元包
1 不分区,非IDR图像的片
2 片分区A
3 片分区B
4 片分区C
5 IDR图像中的片,说明这是关键帧NAL单元。I帧,由若干IDR(即时刷新)图像片组成
6 补充增强信息单元(SEI)
7 SPS(Sequence Parameter Set序列参数集,作用于一串连续的视频图像,即视频序列)
8 PPS(Picture Parameter Set图像参数集,作用于视频序列中的一个或多个图像)
9 序列结束
10 序列结束
11 码流结束
12 填充
NALU举例如下:(十六进制)