h264的RTP负载结构

上传人:枫** 文档编号:509262785 上传时间:2023-12-16 格式:DOC 页数:9 大小:174.50KB
返回 下载 相关 举报
h264的RTP负载结构_第1页
第1页 / 共9页
h264的RTP负载结构_第2页
第2页 / 共9页
h264的RTP负载结构_第3页
第3页 / 共9页
h264的RTP负载结构_第4页
第4页 / 共9页
h264的RTP负载结构_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《h264的RTP负载结构》由会员分享,可在线阅读,更多相关《h264的RTP负载结构(9页珍藏版)》请在金锄头文库上搜索。

1、1. RTP数据包格式RTP报文头格式(见 RFC3550 Page12 :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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |V=2|P|X| CC |M| PT | sequence number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |timestamp|+-+-+-+-+-+-+-+

2、-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | synchronization source (SSRC) identifier | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | contributing source (CSRC) identifiers | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+版本(V):2比特此域定义了 RTP的版本.此协议定义的版

3、本是 2.填料(P):1比特若填料比特被设置,此包包含一到多个附加在末端的填充比特,不是负载的一部分 . 填料的最后一个字节包含可以忽略多少个填充比特 . 填料可能用于某些具有固 定长度的加密算法,或者在底层数据单元中传输多个RTP包.扩展(X):1比特 若设置扩展比特,固定头(仅)后面跟随一个头扩展CSRC十数(CC):4比特CSRC计数包含了跟在固定头后面CSRC识别符的数目标志 (M):1 比特 标志的解释由具体协议规定 . 它用来允许在比特流中标记重要的事件 , 如帧范围 . 规定该标志在静音后的第一个语音包时置位 .负载类型 (PT):7 比特 此域定义了负载的格式 , 由具体应用决

4、定其解释 . 协议可以规定 负载类型码和负载格式之间一个默认的匹配其他的负载类型码可以通过非RTP方法动态定义.RTP发射机在任意给定时间发出一个单独的RTP负载类型;此域不用来复用不同的媒体流.序列号(sequenee number ):16比特 每发送一个 RTP数据包,序列号加一,接收机可以 据此检测包损和重建包序列 . 序列号的初始值是随机的 (不可预测 ), 以使即便在源本身不加 密时 (有时包要通过翻译器 , 它会这样做 ), 对加密算法泛知的普通文本攻击也会更加困难 .时间标志(timestamp ) :32比特时间标志反映了 RTP数据包中第一个比特的抽样瞬间.抽样瞬间必须由随

5、时间单调和线形增长的时钟得到 , 以进行同步和抖动计算 . 时钟的分辨率 必须满足要求的同步准确度 , 足以进行包到达抖动测量 . 时钟频率与作为负载传输的数据格 式独立,在协议中或定义此格式的负载类型说明中静态定义,也可以在通过非 RTP方法定义的负载格式中动态说明若RTP包周期性生成,可以使用由抽样时钟确定的额定抽样瞬间,而不是读系统时钟 . 例如, 对于固定速率语音 , 时间标志钟可以每个抽样周期加 1. 若语音设备 从输入设备读取覆盖 160 个抽样周期的数据块 , 对于每个这样的数据块 ,时间标志增加 160, 无论此块被发送还是被静音压缩 . 时间标志的起始值是随机的 , 如同序列

6、号 . 多个连续的 RTP 包可能由同样的时间标志 , 若他们在逻辑上同时产生 . 如属于同一个图象帧 . 若数据没有 按照抽样的 顺序发送,连续的RTP包可以包含不单调的时间标志,如MPE咬织图象帧.同步源(SSRC :32比特SSRC域用以识别同步源.标识符被随机生成,以使在同一个 RTP 会话期中没有任何两个同步源有相同的SSRC识别符.尽管多个源选择同一个 SSRC识别符的概率很低,所有RTP实现工具都必须准备检测和解决冲突.若一个源改变本身的源传输地址,必须选择新的SSRC识别符,以避免被当作一个环路源.有贡献源(CSRC列表:0到15项,每项32比特CSRC列表识别在此包中负载的有

7、贡献 源.识别符的数目在 CC域中给定.若有贡献源多于15个,仅识别15个.CSRC识别符由混合器插入,用有贡献源的SSRC识别符.例如语音包,混合产生新包的所有源的SSRC标识符都被陈列, 以期在接收机处正确指示交谈者 .注意:前12个字节出现在每个 RTP包中,仅仅在被混合器插入时,才出现CSR(识别符列表RTP报文扩展头格式(见 RFC3550 Page18 :01230 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

8、-+-+-+-+-+-+-+-+-+ | defined by profile | length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |header extension | |若RTP头中的扩展比特位 X置1,则一个长度可变的头扩展部分被加到RTP固定头之后,.头扩展包含 16比特的长度域 ,指示扩展项中 32比特字的个数 ,不包括 4个字节扩展头 (因此 零是有效值 ).RTP 固定头之后只允许有一个头扩展 .为允许多个互操作实现独立生成不同的 头扩展 , 或某种特定实现有多种不同的头扩展 ,

9、 扩展项的前 16 比特用以识别标识符或参数 . 这16比特的格式由具体实现的上层协议定义基本的RTP说明并不定义任何头扩展本身。2. 网络抽象层单元 (NALU)NALU 头由一个字节组成 , 它的语法如下 :+|0|1|2|3|4|5|6|7|+-+-+-+-+-+-+-+-+|F|NRI| Type |+F: 1 个比特 . forbidden_zero_bit. 在 H.264 规范中规定了这一位必须为 0.NRI: 2 个比特 . nal_ref_idc. 取 00 11, 似乎指示这个 NALU 的重要性 , 如 00 的 NALU 解码器可以丢弃它而不影响图像的回放 . 不过一般

10、情况下不太关心这个属性 .Type: 5 个比特 .nal_unit_type. 这个 NALU 单元的类型 .Type Packet Type name0undefined1-23NAL uniSingle NAL unit packet per H.26424STAP-ASingle-time aggregation packet25STAP-BSingle-time aggregation packet26MTAP16Multi-time aggregation packet27MTAP24Multi-time aggregation packet28FU-AFragmentation

11、unit29FU-BFragmentation unit30-31 undefinedH264 over RTP 基本上分三种类型:(1) Si ngle NAL un it packet也就是实际的 NAL类型,可以理解为一个包就是一帧H264数据,这个在实际中是比较多的。(2)Aggregation packet 一包数据中含有多个 H264 帧。STAP-A 包内的帧含有相同的STAP-B 包内的帧含有相同的MTAP16包内的帧含有不同的MTAP24包内的帧含有不同的NALU-Time,没有 DONNALU-Time,有 DONNALU-Time, timestamp offset =

12、16封装在 Aggregation packet中的 NAL 单元大小为 65535 字节NALU-Time, timestamp offset = 24(3)Fragmentation unit 帧数据被分为多个RTP包,这也是很常见的,特别是对于关键帧。现存两个版本 FU-A, FU-B。实际应用就是要加上个H264 STREAM的头 h264_stream_head = 0x00,0x00,0x00,0x014字节,送去解码即可。3. 分包规则3.1单个 NAL单元包(1-23)对于 NALU 的长度小于 MTU 大小的包 , 一般采用单个 NAL 单元模式 . 一个原始的 H.264

13、NALU 单元常由 Start Code NALU Header NALU Payload三部分组成 , 其中Start Code 用于标示这是一个 NALU 单元的开始 , 必须是 00 00 00 01 或 00 00 01, NALU 头仅一个字节 , 其后都是 NALU 单元内容 .打包时去除 00 00 01 或 00 00 00 01 的开始码 , 把其他数据封包的 RTP 包即可 .一个封装单个NAL单元包到RTP的NAL单元流的RTP序号必须符合NAL单元的解码顺序。 单个NAL单元包的结构显示如图。(NAL单元的第一字节和 RTP荷载头第一个字节重合)01230 1 2 3

14、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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|F|NRI| type |+-+-+-+-+-+-+-+-+ |Bytes 2.n of a Single NAL unit|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|:.OPTIONAL RTP padding |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

15、+-+-+-+一个包就是一帧数据。 h264_stream_head + NAL_unit_type. 就可以直接送去解码了。3.2 组合包( 24-27 )3.2.1 单时间组合包( 24-25 )STAP应该用于当组合在一起的 NAL单元共享相同的 NALU时刻。STAP-A(24)荷载不包 括DON至少包含一个单时刻组合单元 STAP-B (25)荷载包含一个 16位的无符号解码顺 序号 (DON) ( 网络字节序 ) 紧跟至少一个单时刻组合单元 .DON域指定STAP-B传输顺序中第一个 NAL单元的DON值对每个后续出现在 STAP-B中 的NAL单元,它的 DON值等于(STAP-B中前一个 NAL的DON值+1)%65535, %是取模运算。单时刻组合单元有一个 16位无符号大小信息(网络字节序),它指示后续NAL单元的大 小(以字节为单位)(不包括这两个字节,但包括NAL单元类型字节),后面紧跟NAL单元本身, 包括它的NAL单元类型字节.单时刻聚合单元在 RTP荷载中是字节对齐的,但是可以不是32 位字边界对齐。STAP-A 个 RTP包包含一个 STAP-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号