RTP协议学习
RTP,Real-time Transport Protocol(实时传输协议),是针对Internet上多媒体数据流的一个传输协议, 由IETF作为RFC1889发布,现在最新的为RFC3550。
RTP被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。
RTP的典型应用建立在UDP上,但也可以在TCP等其他协议之上工作。
RTP本身只保证实时数据的传输,它没有提供任何的机制来确保实时的传输或其他的服务质量保证,而是由低层的服务来完成。
RTP不保证传输或防止乱序传输,它不假定下层网络是否可靠,是否按顺序传送数据包,依靠RTCP提供这些服务。
RTCP,Real-time Transport Control Protocol(实时传输控制协议),是RTP协议的姊妹协议。
RTCP负责管理传输质量,在当前应用进程之间交换控制信息,提供流量控制和拥塞控制服务。
在RTP会话期间,各参与者周期性地传送RTCP包,包中含有已发送的数据包的数量、丢失的数据包的数量等,服务器可以利用这些信息动态地改变传输速率等。
RTP和RTCP配合使用,能以有效的反馈和最小的开销使传输效率最佳化,故特别适合传送网上的实时数据。
RTP Header
简写 | 全称 | size in bits | 含义 |
---|---|---|---|
V | Version | 2 | 版本号,现在用的是2 |
P | Padding | 1 | 填充位,如果设置了该字段,RTP包末尾会包含一个或多个填充字节 填充字节并不是payload的一部分 填充字节的最后一个字节中指示了填充字节的字节数 一些加密算法可能可能用于字节对齐 |
X | Extension | 1 | 扩展位,如果X=1,则在RTP固定头部后面就跟有一个扩展头部 |
CC | CSRC count | 4 | CSRC计数器,指示CSRC 标识符的个数,不能超过15个 |
M | Marker | 1 | 标记位,由配置文档(Profile)来解释含义,不同的有效载荷有不同的含义 一般而言,对于视频,标记一帧的结束;对于音频,标记会话的开始。 |
PT | Payload type | 7 | 有效荷载类型,用于说明RTP报文中有效载荷的类型 一般用来区分音频流和视频流 |
SN | Sequence number | 16 | 序列号,用于标识发送者所发送的RTP报文的序列号 每发送一个报文,序列号增1,但序列号的初始值是随机生成的 接收端可以据此检测丢包和重建包序列 出现网络抖动的情况可以用来对数据进行重新排序 |
Timestamp | Timestamp | 32 | 时间戳,记录了该RTP包中payload的第一个字节的采样时刻 一般而言,必须使用90 kHz 时钟频率 一般用于同步、抖动计算 |
SSRC | Synchronization source identifier | 32 | 同步源标识符,用于标识同步源,同步源就是指RTP包流的来源 在同一个RTP会话中不能有两个相同的SSRC值。 SSRC标识符由随机算法生成 |
CSRC | Contributing Source identifiers | 32 x CC | 贡献源标识符列表 如果是点对点的流媒体传输,则忽略该字段 RTP中存在一种中间系统叫做混合器(Mixer) 它可以将几个数据流合并成一个数据流 这个字段就是合并之前的所有的原始数据的SSRC |