RTCP

由于我对全部协议内容没有过多涉及,这里只记录跟时间戳同步相关的,后续有时间精力再补充

首先还是从TCP方式接收的RTSP包分析:

由图可以分析出,当channel identifier0x01时,说明是RTCP数据包。

RTCP 数据包格式

该规范定义了几种 RTCP 数据包类型来承载多种控制信息:

SR:发送者报告,用于发送和接收的统计信息

     作为活跃发送者的参与者

RR: 接收者报告,用于接收参与者的统计信息

SDES: 源描述项,包括CNAME

BYE: 表示参与结束

APP: 特定于应用程序的功能

这个是通用的RTCP包格式,了解即可

img

版本号(V):对于当前版本的RTP协议,版本号为2(截止到本书编纂为止),目前还 没有推出新版本的计划,并且之前的版本并没有广泛的被使用.

填充(P):填充位表示,所要填充的数据已经超出了目前所能容纳的位数。如果此位 被设置为1,那么意味着包尾已经被一个或多个八位字节填充,最后一位八位所填充的 内容表示此包的总数大小。

条目计数(IC):某些包类型中包含了一个list的条目,可能作为固定的、用于特定类 型的信息的补充。这些条目字段需要标示出包中包含的条目的总数(这个字段在不同的 包中有不同的命名方法,这取决于具体如何使用此字段)。每个RTCP包最多包含31个 条目,同时也受到MTU(maximum transmission unit)的限制。如果需要传输超过31 个条目的场景,那么应用程序必须生成多个RTCP包。Item Count字段为0的时候表示此包中的条目为空(但是并不意味着包中内容为空)。如果不需要Item count字段那么此字段可以用于其他的目的。

包类型(PT):此字段标识了传输的包中所携带的信息的类型。在RTP的规范中定义了 五种标准数据包类型,将来可能还会定义其他的类型(例如,报告额外统计信息或者传 递其他特定源的信息)。

长度:此字段标识包头之后的内容总长度。因为所有的RTCP的数据包的长度必须为32 位的整数倍,所以这个字段放的是32位字的个数,因为如果按照八位字节计算会出现 此字段和总长度不一致的情况。0是一个有效长度,表示这个包只包含4个8位字节的包 头(包头字段IC在这种情况下也是0)。

发送端(流媒体服务器)以一定的频率发送RTCP SR(Sender Report)这个包给接收端(例如浏览器),所以我主要介绍这个类型的RTCP包。

img

SR包内包含一个RTP时间戳和对应的NTP时间戳,可以用<ntp,rtp>对做音视频同步。

音视频同步(TODO)

参考文章


看见了
876 声望16 粉丝

前端开发,略懂后台;