zoukankan      html  css  js  c++  java
  • RTP协议

    RTP为实时应用提供端到端的运输,但不提供任何服务质量的保证。多媒体数据块经过压缩编码处理后,先送给RTP封装成为RTP分组,RTP分组再装入UDP用户数据报,然后再向下地交给IP层。RTP是一个协议框架,因为它只包含了实时应用的一些共同的功能。

    RTP分组只包含RTP数据,而控制是由另一个配套协议RTCP提供。
    RTP在端口号1025到65535之间选择一个未使用的偶数UDP端口号,而在同一次会话中的RTCP则使用下一个奇数UDP端口号。但端口号5004和5005则分别用作RTP和RTCP的默认端口号。
    RTP位于传输层(通常是UDP)之上,应用程序之下。它提供同步播放媒体数据所需要的时间戳和序列号,并不具有差错和流量控制机制,这些需要应用程序实现。
    RTCP通常和RTCP一起提供流量控制和拥塞控制服务。在RTP会话期间,各参与者周期的发送RTCP数据报。RTCP数据报含有已发送数据的数量丢失的数据报的数量等统计资料,因此,服务器可以利用这些信息动态的改变传输速率,甚至改变净荷的类型。
    (照我目前的理解是:RTP和RTCP提供了这些信息给应用程序,但是RTP和RTCP并不定义根据这些信息的动作,
    就像TCP的重发和滑动窗口等都是协议自己完成的。但是RTP并不自己做这些事情。)
    RTP分组首部结构:
     

        

    RTP报文由两部分组成:报头和有效载荷。RTP报头格式如图6.7所示,其中:

    l      VRTP协议的版本号,占2位,当前协议版本号为2

    l  P:填充标志,占1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。

    l  X:扩展标志,占1位,如果X=1,则在RTP报头后跟有一个扩展报头。

    l  CCCSRC计数器,占4位,指示CSRC标识符的个数。

    l  M: 标记,占1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。

    l  同步信源(SSRC)标识符:占32位,用于标识同步信源。该标识符是随机选择的,参加同一视频会议的两个同步信源不能有相同的SSRC

    l  特约信源(CSRC)标识符:每个CSRC标识符占32位,可以有015个。每个CSRC标识了包含在该RTP报文有效载荷中的所有特约信源。

    l  PT: 有效载荷类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等。

    l  序列号:占16位,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1。接收者通过序列号来检测报文丢失情况,重新排序报文,恢复数据。

    l  时戳(Timestamp):占32位,时戳反映了该RTP报文的第一个八位组的采样时刻。接收者使用时戳来计算延迟和延迟抖动,并进行同步控制。

    这里的同步信源是指产生媒体流的信源,它通过RTP报头中的一个32位数字SSRC标识符来标识,而不依赖于网络地址,接收者将根据SSRC标识符来区分不同的信源,进行RTP报文的分组。特约信源是指当混合器接收到一个或多个同步信源的RTP报文后,经过混合处理产生一个新的组合RTP报文,并把混合器作为组合RTP报文的SSRC,而将原来所有的SSRC都作为CSRC传送给接收者,使接收者知道组成组合报文的各个SSRC

    V:版本号;

    P:填充字段标识;

    X:扩展头标识;

    CSRC count(CC):贡献源数目,和后面的CSRC有关。CSRC,贡献源,指的是不同步的源。在网络中,可能会有混合器将来自不同地点的RTP流混合成一个RTP流以节省带宽, CSRC用来区分不同的源;

    M:标记一些重要的事件(由应用程序定义);

    PT:净荷数据类型;

    SN:序列号,每个分组的序列号(初始值随机),用来检测分组的丢失并恢复分组的序列;

    TS:时间戳,反映RTP净荷中的第一个采样数据的采样时间。时间的粒度是净荷类型相关的。

    例如,如果采样间隔是125微妙,在分组n+1中的第一个样本和在分组n中的第一个样本之间相差10毫秒,那么在这两个样本之间的采用数目将等于:

    两个分组之间的时间/每个样本的时间=80

    假定时钟颗粒度与采用间隔相同,那么分组n+1中的时标将比在分组n中的时标大80。

    注意:时标和序列号的区别。由于像MPEG的交错帧的时标不是顺序发送的;但是顺序号必须是单调的。

    SSRC:同步源标识符,用于标识同步源。同步源指的是,例如,一段影片的音频和视频通过不同的RTP流传输,它们是同步的。每个同步源是负责发送RTP分组并在RTP中设置序列号和时间戳的实体。

    RTCP的主要功能是:服务质量的监视与反馈,媒体间的同步,以及多播组中成员的标识。由于RTCP分组很短,因此把多个RTCP分组封装在一个UDP用户数据报中。RTCP分组周期性的在网上传送,它带有发送端和接收端对服务质量的统计信息报告(如已发送的分组数和字节数,分组丢失率,分组到达时间间隔的抖动等)。

    RTCP可以说是控制交通的协议,它提供了:

    1)SR发送者报告分组:用来使发送端周期的向所有接收端用多播方式进行报告。内容包括:

    该RTP流的SSRC;该RTP流中最新产生的RTP分组的时间戳和绝对时钟时间(或称墙上时间:wall clock time);该RTP流包含的分组数;该RTP流包含的字节数。

    绝对时钟时间是必要的。因为RTP要求每一种媒体使用一个流。有了绝对时钟时间就可以进行图形和声音的同步。

    2)RR接收者报告分组:用来使接收端周期性的向所有的点用多播方式进行报告。内容包括:

    所接收到的RTP流的SSRC;该RTP流的分组丢失率;在该RTP流中的最后一个RTP分组的序号;分组到达时间间隔的抖动等。

    发送RR分组有两个目的。第一,可以使所有的接收端和发送端了解当前网络的状态。

    第二,可以使所有发送RTCP分组的站点自适应的调整自己发送RTCP分组的速率,RTCP分组的通信量不超过网络中的数据分组的通信量的5%,而接收端分组报告分组的通信量又应小于所有RTCP分组的通信量的75%。

    3)SDES源描述分组:给出会话中参加者的描述,包括参加者的规范名(CNAME)

    4)BYE分组:关闭一个数据流。

    5)APP分组:应用程序能够定义新的分组类型。

    一个概念:规范名字CNAME,用于标识某个实体,通常使用用户名@域名,一个实体可以产生不同的RTP流,各自有不用的SSRC,但是CNAME是固定的。

    转:http://blog.csdn.net/legendsea/article/details/4405511

  • 相关阅读:
    杂文: 日剧《轮到你了》第7集中的组合数学问题
    CF 板刷总结
    【题解】P2324 [SCOI2005]骑士精神
    【模板】 $ ext{K}$ 短路
    P4554 小明的游戏
    [题解]P1856 [USACO5.5]矩形周长Picture
    洛谷P2243 电路维修
    【题解】洛谷P3660 [USACO17FEB]Why Did the Cow Cross the Road III
    【题解】P1119 灾后重建
    集福卡活动
  • 原文地址:https://www.cnblogs.com/zhiweiyouzhishenghuo/p/5005505.html
Copyright © 2011-2022 走看看