H264句法
H264基本概念之宏块、片和片组

H264基本概念之宏块、片和片组
这几个概念对比音频信号处理可是全新的,下面简要介绍一下定义和作用:
1、宏块(Macro Block):一个编码图像首先要划分成多个块(4x4 像素)才能进行处理,显然宏块应该是整数个块组成,通常宏块大小为16x16个像素。
宏块分为I、P、B宏块,I宏块只能利用当前片中已解码的像素作为参考进行帧内预测;P宏块可以利用前面已解码的图像作为参考图像进行帧内预测;B宏块则是利用前后向的参考图形进行帧内预测;
以下是宏块的句法单元,来自参考文献2
2、片(Slice):一帧视频图像可编码成一个或者多个片,每片包含整数个宏块,即每片至少一个宏块,最多时包含整个图像的宏块。
片的目的:为了限制误码的扩散和传输,使编码片相互间保持独立。
片共有5种类型:I片(只包含I宏块)、P片(P和I宏块)、B 片(B和I宏块)、SP片(用于不同编码流之间的切换)和SI片(特殊类型的编码宏块)。
以下是片的句法结构:片头规定了片的类型、属于哪个图像、有关的参考图像等;片的数据包含了一系列宏块和不编码数据。
3、片组是一个编码图像中若干宏块的一个子集,包含一个或若干个片。
一般一个片组中,每片的宏块是按扫描次序进行编码的,除非使用任意片次序(Arbitrary Slice Order, ASO)一个编码帧中的片之后可以跟随任一解码图像的片。
另外一种片组,灵活宏块次序(Flexible Macroblock Ordering, FMO)用灵活的方法,把编码的宏块宏块映射到相应的片组中,见下图:
参考文献:
1、新一代视频压缩编码标准;
2、H264 and MPEG-4 video compression。
H264句法

H.264句法和语法总结H.264句法和语法总结 (1)(一)句法元素的分层结构 (3)(二)NAL层句法 (5)(三)序列参数集层(SPS)句法 (7)(四)图像参数集语义 (9)(五)片头句法 (11)(六)参考帧队列重排序(REORDERING)句法 (15)(七)加权预测句法 (16)(八)参考图像序列标记(MARKING)操作的语义 (17)(九)片层数据句法 (18)(十)宏块层句法 (20)(十一)宏块层预测句法 (20)(十二)子宏块预测句法 (21)(十三)残差句法 (21)(十四)CA VLC残差句法 (22)NAL技术 (24)H264基本概念之宏块、片和片组 (27)H.264起始码 (29)MPEG4起始码 (30)(一)句法元素的分层结构/xfding/archive/2010/04/10/5467952.aspx在H.264 定义的码流中,句法元素被组织成有层次的结构,分别描述各个层次的信息,如下图所示在H.264 中,句法元素共被组织成序列、图像、片、宏块、子宏块五个层次。
在这样的结构中,每一层的头部和它的数据部分形成管理与被管理的强依赖关系,头部的句法元素是该层数据的核心,而一旦头部丢失,数据部分的信息几乎不可能再被正确解码出来,尤其在序列层及图像层。
在 H.264 中,分层结构最大的不同是取消了序列层和图像层,并将原本属于序列和图像头部的大部分句法元素游离出来形成序列和图像两级参数集,其余的部分则放入片层。
参数集是一个独立的数据单位,不依赖于参数集外的其他句法元素。
由于参数集是独立的,可以被多次重发或者采用特殊技术加以保护。
复杂通信中的码流中可能出现的数据单位:IDR: 一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I图像。
H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。
H.264编码技术简介.

H.264编码技术简介摘要:本文介绍了H.264编码基本概况,技术特点,并与其他标准进行了比较。
简单介绍了H.264视频编码标准的几个关键技术,并针对目前H.264在监控领域的应用做了讲解。
目录摘要: (1)一.引言 (2)二. H.264视频编码基本概况 (2)2.1 什么是H.264编码? (2)2.2 720P H.264高清成市场主流 (2)2.3 H.264 视频编码标准状况 (2)2.4 H.264 视频编码技术先进性 (3)2.5 H.264的核心竞争力是什么? (5)2.6 Main Profile (6)三、H.264与其他标准的比较 (6)3.1H.264与其他标准的比较 (6)3.2 H.264的技术特点 (8)3.2.1 分层设计 (8)3.2.2 高精度、多模式运动设计 (8)3.2.3 帧内预测功能 (8)3.2.4 4×4块的整数变换 (8)3.2.5 统一的VLC (8)3.3 H.264的主要特点 (9)四、关键技术 (10)五、H.264在监控的应用 (12)5.1 TOYA SDVR 7IV 系统简介 (12)5.2 TOYA SDVR 7IV 系统主要特点 (12)5.3 主要技术规格 (13)5.4 系统功能 (13)5.5 TOYA SDVR 7IV系统应用 (13)六、H.264的总体优缺点 (14)七、小结 (15)八、参考文献 (16)一.引言随着社会的不断进步和多媒体信息技术的发展,人们对信息的需求越来越丰富,方便、快捷、灵活地通过语音、数据、图像与视频等方式进行多媒体通信已成不可或缺的工具。
其中视觉信息给人们直观、生动的形象,因此图像与视频的传输更受到广泛的关注。
然而,视频数据具有庞大的数据量,以普通的25帧每秒,CIF格式(分辨率为352×288)的视频图像为例,一秒钟的原始视频数据速率高达3.8M字节。
不对视频信号进行压缩根本无法实时传输如此庞大的数据量,因此,视频压缩技术成为研究热点。
H264序列参数集语义

序列参数集语义1、profile_idc and level_idc indicate the profile and level to which the bitstream conform s, as specified in Annex A.profile_idc and level_idc表明了比特流遵循的规范和等级,参见Annex A2、constraint_set0_flag equal to 1 indicates that the bitstream obeys all constraints specified in subclause A.2.1. constraint_set0_flag equal to 0 indicates that the bitstream may or may not obey all constraints specified in subclause A.2.1. constraint_set0_flag=1表明比特流遵从 A.2.1节中规定的所有约束;constraint_set0_flag=0表明比特流可以遵从也可以不遵从3、constraint_set1_flag equal to 1 indicates that the bitstream obeys all constraints specified in subclause A.2.2. constraint_set1_flag equal to 0 indicates that the bitstream may or may not obey all constraints specified in subclause A.2.2. constraint_set1_flag,值为1表明比特流遵从从A.2.2节中规定的所有约束;值为0表明比特流可以遵从也可以不遵从4、constraint_set2_flag equal to 1 indicates that the bitstream obeys all constraints specified in subclause A.2.3. constraint_set2_flag equal to 0 indicates that the bitstream may or may not obey all constraints specified in subclause A.2.3. constraint_set2_flag,值为1表明比特流遵从从A.2.3节中规定的所有约束;值为0表明比特流可以遵从也可以不遵从NOTE - When more than one of constraint_set0_flag, constraint_set1_flag, or constraint_set2_flag are equal to 1, the bitstream obeys the constraints of all of the indicated subclauses of subclause A.2.注意:当上述三个标志中不止一个值为1时,比特流遵从A.2中规定的所有约束5、reserved_zero_5bits shall be equal to 0 in bitstream s conforming to this Recommendation | International Standard. Other values of reserved_zero_5bits may be specified in the future by ITU-T | ISO/IEC. Decoders shall ignore the value of reserved_zero_5bits.reserved_zero_5bits对于遵从本标准的比特流值为0,对于ITU-T | ISO/IEC将来制定的标准可规定其他值。
H.264标准----句法与语义(一)

1. 一些约定2. 描述子(Descriptor)如果有竖线,左边表示entropy_coding_mode_flag=0时使用,竖线右边则为1时使用3. 数据分割片:A:片头和片中每个宏块头数据B:Intra和SI片宏块的编码残差数据C:Inter宏块的编码残差数据IDR片不分割其他片是否分割视情况而定4. 几个概念之间的关系每个NAL单元包含一个RBSPRBSP的头信息定义了RBSP单元的类型SPS:seq_parameter_set_id,帧数,POC约束,参考帧数目,解码图像尺寸和帧场编码模式选择标识等PPS:pic_parameter_set_id,可选的seq_parameter_set_id,熵编码模式选择标识,片组数目,初始量化参数和去方块滤波系数调整标识等5. NAL单元句法1) 每个NAL单元可以有起始码前缀和额外填充单元(填充若干个字节0在起始码前缀前实现每个NAL单元长度对齐-------介质存储)2) 起始码0x000001,填充0x000000防止竞争注意:在RBSP最后,如果没有cabac_zero_word,最后一个字节肯定不是0x00,但是如果最后由一个或者多个cabac_zero_word,则,需要在末尾填上一个0x03.因为码流里除了起始,其他地方绝不能出现0x000001和0x000000所以就连cabac_zero_word出现0x0000,0x0000,中间也要被0x03隔断!3) 每次读一个NAL单元,检测到下个NAL单元起始码,就可以计算出NumBytesInNALunit4) nal_ref_idc:优先级非0:包含序列参数集、序列参数集extension,subset序列参数集, 图像参数集, 参考图像slice, 参考图像的slice data partition, 参考图像slice的NAL单元前缀为0:非参考图像的slice或者slice data partition-1) 序列参数集、序列参数集extension,subset序列参数集, 图像参数集的nal_ref_idc不应为0,如果nal_ref_idc=0且nal_unit_type=1~4,那所有的nal_unit_type=1~4的nal_ref_idc=0-2) nal_unit_type=5时,nal_ref_idc不能为0-3) nal_unit_type=6,9,10,11,12时,nal_ref_idc为05) nal_unit_type:(5Bits)suffix dependent:如果nal_unit_type=14之后的NAL单元的nal_unit_type=1/5,则是VCL,否则不是VCL。
h.264语法结构分析

h.264语法结构分析Network Abstraction Layer,简称NAL。
h.264把原始的yuv⽂件编码成码流⽂件,⽣成的码流⽂件就是NAL单元流(NAL unit Stream)。
⽽NAL单元流,就是NAL单元组成的。
标准的Annex B规定了NAL单元组成NAL单元流的⽅式,下⾯描述了如何将⼀个NAL单元打包起来,⽽多个NAL单元进⾏组合则形成了NAL单元流。
byte_stream_nal_unit( NumBytesInNALunit ) { C Descriptorwhile( next_bits( 24 ) != 0x000001 &&next_bits( 32 ) != 0x00000001 )leading_zero_8bits /* equal to 0x00 */ f(8)if( next_bits( 24 ) != 0x000001 )zero_byte /* equal to 0x00 */ f(8)start_code_prefix_one_3bytes /* equal to 0x000001 */ f(24)nal_unit( NumBytesInNALunit )while( more_data_in_byte_stream( ) &&next_bits( 24 ) != 0x000001 &&next_bits( 32 ) != 0x00000001 )trailing_zero_8bits /* equal to 0x00 */ f(8)}语法元素leading_zero_8bits 0x00,只有可能出现在NAL单元流的头部,但是⼀般编码出来的h264⽂件都不会包含这部分。
zero_byte 0x00,如果当前的NAL单元为sps、pps或者⼀个访问单元(access unit)的第⼀个NAL单元,这个字节就会存在。
H.264百度百科

H.264百科名片H.264,同时也是MPEG-4第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。
目录[隐藏]H.264基本概况H.264算法的优势H.264的发展历史H.264的高级技术背景H.264的特征和高级优势H.264标准概述H.264标准的主要特点H.264标准的关键技术H.264基本概况H.264算法的优势H.264的发展历史H.264的高级技术背景H.264的特征和高级优势H.264标准概述H.264标准的主要特点H.264标准的关键技术∙H.264的技术亮点∙H264编码技术∙H264层次构成∙H.264解码∙H.264的性能比较∙H.264的错误恢复工具∙H.264在移动中通应急图像传输中的应用∙关于H.264的六个问题∙国内H.264编解码器生产厂家∙Intel G965支持H.264[编辑本段]H.264基本概况随着HDTV的兴起,H.264这个规范频频出现在我们眼前,HD-DVD和蓝光DVD 均计划采用这一标准进行节目制作。
而且自2005年下半年以来,无论是NVIDIA 还是ATI都把支持H.264硬件解码加速作为自己最值得夸耀的视频技术。
H.264到底是何方“神圣”呢?H.264是一种高性能的视频编解码技术。
目前国际上制定视频编解码技术的组织有两个,一个是“国际电联(ITU-T)”,它制定的标准有H.261、H.263、H.263+等,另一个是“国际标准化组织(ISO)”它制定的标准有MPEG-1、MPEG-2、MPEG-4等。
而H.264则是由两个组织联合组建的联合视频组(JVT)共同制定的新数字视频编码标准,所以它既是ITU-T的 H.264,又是ISO/IEC的MPEG-4高级视频编码(Advanced Video Coding,AVC),而且它将成为MPEG-4标准的第10部分。
H264熵编码具体算法

CAVLC即基于上下文的自适应变长编码。CAVLC的本 质是变长编码,它的特性主要体现在自适应能力上, CAVLC可以根据已编码句法元素的情况动态的选择编码中 使用的码表,并且随时更新拖尾系数后缀的长度,从而获 得极高的压缩比。H.264标准中使用了CAVLC对4*4模块的 亮度和色度残差数据进行编码。
解析除拖尾系数外的非零系数的幅值level1确定后缀长度suffixlength2根据码流查表96得到前缀levelprefix3根据前缀和后缀得到levelcodelevelprefixsuffixlengthlevelsuffix4levelcode为偶数levellevelcode22levelcode为奇数levellevelcode125根据设定的阈值确定是否updatesuffixlegth6cavlc与uvlc比较在相同码率的情况下用cavlc编码的psnr的值高于用uvlc编码的psnr的值并且随着比特率的增加cavlc的优势更加明显h264avc68cavlc基于上下文自适应的可变长编码69cabac基于上下文的自适应二进制算术熵编码610码率控制611去方块滤波612其余特征cabac1
∴经查表可知码流为0000100 ∴code=0000100
4.3 编码每个拖尾系数的符号 对于每个拖尾系数(±1)只需要指明其符号,
其符号用一个比特表示(0表示+ ,1表示-)。编 码的顺序是按照反向扫描的顺序,从高频数据 开始。 例:设有一个4*4块数据(假定NC=0)
0 3 -1 0
0 -1 1 0
0 3 -1 0 0 -1 1 0
1000
0000 ∴TotalZeros=3 又∵TotalCoeffs(非零系数的数目)=5 ∴查表可得码流为111 ∴code=0000100 011 1 0010 111
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
H.264句法和语法总结H.264句法和语法总结 (1)(一)句法元素的分层结构 (3)(二)NAL层句法 (5)(三)序列参数集层(SPS)句法 (7)(四)图像参数集语义 (9)(五)片头句法 (11)(六)参考帧队列重排序(REORDERING)句法 (15)(七)加权预测句法 (16)(八)参考图像序列标记(MARKING)操作的语义 (17)(九)片层数据句法 (18)(十)宏块层句法 (20)(十一)宏块层预测句法 (20)(十二)子宏块预测句法 (21)(十三)残差句法 (21)(十四)CA VLC残差句法 (22)NAL技术 (24)H264基本概念之宏块、片和片组 (27)H.264起始码 (29)MPEG4起始码 (30)(一)句法元素的分层结构/xfding/archive/2010/04/10/5467952.aspx在H.264 定义的码流中,句法元素被组织成有层次的结构,分别描述各个层次的信息,如下图所示在H.264 中,句法元素共被组织成序列、图像、片、宏块、子宏块五个层次。
在这样的结构中,每一层的头部和它的数据部分形成管理与被管理的强依赖关系,头部的句法元素是该层数据的核心,而一旦头部丢失,数据部分的信息几乎不可能再被正确解码出来,尤其在序列层及图像层。
在 H.264 中,分层结构最大的不同是取消了序列层和图像层,并将原本属于序列和图像头部的大部分句法元素游离出来形成序列和图像两级参数集,其余的部分则放入片层。
参数集是一个独立的数据单位,不依赖于参数集外的其他句法元素。
由于参数集是独立的,可以被多次重发或者采用特殊技术加以保护。
复杂通信中的码流中可能出现的数据单位:IDR: 一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I图像。
H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。
IDR 图像一定是 I 图像,但 I 图像不一定是 IDR 图像。
(二)NAL层句法NAL&VCL:H.264 的功能分为两层,即视频编码层(VCL)和网络提取层(NAL,Network Abstraction Layer)。
VCL 数据即编码处理的输出,它表示被压缩编码后的视频数据序列。
在 VCL 数据传输或存储之前,这些编码的 VCL 数据,先被映射或封装进 NAL 单元中。
每个 NAL 单元包括一个原始字节序列负荷(RBSP)、一组对应于视频编码数据的 NAL 头信息。
NAL 单元序列的结构如下:RBSP的类型:PS: 包括序列参数集SPS和图像参数集PPS ,SPS 包含的是针对一连续编码视频序列的参数,如标识符seq_parameter_set_id、帧数及POC的约束、参考帧数目、解码图像尺寸和帧场编码模式选择标识等等。
PPS对应的是一个序列中某一幅图像或者某几幅图像,其参数如标识符pic_parameter_set_id、可选的 seq_parameter_set_id、熵编码模式选择标识、片组数目、初始量化参数和去方块滤波系数调整标识等等。
数据分割:组成片的编码数据存放在3个独立的 DP(数据分割,A、B、C)中,各自包含一个编码片的子集。
分割A包含片头和片中每个宏块头数据。
分割B包含帧内和SI片宏块的编码残差数据。
分割C包含帧间宏块的编码残差数据。
每个分割可放在独立的 NAL 单元并独立传输。
NAL 层句法:nal_unit( NumBytesInNALunit ){// forbidden_zero_bit 等于 0forbidden_zero_bit//nal_ref_idc 指示当前NAL的优先级。
取值范围为 0-3,值越高,表示当前NAL 越重要,需要优先受到保护。
H.264 规定如果当前 NAL是属于参考帧的片,或是序列参数集,或是图像参数集这些重要的数据单位时,本句法元素必须大于0。
nal_ref_idc//nal_unit_type 指明当前 NAL unit 的类型nal_unit_typeNumBytesInRBSP = 0/* rbsp_byte[i] RBSP的第i个字节。
RBSP 指原始字节载荷,它是 NAL 单元的数据部分的封装格式,封装的数据来自 SODB(原始数据比特流)。
SODB 是编码后的原始数据,SODB 经封装为 RBSP 后放入 NAL 的数据部分。
下面介绍一个 RBSP 的生成顺序。
从 SODB 到 RBSP 的生成过程:- 如果 SODB 内容是空的,生成的 RBSP 也是空的- 否则,RBSP 由如下的方式生成:1) RBSP 的第一个字节直接取自 SODB的第1到8个比特,(RBSP 字节内的比特按照从左到右对应为从高到低的顺序排列,most significant),以此类推,RBSP 其余的每个字节都直接取自 SODB的相应比特。
RBSP 的最后一个字节包含 SODB 的最后几个比特,及如下的 rbsp_trailing_bits()2) rbsp_trailing_bits()的第一个比特是 1,接下来填充 0,直到字节对齐。
(填充 0 的目的也是为了字节对齐)3)最后添加若干个 cabac_zero_word(其值等于 0x0000) */for( i = 1; i < NumBytesInNALunit; i++ ){if( i + 2 < NumBytesInNALunit && next_bits( 24 ) = = 0x000003 ) {rbsp_byte[ NumBytesInRBSP++ ]rbsp_byte[ NumBytesInRBSP++ ]i += 2//emulation_prevention_three_byte NAL 内部为防止与起始码竞争而//引入的填充字节 ,值为 0x03。
emulation_prevention_three_byte}elserbsp_byte[NumBytesInRBSP++]}}(三)序列参数集层(SPS)句法seq_parameter_set_rbsp( ){// profile_idc level_idc 指明所用 profile、levelprofile_idc// constraint_set0_flag 等于 1 时表示必须遵从附录 A.2.1 所指明的所有制约条件。
等于 0 时表示不必遵从所有条件。
constraint_set0_flag// constraint_set1_flag 等于 1 时表示必须遵从附录 A.2.2 所指明的所有制约条件。
等于 0 时表示不必遵从所有条件。
constraint_set1_flag// constraint_set2_flag 等于 1 时表示必须遵从附录 A.2.3 所指明的所有制约条件。
等于 0 时表示不必遵从所有条件。
constraint_set2_flag// reserved_zero_5bits 在目前的标准中本句法元素必须等于 0,其他的值保留做将来用,解码器应该忽略本句法元素的值。
reserved_zero_5bits /* equal to 0 */level_idc// seq_parameter_set_id 指明本序列参数集的 id 号,这个 id 号将被picture 参数集引用,本句法元素的值应该在[0,31]。
seq_parameter_set_id// log2_max_frame_num_minus4 这个句法元素主要是为读取另一个句法元素frame_num 服务的,frame_num 是最重要的句法元素之一,它标识所属图像的解码顺序。
这个句法元素同时也指明了 frame_num 的所能达到的最大值:MaxFrameNum = 2*exp( log2_max_frame_num_minus4 + 4 )log2_max_frame_num_minus4// pic_order_cnt_type 指明了poc (picture order count) 的编码方法,poc 标识图像的播放顺序。
由poc 可以由 frame-num 通过映射关系计算得来,也可以索性由编码器显式地传送。
pic_order_cnt_typeif( pic_order_cnt_type == 0 )// log2_max_pic_order_cnt_lsb_minus4 指明了变量 MaxPicOrderCntLsb 的值: MaxPicOrderCntLsb = pow(2, (log2_max_pic_order_cnt_lsb_minus4 + 4) ) log2_max_pic_order_cnt_lsb_minus4else if( pic_order_cnt_type == 1 ){// delta_pic_order_always_zero_flag 等于 1 时,句法元素delta_pic_order_cnt[0]和 delta_pic_order_cnt[1] 不在片头出现,并且它们的值默认为0; 本句法元素等于 0 时,上述的两个句法元素将在片头出现。
delta_pic_order_always_zero_flag// offset_for_non_ref_pic 被用来计算非参考帧或场的 POC,本句法元素的值应该在[pow(-2, 31) , pow(2, 31) – 1]。
offset_for_non_ref_pic// offset_for_top_to_bottom_field 被用来计算帧的底场的 POC, 本句法元素的值应该在[pow(-2, 31) , pow(2, 31) – 1]。
offset_for_top_to_bottom_field// num_ref_frames_in_pic_order_cnt_cycle 被用来解码POC, 本句法元素的值应该在[0,255]。
num_ref_frames_in_pic_order_cnt_cycle// offset_for_ref__frame[i] 用于解码 POC,本句法元素对循环num_ref_frames_in_pic_order_cycle 中的每一个元素指定一个偏移。
for( i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++ )offset_for_ref_frame[i]}// num_ref_frames 指定参考帧队列可能达到的最大长度,解码器依照这个句法元素的值开辟存储区,这个存储区用于存放已解码的参考帧,H.264 规定最多可用 16 个参考帧,本句法元素的值最大为 16。