最近正在学习RTP协议,哪位朋友可以提供VC实现的RTP协议源代码?

解决方案 »

  1.   

    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分组首部结构:
     
        
     
    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是固定的。
      

  2.   

    会用baidu,Google的人很多问题都不用问
      

  3.   

    http://wenku.baidu.com/view/aaad3d136edb6f1aff001fa5.html