h.264回顾——001
来源:互联网 发布:柳州金刚网络 编辑:程序博客网 时间:2024/06/08 05:50
H.264 的功能分为两层:视频编码层(VCL, Video Coding Layer)和网络提取层(NAL,Network Abstraction Layer)。VCL 数据即编码处理的输出,它表示被压缩编码后的视频数据序列。
VCL存在三种封装形式:SODB, RBSP, EBSP.
SODB:数据比特串,即编码后的最原始的数据;
RBSP:原始字节序列载荷,即在SODB的后面添加了trailing bits,即一个bit 1和若干个bit 0,以便字节对齐;
EBSP:扩展字节序列载荷,即在RBSP的基础上添加了仿校验字节0x03.----annexb
二、联系、区别与作用
SODB是编码收的原始数据,经过封装后为RBSP,RBSP是NAL单元的数据部分的封装格式。在NAL内部为了防止与起始码竞争,从而引入填充字节0x03,这样便形成了EBSP。
1、RBSP的形成过程
如果SODB的内容是空的,那么RBSP的内容也是空的;
否则,RBSP的第一个字节取自SODB的第1到第8个比特,RBSP字节内部按照从左到右从高到低的顺序排列。以此类推,RBSP中的每个字节都直接取自SODP的相应比特。RBSP的最后一个字节包含SODB的最后几个比特,以及trailing bits。其中,trailing bits的第一个比特为1,其余的比特为0,保证字节对齐。最后,在结尾添加0x0000,即CABAC ZERO WORD,从而形成RBSP。
2、EBSP的形成过程
NALU数据+起始码就形成了AnnexB格式,起始码包括两种,0x00000001和0x000001。为了不让NALU的主体与起始码之间产生竞争,在对RBSP进行扫描时,如果遇到连续的两个0x00字节,则在该两个字节后面添加一个0x03字节。在解码的时候将该0x03字节去掉,也成为脱壳操作。
通过该种方式形成EBSP,这需要将近两倍的整帧图像码流大小。为了减少存储器需求,在每个macroblock结束后,即检查该macroblock的SODB的起始码竞争问题,并保留SODB的最后两个字节的零字节个数,以便与下一个macroblock的SODB的开始字节形成连续的起始码竞争检测。对一帧图像的最后一个macroblock,先添加结尾停止bit,在检查起始码竞争。
注:起始码包括两种情况,即4字节和3字节。在SPS、PPS和Access Unit的第一个NALU使用4字节起始码,其余情况均使用3字节起始码。
- h.264回顾——001
- H——H
- 回顾<string.h>中API
- Struts——回顾
- Hibernate——回顾
- Spring——回顾
- 操作系统—回顾
- 回顾各种编码的创新和异同-MEPG2, MPEG4, H.264/AVC以及H.265/HEVC比较
- 回顾各种编码的创新和异同-MEPG2, MPEG4, H.264/AVC以及H.265/HEVC比较
- 回顾各种编码的创新和异同-MEPG2, MPEG4, H.264/AVC以及H.265/HEVC比较(转)
- 大学回顾——大一
- 【年总】——回顾
- 回顾——Hadoop简介
- 回顾——HDFS文件系统
- 数据库学习——回顾
- 数学回顾——高等数学
- H极大值—lhMorpHMax
- ZCMU—H
- windows下编译ffmpeg
- 小菜鸟首遇“险峰”
- wxWidgets中帮助文档的使用
- POJ2251
- 近期计划
- h.264回顾——001
- 3GPP TS 0710 MUX协议
- HDU 1443 Joseph
- 使用ViewPager+Fragment来实现带滚动条的多屏滑动-IndicatorFragmentActivity
- C++ Primer Plus 第三章
- 用GDB调试NGINX
- C 语言的若干问题(持续更新中)
- C++ Primer Plus 第四章
- gdb调试nginx要点