跳到主要内容

RTP与RTCP

· 阅读需 5 分钟
阅读量: 101阅读人次: 102

RTP (Real-time Transport Protocol)常用于音频、视频等实时媒体流的传输。在 WebRTC 中就有着音视频数据传输的重要应用。

RTCP(Real-time Transport Control Protocol)是RTP的控制协议,用于监测RTP传输的质量和控制RTP流的发送速率。

RTP被划分在传输层,它建立在UDP上。同UDP协议一样,为了实现其实时传输功能,RTP也有固定的封装形式。RTP用来为端到端的实时传输提供时间信息和流同步,但并不保证服务质量。服务质量由RTCP来提供。

RTP 虽然和TCP、UDP 一同位于传输层,但是 RTP 是建立在 TCP、UDP之上的。所以通常默认 RTP 是使用 UDP 作为传输载体,但是在某些情况下(例如为了能够很好的通过防火墙),也可以使用 TCP 作为载体(RTP over TCP)。

RTP的封装

以下是RTP封装格式的表格介绍:

  • PT:Payload Type
|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Synchronization Source (SSRC) Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Contributing Source (CSRC) Identifier (0 - 15 items) |
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 扩展头部长度 (16位) | 扩展头部标识符 (16位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 扩展头部数据 |
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload |
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

RTCP的封装

RTP需要RTCP为其服务质量提供保证。RTCP的主要功能是:服务质量的监视与反馈、媒体间的同步,以及多播组中成员的标识。在RTP会话期 间,各参与者周期性地传送RTCP包。RTCP包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,因此,各参与者可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。RTP和RTCP配合使用,它们能以有效的反馈和最小的开销使传输效率最佳化,因而特别适合传送网上的实时数据。

RTCP也是用UDP来传送的,但RTCP封装的仅仅是一些控制信息,因而分组很短,所以可以将多个RTCP分组封装在一个UDP包中。RTCP有如下五种分组类型:

类型缩写表示用途
200SR(Sender Report)发送端报告
201RR(Receiver Report)接收端报告
202SDES(Source Description Items)源点描述
203BYE结束传输
204APP特定应用

定义

SSRC(Synchronization source)是RTP报文流的一个Source,由RTP头中定义的32-bit的SSRC identifier来标识,这样做是为了不依赖网络地址。同一个SSRC中发送的所有包都具有同一时序和序列号间隔,因此接收者可以通过SSRC将收到的数据包分组并排序。一个信号源(麦克风,摄像头,Mixer)的报文流会有由一个SSRC的发送器发送。一个SSRC可能会随着时间的变化,改变其数据格式,例如音频编码。SSRC的身份识别码都是随机生成的,但是必须保证整个RTP session中该身份识别码不会重复,这些工作是通过RTCP来完成的。如果一个与会者在一个RTP session中发送不同的媒体数据流,那么每个流的SSRC必须不同。