RTP:A Transport Protocol for Real-Time Applications,实时传输协议。
术语:
RTP payload:RTP数据包的有效载荷。
RTP packet:RTP数据包,包括RTP数据包头部与payload。
Transport address:IP地址+端口号。
RTP session:区分RTP session的标志是是否有SSRC标识符的独立空间。
SSRC:RTP Stream的数据源。SSRC的标识符必须在RTP Session中唯一。
RTP header定义:
其中,前12个字节为fixed header。
version (V)
2 bits。RTP的版本号,当前版本为2.
padding (P)
1 bit。如果设置为1,payload后面可能会有1个或者多个padding字节,它们不是payload的一部分。方便一些针对固定长度算法的封装。
extension (X)
1 bit。如果设置为1,则在RTP固定报头后跟有一个扩展报头。
CSRC count (CC)
4 bits。记录了CSRC包含的字节数。
marker (M)
1 bit。不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。
payload type (PT)
有效载荷类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等,在流媒体中大部分是用来区分音频流和视频流的,音频流的PT值与视频的PT值是不同的,这样便于客户端进行解析。
sequence number
占16位,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1。这个字段当下层的承载协议用UDP的时候,网络状况不好的时候可以用来检查丢包。同时出现网络抖动的情况可以用来对数据进行重新排序。
timestamp
32 bits。用于记录RTP数据包第一个字节的采样时间。接收者使用时戳来计算延迟和延迟抖动,并进行同步控制。
在一次会话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值也要随时间而不断地增加(时间在流逝嘛)。时钟频率依赖于负载数据格式,并在描述文件(profile)中进行描述。同一个帧的不同分片的时间戳是相同的。这样就省去了起始标志和结束标志。一定要记住,不同帧的时间戳肯定是不一样的。
SSRC
同步信源(SSRC)标识符,占32位,用于标识同步信源。标识RTP会话中的参与者,同步源就是指RTP包流的来源。该标识符是随机选择的,RFC1889推荐了MD5随机算法。它是全局唯一的,不同的SSRC表示不同的共享源。参加同一视频会议的两个同步信源不能有相同的SSRC。
CSRC list
特约信源(CSRC)标识符,每个CSRC标识符占32位,可以有0~15个。每个CSRC标识了包含在该RTP报文有效载荷中的所有特约信源。
用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。一般用在混音或混屏上。例如,在1路音流中混了好几个人的声音,那么这每一个人的声音就是一个CSRC。
RTP扩展头
RTCP:RTP控制协议
有5种RTCP包类型: