RTP/RTCP协议详解


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包类型:

SR:sender report,200。


RR:receiver report,201。


SDES:source description,202。


BYE:goodbye,203。


APP:application-defined,204。


你可能感兴趣的:(RTP/RTCP协议详解)