参考:
RTP包主要由两部分组成,head和payload,head最小12个字节,可扩展。
一种数据包,其组成部分有:一个固定 RTP 报头,一个可能为空的作用源(contributing sources)列表(见下文),以及负载数据。
通过 RTP 传输的包中的数据,例如,音频样本或压缩好的视频数据。
一种控制包,其组成有两部分:一个类似 RTP 包的固定报头, 一个结构化的部分(该部分具体元素依不同 RTCP 包的类型而定)。
RTP 包流的源,用 RTP 报头中 32 位数值的SSRC 标识符进行标识, 使其不依赖于网络地址。 一个同步源的所有包构成了相同计时和序列号空间的一部分, 这样接收方就可以把一个同步源的包放在一起, 来进行重放。举些同步源的例子,像来自同一信号源的包流的发送方,如麦克风、摄影机、RTP 混频器(见下文)就是同步源。一个同步源可能随着时间变化而改变其数据格式, 如音频编码。 SSRC 标识符是一个随机选取的值,它在特定的 RTP 会话中是全局唯一(globally unique)的(见章节8)。参与者并不需要在一个多媒体会议的所有 RTP 会话中,使用相同的 SSRC 标识符;SSRC 标识符的绑定通过RTCP(见章节 6.5.1)。如果参与者在一个 RTP 会话中生成了多个流,例如来自多个摄影机,则每个摄影机都必须标识成单独的同步源。
一种应用程序,它产生发送出的 RTP 包中内容,或者使用接收到的 RTP 包中内容。 在一个特定的 RTP 会话中, 一个终端系统可以扮演一个或多个同步源角色,但通常是一个。
若一个 RTP 包流的源,对由 RTP 混频器生成的组合流起了作用,则它就是一个作用源。
前 12 个字节出现在每个 RTP 包中,仅仅在被混合器插入时,才出现 CSRC 识别符列表。这
些域有以下意义:
版本(V):2 比特 此域定义了 RTP 的版本。此协议定义的版本是 2。(值 1 被 RTP 草案版本
使用,值 0 用在最初"vat"语音工具使用的协议中。)
填充(P):1 比特 若填料比特被设置,则此包包含一到多个附加在末端的填充比特,填充比
特不算作负载的一部分。 填充的最后一个字节指明可以忽略多少个填充比特。 填充可能用于某些
具有固定长度的加密算法,或者用于在底层数据单元中传输多个 RTP 包。
扩展(X):1 比特 若设置扩展比特,固定头(仅)后面跟随一个头扩展。
CSRC 计数(CC):4 比特 CSRC 计数包含了跟在固定头后面 CSRC 识别符的数目。
标志(M):1 比特 标志的解释由具体协议规定。它用来允许在比特流中标记重要的事件,如
帧边界。
负载类型(PT):7 比特 此域定义了负载的格式,由具体应用决定其解释。协议可以规定负载
类型码和负载格式之间一个默认的匹配。 其他的负载类型码可以通过非 RTP 方法动态定义。 RTP
发送端在任意给定时间发出一个单独的 RTP 负载类型;此域不用来复用不同的媒体流。
序列号(sequence number):16 比特 每发送一个 RTP 数据包,序列号加 1,接收端可
以据此检测丢包和重建包序列。 序列号的初始值是随机的(不可预测),以使即便在源本身不加密
时(有时包要通过翻译器,它会这样做),对加密算法泛知的普通文本攻击也会更加困难。
时间戳(timestamp) 32 比特时间戳反映了 RTP 数据包中第一个字节的采样时间。时
钟频率依赖于负载数据格式,并在描述文件(profile)中进行描述。也可以通过 RTP 方法对负
载格式动态描述。时间戳可用来实现不同媒体流的同步
SSRC:32 比特 用以识别同步源。标识符被随机生成,以使在同一个 RTP 会话期中没有
任何两个同步源有相同的 SSRC 识别符。尽管多个源选择同一个 SSRC 识别符的概率很低,所
有 RTP 实现工具都必须准备检测和解决冲突。若一个源改变本身的源传输地址,必须选择新的
SSRC 识别符,以避免被当作一个环路源。
下面是抓包示例
原文:http://feather.blog.51cto.com/4767437/1693056