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配合使用,能以有效的反馈和最小的开销使传输效率最佳化,故特别适合传送网上的实时数据。

RFC-3550

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