RTCP(实时传输控制协议)是RTP协议的控制协议,用于控制和补充RTP会话。它的主要作用是:
- 会话控制:RTCP协议传输会话名称、客户端tolist等会话层控制信息,用于建立和管理RTP会话。
- 质量反馈:接收端使用RTCP协议发送接收报告RR,向发送端反馈数据包丢失率、时延等质量信息,用于编码器控制和会话调整。
- 源描述:通过RTCP协议发送源描述SDES报告,描述RTP数据源的CNAME、名称、邮箱地址等信息。
- 时钟同步:接收端可以通过RTCP发送时钟同步报告,报告自己的时钟信息,与RTP时序信息同步。
- 负载类型识别:通过RTCP的不定期SDES报告可以分发动态载荷类型的识别信息。
RTCP工作原理:
- 建立连接:参与RTCP会话的设备需要先在网络层建立连接(通常使用与RTP相同的端口+1)。
- 转换控制信息:设备转换需要传输的控制信息为RTCP数据包,如RR、SDES、BYE等。
- 交换控制包:设备通过RTCP连接定期交换RTCP控制数据包,发送和接收控制信息。
- 解析控制信息:接收到RTCP数据包后,设备解析出控制信息,用于RTP会话的控制、同步等功能。
- 结束连接:RTCP会话结束时,设备停止发送RTCP报文,并主动结束RTCP连接。
相关报文:
- RR(Receiver Report):由接收端发送,包含丢包率、时延信息等质量反馈信息。
- SR(Sender Report):由发送端发送的发送者报告,包含发送统计信息如发送包数等。
- SDES(Source Description):包含CNAME、名称、邮箱地址等媒体源描述信息。
- BYE:用于结束RTP会话,通知其他参与方会话已终止。
代码示例:
python
# RTCP Receiver Report
rtcp_rr = b''.join([
b'\x81', # RTCP Packet Type, Receiver Report
b'\xca\xfe', # Length
b'\x0a\x1b', # Sender SSRC
b'\x0c\xcd', # Media Source SSRC
b'\x23\x21\x12' # Fraction Lost, Cumulative Lost, ...
])
# RTCP SDES
rtcp_sdes = b''.join([
b'\x82', # Type, SDES
b'\x43\x01', # Length
b'\x0a\x1b', # SSRC
b'\x01', # Type, CNAME
b'\x09', # Length
b'user1234' # CNAME
])
RTCP协议为RTP提供了重要的会话控制和质量反馈机制。它通过携带质量参数、时钟信息等,使其实现流媒体的动态调整与同步。RTCP也为点播等服务中的流媒体控制提供了必要的手段。RTCP与RTP协议一起,构成了一套完备的流媒体传输标准。