当前流行的应该还算是h264,接下来中国广播电视会使用avs,而国际上应该会使用h265(要收专利费)和Google的VP9(开源,无专利费)
一个h264视频由N组GOP(group of picture)组成,GOP由一帧一帧被编码的图像组成,一帧编码图像由一个片(slice)或多个片组成,一个片由一个或多个宏块(MB,macroblock)组成。对于h264来说,宏块大小固定为16*16(16*16的Y+8*8的Cb+8*8的Cr);
//h265的宏块大小则是根据图像信息由8*8到64*64变化;
H264结构上可以分为:
VCL (video codec layer) 视频编码层
NAL (network abstractionlayer)网络提取层
其主要优势是兼具良好的视频压缩比和网络亲和性;
H264编码过程中有三种不同的数据形式:
SODB: 数据比特串,及VCL数据;
RBSP: 原始字节序列载荷,由SODB后面添加结尾bit,1bit的1,加若干bit的0,加0是为了字节对齐;
EBSP: 扩展字节序列载荷,由RBSP基础上添加仿校验字节(0x03);(Annexb封装方式)
H264在网络上传输的结构为NALU,即NAL unit,其结构为:NAL头+RBSP;实际传输的数据格式如下:
NALU header | RBSP | NALU header | RBSP | NALU header | RBSP | … |
NALU头的结构(1byte):
Forbidden_bit(1bit) + nal_reference_bit(2bit)+ nal_unit_type(5bit)
结构图示例:
Forbidden_bit(1bit) | Nal_refference_bit(2bit) | Nal_unit_type(5bit) |
1、 forbidden_bit 禁止位,初始为0,当网络发现NAL单元由bit错误时,可设置该bit为1,以方便纠错或丢掉该单元;
2、 nal_reference_bit nal重要性,标志该nal单元的重要性,值越大,越重要,解码器在解码性能不够时会丢掉重要性为0的NAL单元;
3、 nal_unit_type NALU RBSP部分的数据类型
NALU列表:
nal_unit_type | NAL类型 | nal_reference_bit |
0 | 未使用 | 0 |
1 | 非IDR片 | 此片属于参考帧,则不等于0;不属于参考帧,则等于0; |
2 | 片数据A分区 | 同上 |
3 | 片数据B分区 | 同上 |
4 | 片数据C分区 | 同上 |
5 | IDR图像的片 | 5 |
6 | 补充增强信息单元(SEI) | 非0 |
7 | 序列参数集 | 非0 |
8 | 图像参数集 | 0 |
9 | 分界符 | 0 |
10 | 序列结束 | 0 |
11 | 码流结束 | 0 |
12 | 填充 | 0 |
13~23 | 保留 | 0 |
24~31 | 不保留 | 0 |