想深入研究的可以去看原英文文档 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。
NAL头由一个字节组成。
语法:禁止位(1bit)、重要性位(2bit)、NALU类型(5bit)。
NAL头信息的每一位说明如下表所示。
nal_unit_type取值的含义如下:
0 没有定义
1-23 NAL单元,单个 NAL 单元包
1 不分区,非IDR图像的片
2 片分区A
3 片分区B
4 片分区C
5 IDR图像中的片
6 补充增强信息单元(SEI)
7 SPS(Sequence Parameter Set序列参数集,作用于一串连续的视频图像,即视频序列)
8 PPS(Picture Parameter Set图像参数集,作用于视频序列中的一个或多个图像)
9 序列结束
10 序列结束
11 码流结束
12 填充
NALU举例如下:(十六进制)
H264码流结构
码流分层结构如下图:
第一层:比特流。该层有两种格式:附录B格式和RTP格式。
第二层:NAL Unit层。包含了NAL Header和NAL Body信息。
第三层:Slice层。
一帧视频图像可编码成一个或者多个片,每片包含整数个宏块,即每片至少 一个宏块,最多时包含整个图像的宏块。
片的目的:为了限制误码的扩散和传输,使编码片相互间保持独立。片共有 5 种类型: I 片(只包含 I 宏块)、P 片(P 和 I 宏块)、B 片(B 和 I 宏块)、SP 片(用于不同编码流之 间的切换)和 SI 片(特殊类型的编码宏块)。
片的语法结构(如下图所示):片头规定了片的类型、属于哪个图像、有关的参考图像等;片的数据包含了一系列宏块和不编码数据。
第四层:Slice data层。Slice由宏块(macro block, MB)组成。宏块是编码处理的基本单元。
第五层:PCM类。
第六层:残差层。
H264的Level(级别)和Profile(档次)说明
H264的Level(级别)是用来约束分辨率、帧率和码率的。具体参照下表
Max macroblocks:最大宏块数。注:宏块尺寸是16x16的。
per second:每秒(的最大宏块数)。可用于约束帧率。
per frame:每帧(的最大宏块数)。可用于约束分辨率。
Max video bit rate (kbit/s):最大视频码率。不同档次(Profile)下会有区别。
BP:Baseline Profile,基线档次。
XP:Extended Profile,进阶档次。
MP:Main Profile,主要档次。
HiP:High Profile,高级档次。
Hi10P:High 10 Profile,高级10位档次。
Hi422P:High 4:2:2 Profile,高级4:2:2档次。
Hi444PP:High 4:4:4 Predictive Profile,高级4:4:4(实验性?)档次。
H.264 主要Profile 说明:
• BP(Baseline profile):提供I/P帧,仅支持Progressive(逐行扫描)和CAVLC。多应用于“视频会话”,如可视电话、会议电视、远程教学、视频监控等实时通信领域;
• XP(Extended profile):提供I/P/B/SP/SI帧,仅支持Progressive和CAVLC。多应用于流媒体领域,如视频点播、基于网络的视频监控等;
• MP(Main profile):提供I/P/B帧,支持Progressive和Interlaced(隔行扫描),提供CAVLC和CABAC。多应用于数字电视广播、数字视频存储等领域;
• HiP(High profile):(Fidelity Range Extensions,FRExt)在Main profile基础上新增8*8帧内预测,Custom Quant,Lossless Video Coding,更多YUV格式(4:2:2,4:4:4),像素精度提高到10位或14位。多应用于对高分辨率和高清晰度有特别要求的领域。