• RTP/RTCP/RTSP协议分析(1)


    RTP:realtime transport protocol          实时传输协议      -   负责传输视频流数据;  

    RTCP:realtime transport control protocol        实时传输控制协议  -  rtp的控制部分,用来保证服务质量;

    RTSP:realtime transport streaming protocol           实时流传输协议   -  提供对流的远程控制,比如暂停,重新定位等; 

    RTP 由 IETF(http://www.ietf.org/)定义在 RFC 3550和3551中,RTSP定义在RFC2326中。

    RTP被定义为传输音频、视频、模拟数据等实时数据的传输协议,与传统的注重的高可靠的数据传输的运输层协议相比,它更加侧重的数据传输的实时性,此协议提供的服务包括数据顺序号、时间标记、传输控制等。RTP通常与辅助控制协议RTCP一起工作,RTP只负责实时数据的传输,RTCP负责对RTP的通信和会话进行带外管理(如流量控制、拥塞控制、会话源管理等)。  

    RTP位于传输层(通常是UDP)之上,应用程序之下,实时语音、视频数据经过模数转换和压缩编码处理后,先送给RTP封装成为RTP数据单元,RTP数据单元被封装为UDP数据报,然后再向下递交给IP封装为IP数据包。RTP分组只包含RTP数据,而控制是由另一个配套协议RTCP提供。RTP在端口号1025到65535之间选择一个未使用的偶数UDP端口号,而在同一次会话中的RTCP则使用下一个奇数UDP端口号。RTP通常和RTCP一起工作,在RTP会话期间,各参与者周期的发送RTCP消息。RTCP消息含有已发送数据的丢包统计和网络拥塞等信息,服务器可以利用这些信息动态的改变传输速率,甚至改变净荷的类型。RTCP消息也被封装为UDP数据报进行传输。

    RTP数据协议负责对流媒体数据进行封包并实现媒体流的实时传输,每一个RTP数据报都由头部(Header)和负载(Payload)两个部分组成,其中头部前12个字节的含义是固定的,而负载则可以是音频或者视频数据。   

    V:2bits - 版本号,固定值为2;

    P:1bit   - 填充位,在包尾是否包含一个8bits的填充字;

    X:1bit   - 固定头部后面有一个扩展头部;扩展头部是在固定头部之后的4个字节,如下图所示,length用于指示后面还有多少个4字节的扩展数据,可以位0;profile是用户自定义标识。

       0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |      defined by profile       |           length              |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                        header extension                       |
       |                             ....                              |

    CC:4bits - CSRC的个数

    M: 1bit  - 标识

    PT: 7bits - 编码类型。G711,H264等等。

    sequence number:16bits - 每个RTP包都增加1,初始值随机。

    timestamp:32bits  -    随机产生一个初始值,在初始值的基础上,每次递增固定的值(每秒25帧,那么每次递增的值应该是90000/25);

       NOTE:如果一个数据包需要分片传输时,可以通过设置相同的timestamp和每次递增的sequence number来区分,客户端可以重组相应的数据包;

    SSRC: - 源  一个随机值,但相同源这个值不变;

     

         

     参考资料:

    1、http://www.cppblog.com/czanyou/archive/2009/12/25/67940.html

    2、http://www.chinavideo.org/forum.php?mod=viewthread&tid=7575&extra=&page=1

  • 相关阅读:
    UE4免费了
    c# 下 根据Datatable的结构动态创建表
    SharePoint 调用 WebService操作List小记
    同步SharePoint List数据到关系数据库
    如何提升SharePoint 2010的性能
    DataX的使用
    C#调用RabbitMQ实现消息队列
    在SharePoint2010上使用QuickFlow和QuickFlowDesigner
    QUICKFLOW安装
    如何设置IIS程序池的回收时间,才能最大程度的减少对用户的影响?
  • 原文地址:https://www.cnblogs.com/frkang/p/3346760.html
Copyright © 2020-2023  润新知