📄 rtp_rfc3984_h264_over_rtp_cn.txt
字号:
图 13. RTP包包含一个多时刻MTAP24类型的聚合包,包括两个多时刻聚合单元
5.8. 分片单元 (FUs)
本荷载类型允许分片一个NAL单元到几个RTP包中。在应用层这样做比依赖于底层(IP)的分片有以下好处:
o 荷载格式有能力传输NAL单元大于64K字节的单元通过IPv4网络,或许存在预编码的视频,特别在高清格式 (每个图像的分片数目有限制,导致每个图像的NAL单元数目的限制, 从而导致大的 NAL单元).
o 分派机制允许分片单个图像并且采用一般向前的纠错像12.5描述的那样.
分片只定义于单个NAL单元不用于任何聚合包。NAL单元的一个分片由整数个连续NAL单元字节组成. 每个NAL单元字节必须正好是该NAL单元一个分片的一部分。相同NAL单元的分片必须使用递增的RTP序号连续顺序发送(第一和最后分片之间没有其他的RTP包)。相似, NAL单元必须按照RTP顺序号的顺序装配。
当一个NAL单元被分片运送在分片单元(FUs)中时,被引用为分片NAL单元。STAPs,MTAP不可以被分片。 FUs不可以嵌套。即, 一个FU 不可以包含另一个FU.
运送FU的RTP时戳被设置成分片NAL单元的NALU时刻.
图 14 表示FU-A的RTP荷载格式。FU-A由1字节的分片单元指示,1字节的分片单元头,和分片单元荷载组成。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FU indicator | FU header | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| |
| FU payload |
| |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| :...OPTIONAL RTP padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
图 14. FU-A的RTP荷载格式
图 15 表示FU-B的RTP荷载格式. FU-B由1字节的分片单元指示,1字节的分片单元头,和解码顺序号(DON)以及分片单元荷载组成。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FU indicator | FU header | DON |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
| |
| FU payload |
| |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| :...OPTIONAL RTP padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
图 15. FU-B的RTP荷载格式
对于分片NAL单元的第一个分片如果用于交错打包方式,则必须使用NAL单元类型FU-B。NAL单元类型FU-B MUST不可以用于其他情况。换句话, 在交错打包方式,每个被分片的NALU,FU-B作为第一个分片,后面跟随的是一个或多个FU-A分片.
FU指示字节有以下格式:
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI| Type |
+---------------+
FU指示字节的类型域的28,29表示FU-A和FU-B。F的使用在5。3描述。NRI域的值必须根据分片NAL单元的NRI域的值设置。
FU头的格式如下:
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|S|E|R| Type |
+---------------+
S: 1 bit
当设置成1,开始位指示分片NAL单元的开始。当跟随的FU荷载不是分片NAL单元荷载的开始,开始位设为0。
E: 1 bit
当设置成1, 结束位指示分片NAL单元的结束,即, 荷载的最后字节也是分片NAL单元的最后一个字节。当跟随的FU荷载不是分片NAL单元的最后分片,结束位设置为0。
R: 1 bit
保留位必须设置为0,接收者必须忽略该位。
Type: 5 bits
NAL单元荷载类型定义在[1]的表7-1.
FU-B中DON的值的选择在5.5已经描述.
注: FU-B中的DON域允许网关分片NAL单元到FU-B而不用组织进来的NAL单元到NAL单元解码顺序。
一个分片单元不可以传输在一个FU中; 即, 开始位和结束位不可以被同时设置在同一个FU头中。
FU荷载由分片NAL单元的荷载分片组成,使得如果连续FU的分片单元荷载顺序连接, 可以重构分片NAL单元的荷载。NAL单元分片的类型字节不包括,就像在分片单元荷载中一样,但是分片单元的NAL单元的类型信息运送FU指示字节的F和NRI域以及FU头的类型域。一个FU荷载可以有任意字节也可以为空。
注释: 空的FUs允许减少某类发送者在几乎无丢失环境中的延迟。这些发送者特点是他们的NALU完全产生前,可以打包NALU分片,因此,在NALU大小未知之前。如果零长度分片不被允许,发送者不得不产生至少一位数据在当前分片被发送前. 由于H.264的特性, 有时几个宏快占据0位,这是不希望的并且增加延迟。但是, (潜在)使用0长度的NALU应该仔细权衡增加NALU丢失的风险,因为增加了传输包。
如果一个分片单元丢失,接收者应该丢弃后续的所有分片单元对应于相同分片NAL单元的传输顺序的分片。
终端或MANE中的接收者可以聚合前一个NAL单元的n-1分片到一个(不完全的) NAL单元,甚至分片n没有接收到. 这种情况下,NAL单元的forbidden_zero_bit必须被设置成1指示语法违背.
6. 打包规则
打包方式在5.2节介绍. 对于多于一个打包方式的公共打包规则在6.1节指定. 单个NAL单元方式的打包规则,非交错方式,交错方式的打包规则分别在6.2, 6.3,6.4节指定。
6.1. 公共打包规则
不管使用那种打包方式,所有发送者必须遵守以下打包规则:
o 属于同一编码图像(共享相同RTP时戳值)的编码NAL单元片断或者编码数据分区NAL单元片断可以按照定义在[1]中的应用Profile允许的任何顺序发送; 但是,对于延迟敏感的系统,他们应该按照他们原始编码顺序发送,以减少延迟。注意:编码顺序不必要是扫描顺序,而是NAL包对RTP协议栈可用的顺序。
o 参数集根据8.4节给定的规则和建议处理。
o MANEs 不可以重复任何NAL单元,除了顺序或图像参数集NAL单元,同样本文或者H.264规范也没有提供手段识别重复的NAL单元。顺序和图像参数集NAL单元可以重复使得他们的纠错接收更可靠,但是,任何这样的重复不可以影响任何活动顺序或图像参数集的内容。重复应该在应用层进行,不应通过复制RTP包进行(相同序号)。
使用非交错方式和交错方式的发送者必须遵守以下打包规则:
o MANEs可以转换单个NAL单元包到一个聚合包,转换一个聚合包到几个单个NAL单元包,或在RTP转换器中混合两个概念。RTP转换器至少应该考虑如下参数:路径MTU大小, 不平等的保护机制(即,根据RFC 2733通过基于包的FEC,特别对于顺序和图像参数集NAL单元以及编码片断数据分区NAL单元),系统可以忍受的延迟以及接收者缓冲能力。
注:RTP转换器要求按照每个RFC3550处理RTCP.
6.2. 单个NAL单元模式
本方式应用在OPTIONAL打包方式MIME参数值等于0,不包含打包方式,或者没有外部手段指示其他的打包方式的时候。所有的接收者必须支持本方式。它主要用于低延迟应用(和使用ITU-T H.241建议兼容的系统)。(见12.1节). 只有单个NAL单元包可以用在这种方式。STAPs, MTAPs, and FUs 不可以使用。单个NAL单元的传输顺序必须和NAL解码顺序一致。
6.3. 非交错方式
本方式应用在OPTIONAL打包方式MIME参数值等于1或者改方式被外部的手段打开时。本方式应该被支持。它主要用于低延迟应用。本方式只允许单个NAL单元包, STAP-As, FU-As包。STAP-Bs, MTAPs,FU-Bs不可以使用。NAL单元的传输顺序必须和NAL单元解码顺序一致。
6.4. 交错方式
本方式应用在OPTIONAL打包方式MIME参数值等于2或者改方式被外部的手段打开时。有些接收者可以支持本方式。可以使用 STAP-Bs, MTAPs, FU-As,FU-Bs。STAP-As 和单个NAL单元包不可以使用。包和NAL单元传输顺序的限制在5.5节指定。
7. 打包过程 (信息)
打包过程是实现相关的。因此,下面的描述应该被看成合适实现的例子。其他的方案也可以使用。相关描述算法的优化也是可能的。7.1演示单个NAL单元和非交错打包方式的打包过程,7.2描述交错方式的打包过程。7.3 包括附加的封装指导对于智能接收者。
所有相关于缓冲区管理正常的RTP机制也适用。特别的,重复的过期的RTP包(由RTP序号/时戳指示)被删除。 为了确定精确的解码时间, 如可能的延迟因素也被允许为了正确的流之间的同步。
7.1. 单个NAL单元和非交错方式
接收者包括一个接收缓冲区以补偿传输延迟和抖动。接收者存储进来的包按照接收顺序在接收缓冲区中。包被解封装按照RTP序号的顺序。如果封装包是一个单个NAL单元包,包含在包中的NAL单元直接传递给解码器。如果解封装的包是一个STAP-AI, 包含在包中的NAL单元按照他们在包中的封装顺序传递给解码器。如果解封装包是一个FU-A, 所有的分片NAL单元单分片连接在一起传递给解码器。
信息: 如果解码器支持任意分片顺序,编码的图像片可以按照任意顺序传送给解码器而不管他们的接收传送顺序。
7.2. 交错方式
这些打包规则后面的一般概念是重新排序NAL单元从传输顺序到NAL单元解码顺序。
接收者包括一个接收缓冲区以补偿传输延迟抖动以及重新排序包从传输顺序到NAL单元解码顺序。本部分,接收者操作的描述假设没有传输延迟抖动。为了和实际的差异,一个接收缓冲区也用于补偿传输延迟抖动,接收者者本部分调用解交错缓冲区。接收者应该准备传输延迟抖动;即, 或者保留单独的缓冲区用于传输延迟抖动缓冲和解交错缓冲或者使用接收缓冲用于传输延迟抖动和解交错。而且, 接收者应该考虑传输延迟抖动在缓冲区操作时,即,在开始解码和回放前增加缓冲区。
本部分组织如下: 7.2.1 描述如何计算交错缓冲区的大小. 7.2.2指定接收过程如何组织接收到的NAL单元到NAL解码顺序。
7.2.1. 解交错缓冲区的大小
当 SDP Offer/Answer 模型或其他任何能力交换过程被使用时, 接收流的属性应该使得接收者的能力不被超过。在 SDP Offer/Answer 摸型行中, 接收者可以指示它的能力以分配一个解交错缓冲区使用deintbuf-cap MIME 参数。发送者指示解交错缓冲区大小的要求使用sprop-deint-buf-req MIME参数. 因此,推荐设置解交错缓冲区大小(字节数目)等于或大于sprop-deint-buf-req MIME 参数指定的值. 参见 8.1 得到更多信息关于 deint-buf-cap和sprop-deint-buf-req MIME参数,8.2.2 关于他们在SDP Offer/Answer模型中的使用。
在会话建立中一个公布的会话描述被使用,sprop-deint-buf-req MIME参数指定交错缓冲大小的要求。因此,推荐设置解交错缓冲区大小(字节位单位)等于或大于sprop-deint-buf-req MIME 参数的值.
7.2.2. 解交错过程
在接收者中有两个缓冲状态: 初始缓冲和正在播放缓冲。初始缓冲发生在RTP会话被初始化时。初始缓冲后,解码和播放开始了, 使用缓冲-播放模型。
不管缓冲的状态,接收者存储进来的NAL单元按照接收顺序,在解交错缓冲区中。聚合包的 NAL单元存储在单个解交错缓冲区中DON的值被计算为所有NAL单元存储。
描述在下面的接收操作需要以下的函数常数帮助:
o 函数AbsDON在8.1指定.
o 函数don_diff在 5.5 指定.
o 常数 N 是 OPTIONAL sprop-interleaving-depth MIME 类型参数的值( 8.1)加1.
初始缓冲持续直到以下条件完成:
o 在解交错缓冲区中有 N VCL NAL单元。
o 如果sprop-max-don-diff存在, don_diff(m,n)大于sprop-max-don-diff的值, 其中 n 对应所有接收到的NAL单元中最大AbsDON值的NAL单元,m 对应所有接收到的NAL单元中最小AbsDON值的NAL单元。
o 初始缓冲区已经持续时间等于或大于 OPTIONAL sprop-init-buf-time MIME 参数指定的值.
要从解交错缓冲区删除的NAL单元的确定如下:
o 如果解交错缓冲区包含至少N 个VCL NAL单元,NAL单元被从解交错缓冲区移出传递给解码器按照下面指定的次序直到缓冲区中包含N-1 VCL NAL 单元。
o 如果sprop-max-don-diff存在, 所有的NAL单元 m,他们的don_diff(m,n)大于sprop-max-don-diff的从解交错缓冲区移出传送给解码器按照下面指定的顺序。在此, n 对应所有接收到的NAL单元中最大AbsDON值的NAL单元。
NAL单元传递给解码器的顺序指定如下:
o 让PDON是一个变量RTP会话开始时初始化为0。
o 对于每个关联DON的NAL单元, 按如下计算一个DON距离。如果NAL单元的DON大于PDON的值, DON距离等于DON-PDON.否则DON距离等于 65535 - PDON + DON + 1.
o NAL单元分发给解码器按照DON距离递增的顺序
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -