学习日记之二:RTCP的封装

博客参考了以下资料:

https://blog.csdn.net/bytxl/article/details/50400987

rfc3550-rtp文档

RTP:Audio And Video For The Internet.

 

RTCP功能

1、为应用程序提供会话质量或者广播性能质量的信息 

RTCP的主要功能是为应用程序提供会话质量或者广播性能质量的信息。每个RTCP信息包不封装声音数据或者电视数据,而是封装发送端(和 / 或者)接收端的统计报表。这些信息包括发送的信息包数目、丢失的信息包数目和信息包的抖动等情况,这些反馈信息反映了当前的网络状况,对发送端、接收端或者网络管理员都非常有用。RTCP规格没有指定应用程序应该使用这些反馈信息做什么,这完全取决于应用程序开发人员。例如,发送端可以根据反馈信息来调整传输速率,接收端可以根据反馈信息判断问题是本地的、区域性的还是全球性的,网络管理员也可以使用RTCP信息包中的信息来评估网络用于多目标广播的性能。

 

2、确定 RTP用户源 

RTCP为每个RTP用户提供了一个全局唯一的规范名称 (Canonical Name)标志符 CNAME,接收者使用它来追踪一个RTP进程的参加者。当发现冲突或程序重新启动时,RTP中的同步源标识符SSRC可能发生改变,接收者可利用CNAME来跟踪参加者。同时,接收者也需要利用CNAME在相关RTP连接中的几个数据流之间建立联系。当 RTP需要进行音视频同步的时候,接受者就需要使用 CNAME来使得同一发送者的音视频数据相关联,然后根据RTCP包中的计时信息(Network time protocol)来实现音频和视频的同步。

 

3、控制 RTCP传输间隔

由于每个对话成员定期发送RTCP信息包,随着参加者不断增加,RTCP信息包频繁发送将占用过多的网络资源,为了防止拥塞,必须限制RTCP信息包的流量,控制信息所占带宽一般不超过可用带宽的 5%因此就需要调整 RTCP包的发送速率。由于任意两个RTP终端之间都互发 RTCP包,因此终端的总数很容易估计出来,应用程序根据参加者总数就可以调整RTCP包的发送速率。

 

4、传输最小进程控制信息 

这项功能对于参加者可以任意进入和离开的松散会话进程十分有用,参加者可以自由进入或离开,没有成员控制或参数协调。

RTCP的封装:

         RTP规范中定义了五种类型的RTCP数据包:接收者报告(RR),发送者报告(SR),源描述(SDES),离开申明(BYE)和特殊应用包(APP)。 它们都遵循一个共同的结构,如下图5.1所示:

学习日记之二:RTCP的封装_第1张图片

版本号V当前版本的RTP的版本号始终为2

 

填充P填充位表示数据包已填充超出其自然大小。如果设置了该位,则在该数据包的末尾添加一个或多个填充八位字节,并且最后一个八位字节包含添加的填充八位字节数的计数。

 

项目数IC某些数据包类型包含项目列表,可能除了某些固定的类型特定信息之外。这些数据包类型使用项目计数字段来指示数据包中包含的项目数(该字段根据其用途在不同的数据包类型中具有不同的名称)。每个RTCP分组中可以包括多达31个项目,也受到网络的最大传输单元的限制。如果需要超过31个项目,则应用程序必须生成多个RTCP数据包。项目计数为零表示项目列表为空(这并不一定意味着数据包为空)。不需要项目计数的数据包类型可以将此字段用于其他目的。

 

包类型PT数据包类型标识数据包中携带的信息类型。 RTP规范中定义了五种标准数据包类型;将来可能会定义其他类型(例如,报告其他统计信息或传达其他特定于源的信息)。

 

长度:长度字段表示公共报头之后的分组内容的长度。它以32位字为单位进行测量,因为所有RTCP数据包的长度都是32位的倍数,因此计数八位字节只会出现不一致的可能性。零是有效长度,表示该数据包仅包含四个八位字节的标头(在这种情况下,IC标头字段也将为零)。

 

 

RTCP数据包永远不会单独传输; 相反,它们总是组合在一起进行传输,形成复合数据包。 每个复合数据包都封装在单个较低层数据包中 - 通常是UDP / IP数据包 - 用于传输。 如果要加密复合数2.据包,则RTCP数据包组的前缀为32位随机值。复合数据包结构如下图5.2所示:

学习日记之二:RTCP的封装_第2张图片

RTCP SR:发送者报告

除了来自接收器的接收质量报告之外,RTCP还传送最近发送数据的参与者发送的发送者报告(SR)包。 它们提供有关正在发送的媒体的信息,主要是为了使接收器可以同步多个媒体流(例如,对口音同步音频和视频)。

 

RTCP SR包格式

发送方报告数据包由数据包类型200标识, 有效载荷包含一个24字节的发送器信息块,后跟零个或多个接收器报告块,由RC字段表示,就像这是一个接收器报告包一样。 当发件人也是接收者时,存在接收者报告块。其格式如下图所示:

学习日记之二:RTCP的封装_第3张图片

版本(V):同RTP包头域。

填充(P):同RTP包头域。

接收报告计数器(RC):5比特,该SR包中的接收报告块的数目,可以为零。

包类型(PT):8比特,SR包是200。

长度域(Length):16比特,其中存放的是该SR包以32比特为单位的总长度减一。

同步源(SSRC):SR包发送者的同步源标识符。与对应RTP包中的SSRC一样。

NTP Timestamp(Network time protocol)SR包发送时的绝对时间值。NTP的作用是同步不同的RTP媒体流。

RTP Timestamp:与NTP时间戳对应,与RTP数据包中的RTP时间戳具有相同的单位和随机初始值。

Sender’s packet count:从开始发送包到产生这个SR包这段时间里,发送者发送的RTP数据包的总数.SSRC改变时,这个域清零。

Sender’s octet count:从开始发送包到产生这个SR包这段时间里,发送者发送的净荷数据的总字节数(不包括头部和填充)。发送者改变其SSRC时,这个域要清零。

同步源n的SSRC标识符:该报告块中包含的是从该源接收到的包的统计信息。

丢失率(Fraction Lost):表明从上一个SR或RR包发出以来从同步源n(SSRC_n)来的RTP数据包的丢失率。

累计的包丢失数目:从开始接收到SSRC_n的包到发送SR,从SSRC_n传过来的RTP数据包的丢失总数。

收到的扩展最大序列号:从SSRC_n收到的RTP数据包中最大的序列号,

接收抖动(Interarrivaljitter):RTP数据包接受时间的统计方差估计

上次SR时间戳(LastSR,LSR):取最近从SSRC_n收到的SR包中的NTP时间戳的中间32比特。如果目前还没收到SR包,则该域清零。

上次SR以来的延时(DelaysincelastSR,DLSR):上次从SSRC_n收到SR包到发送本报告的延时。

RTCP RR:接收者报告

RTCP的主要用途之一是接收质量报告,它通过RTCP接收器报告(RR)数据包完成,这些数据包由接收数据的所有参与者发送。

 

接收器报告分组由201的分组类型标识,接收方报告数据包包含正在发送报告的参与者(报告者SSRC)的SSRC(同步源),后跟零个或多个报告块,由RC字段表示。格式如下图所示:

学习日记之二:RTCP的封装_第4张图片

 

与SR相同只是和发送者相关的五个参数被省略了

RTCP SDES:源描述项

RTCP还可用于传送源描述(SDES)数据包,这些数据包提供参与者标识和补充详细信息,例如位置,电子邮件地址和电话号码。 SDES数据包中的信息通常由用户输入,并且通常显示在应用程序的图形用户界面中,尽管这取决于应用程序的性质(例如,提供从电话系统到RTP的网关的系统可能会使用 SDES包传送来电显示)。

RTCP SDES包格式
每个源描述包具有图5.7中所示的格式并使用RTCP包类型202.SDES包包括零个或多个SDES项列表,由SC头字段表示的确切数字,每个包含关于单个源的信息。

学习日记之二:RTCP的封装_第5张图片

源计数SC5位,此SDES数据包中包含的SSRC / CSRC块的数量。一个零值是有效的,但没用。

 

SDES项格式如下:

RTP规范中定义了几种类型的SDES项,其他类型可能由未来的配置文件定义。项目类型为零保留,表示项目列表的结尾。其他标准项类型包括CNAME,NAME,EMAIL,PHONE,LOC,TOOL,NOTE和PRIV。

 

CNAME标识符具有以下属性:如果发现SSRC冲突或程序重新启动,随机分配的SSRC标识符可能会更改,接收者可利用CNAME来跟踪参加者.

 

RTCP BYE:表明参与者将结束会话

RTCP通过RTCP BYE数据包提供松散的成员资格控制,这表明一些参与者已离开会话。当参与者离开会话时,或者由于冲突而更改其SSRC时,会生成BYE数据包。 BYE数据包可能在传输过程中丢失,某些应用程序不会生成它们;所以即使没有收到他们的BYE,接收者也必须准备好暂停一段时间未被听到的参与者。

 

BYE数据包的重要性在某种程度上取决于应用程序。它始终指示参与者正在离开RTP会话,但参与者之间可能还存在信令关系(例如,SIP,RTSP或H.323)。 RTCP BYE数据包不会终止参与者之间的任何其他关系。

 

BYE数据包由数据包类型203标识,其格式如下图5.10所示。公共RTCP报头中的RC字段指示分组中SSRC标识符的数量。值为零有效但无用。在接收到BYE数据包时,实现应假定列出的源已离开会话并忽略来自该源的任何其他RTP和RTCP数据包。在收到BYE后的一段时间内保持离开参与者的状态非常重要,以允许延迟数据包。

学习日记之二:RTCP的封装_第6张图片

 

RTCP APP:应用描述功能

最后一类RTCP数据包(APP)允许应用程序定义的扩展。 它有数据包类型204,格式如下图5.11所示。 应用程序定义的数据包名称是一个四字符前缀,用于唯一标识此扩展名,每个字符都从ASCII字符集中选择,大写和小写字符被视为不同。 建议选择数据包名称以匹配它所代表的应用程序,并选择由应用程序协调的子类型值。 数据包的其余部分是特定于应用程序的。

学习日记之二:RTCP的封装_第7张图片

 

你可能感兴趣的:(学习日记之二:RTCP的封装)