RTCP
RTP控制协议采用与数据包相同的分发机制,将控制包周期性传输到所有会话参与者中,底层协议必须提供数据和控制包的多路发送,并提供数据分发质量反馈信息,这是RTP作为传输协议的部分功能,并且它涉及到了其它传输协议的流控制和拥塞控制,RTCP携带一个持久性传输层标识符,称为规范名或CNAME,由于一旦发现冲突或程序重启时,SSRC标识符会随之改变,所以接收方需要CNAME来跟踪每一个参与者。同时接收方还要求CNAME能够与一组相关RTP会话中来自于给定参与者的多重数据流相关联。
RTCP概况[ ]
- RTCP功能要求所有的参与者都要发送RTCP包,因此必须控制速率以便RTP按比例增加大量的参与者,通过每一个参与者发送各自的控制包给其它所有参与者,每一个参与者能够独立观察到参与者数量,该数量可用来计算控制包的发送速率。
- OPTIONAL功能用于传送最少会话控制信息,例如在用户界面显示参与者标识,这对于“松散受控”会话(在没有成员控制或阐述协商的情况下,参与者可以加入或退出该会话)是非常有用的。
- 上述功能适用于所有环境,尤其是IP组播环境,RTP应用程序设计者应该避免设计只能工作于单播模式并且不能增加到大量数量的机制,在某些情况下如单向链接中不可能有来自接收方的反馈,所以RTCP的传输就可能由发送方和接收方分别独立控制。
RTCP分组类型[ ]
- RTCP分为下面五种类型
类型 缩写表示 意义
200 SR 发送端报告
201 RR 接收端报告
202 SDES 远点
203 BYE 结束
204 APP 特定应用
结束分组BYE表示关闭一个数据流。
- 特定应用分组APP使应用程序能够定义新的分组类型,接收端报告分组RR用来使接收端周期性地向所有的点用多播方式进行报告,接收端每收到一个RTP流就产生一个接收端报告分组RR,该RTP流的分组丢失率(若分组丢失率太高,发送端就应该适当地降低发送分组的速率);在该RTP流中的最后一个RTP分组的序号;分组到达时间间隔的抖动等。
- 发送RR分组有两个目的,第一可以使所有的接收端和发送端了解当前网络的状态。第二可以使所有发送RTCP分组的站点自适应地调整自己发送RTCP分组的速率,使得起控制作用的RTCP分组不要过多地影响传送应用数据的RTP分组在网络中的传输,通常是使RTCP分组的通信量不超过网络中工大数据分组的数据量的5%,而接收端的通信量又应小于所有RTCP分组的通信量的75%。
- 发送端报告分组SR用来使发送端周期性地向所有接收端用多播方式进行报告,发送端每发送一个RTP流就要发送一个发送端报告分组SR,SR分组的内容有:该RTP流的SSRC,该RTP流中最新产生的RTP分组的时间戳和绝对时钟时间该RTP流包含的分组数;该RTP流包含的字节数。绝对时钟时间是必要的,因为RTP要求每一种媒体使用一个流。
RTCP的实现[ ]
Introduction[ ]
An RTCP implementation has three parts: the packet formats, the timing rules, and the participant database
Packet Formats:
Timing Rules:
所有的RTCP复合包被周期性送出,这个周期称为reporting interval,所有的RTCP活动都是以这个间隔发生的, 除了update of source description 和lip synchronization information,以及在这个interval内发生的reception quality statistics。基于收到的RTCP包建立的:
- 根据这个db可以填充Reception Report,并发送给对方
- 可以维护Participant Information
- 可以用于进行lip synchronization.
RTCP的传输[ ]
- 必须发送RTCP compound包,
- odd ports, 是RTP port + 1(最近不要求必须是奇数,也不要求必须大1了)
- 所有的参与者应当送出compound packets,也接收所有其他的participants发送的compound packets,
三.RTCP的包格式 SR,RR,SDES,BYE,APP
通用头(固定头):4 octets
v p ic pt length(be measured in units of 32-bits word)
2 1 5 8 16
1.RR(Receiver Report)
Reception quality reporting:所有发送RTP数据的Sender的信息,每个block包含一个SSRC的RTP接受质量报告
PT = 201
Format:
Reporter SSRC
{//一个Reporter Block
固定头
24 octets的内容
包括以下部分:
reportee SSRC:
cumulative number of packets lost :24bit的有符号数,从会话开始到现在期望收到-实际收到(可为负)
extended highest sequence number :per session
loss fraction :per interval, 取整 [丢包/期望收到数目 * 256](如果丢包为负值,则结果设为0)
interarrival jitter :
last sender report timestamp(LSR) :从reportee端最后收到的Sender Report中NTP timestamp的中32bits.(无则为0)
delay since last sender report(DLSR) :最后收到SR和发送RR之间的间隔,以1/65536为单位(否则为0)
}
Items中每个entry如下:
Type Length content
8 8
Type == 0 表示Lists结束
RFC中规定了一些Items如:CNAME, NAME, EMAIL, PHONE, LOC, TOOL, NOTE, and PRIV.
Packet Validation[ ]
- 所有的包必须是复合包
- 版本必须是2
- 复合包开始的RTCP Packet必须是SR和RR
- 如果需要Padding,则只有最后一个packet是padding的.
- 所有的RTCP packets的长度必须等于复合RTCP包的长度.
参与者数据库[ ]
参与者和会话的信息
- RTCP的全局配置信息
- The RTP bandwidth
- RTCP所占总带宽的比例(这意味必须知道RTP所占的总带宽):default 0.05
- 发送间隔:default 5s(最小)
- 发送部分所占的比例:default 0.025
- The average size of all RTCP packets sent and received by this participant.