字节流的格式|国际标准的组成部分

来源:互联网 发布:企业家的特质知乎 编辑:程序博客网 时间:2024/06/06 07:38

字节流的格式|国际标准的组成部分
字节流格式的语法与语义,这些字节流的规定用于按照顺序的字节或比特流,传送部分或全部
NAL 单元流,在该流中NAL 单元边界的定位应该能够从数据类型中识别,如ITU-T H.222.0 建议书| ISO/IEC
13818-1 系统或ITU-T H.320 建议书系统。对于面向比特的传送,字节流中的比特顺序起始于第一个字节的
MSB,处理至第一个字节的LSB,接着是第二个字节的MSB,以此类推。
字节流格式由字节流NAL 单元语法结构序列构成。每一字节流NAL 单元语法结构包含有一个起始编码前
缀,后面跟随一个nal_unit(NumBytesInNALunit)语法结构。它可能(一定情况下,它应该)包含一个额外的
zero_byte 语法元素。它也可能包含一个或多个额外的trailing_zero_8bits 语法元素。当为第一个字节流NAL 单元
时,也可能包含一个或多个额外的leading_zero_8bits语法元素。
B.1 字节流NAL单元语法与语义
B.1.1 字节流NAL单元语法


1.2 字节流NAL单元语义

字节流NAL 单元的顺序应遵循NAL 单元里包含的NAL 单元解码顺序(见7.4.1.2 节)。当字节流NAL 单
元里包含NAL单元时,每一字节流NAL单元的内容与相同的访问单元相关联。
leading_zero_8bits 为0x00。
注 — leading_zero_8bits语法元素只能在流的第一个字节流NAL单元里出现,因为(如B.1.1节语法图所示)任一
在NAL单元语法结构后等于0x00字节,出现在一个四字节序列0x00000001前。
zero_byte为一个等于0x00的单字节。
当下述任一个条件满足时,应有zero_byte语法元素。
— nal_unit( )里的nal_unit_type等于7(设置了序列参数)或8(设置了图像参数)。
— 字节流NAL单元语法结构在解码顺序时包含一个访问单元的第一个NAL单元。
start_code_prefix_one_3bytes 为一个3字节的固定值序列,等于0x000001,该语法元素称为起始码前缀。
trailing_zero_8bits为一个等于0x00的字节。
B.2 字节流NAL单元解码过程
本过程的输入由构成一组有序字节组成,该字节流由一个字节流NAL单元语法结构序列组成。
ITU-T H.264
本过程的输出由NAL单元语法结构序列构成。
在解码过程开始时,解码器把其当前的位置初始化为字节流的起始位置。然后提取,并丢弃每一个
leading_zero_8bits 语法元素(如果存在的话),移动当前位置至某一时刻的字节处,直到比特流的当前位置紧接
的四个字节为四字节序列0x00000001。
解码器此时重复执行下述按步骤的过程,对字节流中每一个NAL 单元语法结构进行提取与解码,直到字节
流结尾(由未规定的方式判决),并且字节流中最后一个NAL单元也已经解码:
1.当字节流里的紧接的四个字节构成四字节序列0x00000001,对比特流中下一个字节(为zero_byte语法元
素)进行提取并丢弃时,字节流的当前位置设为紧接被丢弃的字节的字节位置。
2.提取与丢弃比特流中下一个三字节序列(为start_code_prefix_one_3bytes),且比特流当前位置设为此紧
接被丢弃的3字节序列的字节的位置。
3.NumBytesInNALunit 设为自当前字节位置起至下述条件前的位置的最后一个字节,且包括最后一个字节
的编号。
a.一个三字节序列的排列等于0x000000,或
b.一个三字节序列的排列等于0x000001,或
c.字节流的结束,由未规定的方式判决。
4.NumBytesInNALunit 字节从比特流中移除,字节流的当前位置前移NumBytesInNALunit 字节。这个字节
序列为nal_unit( NumBytesInNALunit ),并用NAL单元解码过程进行解码。
5.当字节流中的当前位置不为字节流的结尾(由未规定的方式判决),且字节流中一个字节不是等于
0x000001 开始的三字节序列,也不是等于0x00000001 开始的四字节序列。解码器提取并丢弃每一个
trailing_zero_8bits 语法元素,移动字节流中的当前位置到某一时刻的一个字节处,直到字节流里的当前位置
接下的四个字节构成四字节的序列0x00000001或已至字节流的结尾(由未规定的方式判决)。
B.3 解码器字节定界恢复(参考性)
国际标准的组成部分。
很多应用向解码器提供采用字节本身定界的数据,这样不需要本节所描述的检测面向比特的字节定界。
当可以判定比特流中的位置是否为字节定界时,解码器称为可以对比特流进行字节定界的。当一个解码器不
能与编码器字节流的字节定界时,解码器可能会检测输入的比特流中的二进制图像'00000000 00000000 00000000
00000001'(31 个连续比特等于0 后,1 个比特等于1)。紧随这个图样的比特为起始码前缀定界字节的第一个比
特。直到检测到这个图样,解码器将与编码器按字节定界,并定位于字节流中NAL单元的起始位置。
当与编码器的字节对位后,解码器可以从流入的字节流里查找三字节的序列0x000001 与0x000003。
当三字节序列0x000001被检测到时,意味着起始编码前缀。
当检测到三字节序列0x000003,第三字节(0x03)如果是mulation_prevention_three_byte 时,将按7.4.1 节
所规定被丢弃。
当检测到比特流语法的错误(比如orbidden_zero_bit的非0值或7.4.1中所规定禁止使用的三字节序列之一
或四字节序列之一)时,解码器可能认为检测到的情况意味着字节定界的丢失,丢弃所有比特数据,直到重新检
测到比特流中稍后的字节定界
原创粉丝点击