美文网首页Network
2018-03-27 RTSP详解

2018-03-27 RTSP详解

作者: HaloMartin | 来源:发表于2018-03-27 19:46 被阅读0次

    在开发者交流或者面试中,经常会涉及到RTSP、RTP、RTCP、TCP、UDP等一些概念,这些虽然属于计算机网络中的基本概念,但是更多的人知道的其实就是TCP和UDP,对RTP、RTCP和RTSP,反而会陌生。

    在OSI(开放系统互连)七层模型中,RTP/RTCP,TCP,UDP同属传输层,而RTSP则应属于应用层,这样就可以想到,RTSP是使用传输层协议实现的,而RTP较为特殊,可以看作传输层的字层,可以基于TCP也可以基于UDP实现,所以有时候也会被理解为应用层的协议,为区别于RTSP协议,我比较认同把它定义为传输层协议。


    Figure-1 RTSP和RTP/RTCP应用图解
    Figure-2 RTP/RTCP与其他协议关系

    RTP

    Figure-3 RTP数据报格式

    以下数据报字段说明:

    • 版本号(V): 2比特,用来标志使用的RTP版本。
    • 填充位(P): 1比特,如果该位置位,则该RTP包的尾部就包含附加的填充字节。
    • 扩展位(X): 1比特,如果该位置位的话,RTP固定头部后面就跟有一个扩展头部。
    • CSRC计数器(CC): 4比特,含有固定头部后面跟着的CSRC的数目。
    • 标记位(M): 1比特,该位的解释由配置文档(Profile)来承担.
    • 载荷类型(PT): 7比特,标识了RTP载荷的类型,包括所采用的编码算法、采样频率、承载通道等。例如,类型2表明该RTP数据包中承载的是用ITU G.721算法编码的语音数据,采样频率为8000Hz,并且采用单声道。
    • 序列号(SN): 16比特,发送方在每发送完一个RTP包后就将该域的值增加1,接收方可以由该域检测包的丢失及恢复包序列。序列号的初始值是随机的。
    • 时间戳:32比特,记录了该包中数据的第一个字节的采样时刻。时间戳是去除抖动和实现同步不可缺少的。接收方根据时间戳能够确定数据的到达是否受到了延迟抖动的影响,但具体如何来补偿延迟抖动则是应用程序实现。
    • 同步源标识符(SSRC):32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的 RFC1889推荐了MD5随机算法。
    • 贡献源列表(CSRC List): 0~15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。

    以下图片中为RTP基于TCP的传输实例


    Figure-4 RTP基于TCP的实例(1)
    Figure-4 RTP基于TCP的实例(2)

    RTCP

    RTCP协议的功能是通过不同的RTCP数据报来实现的,如图5:


    Figure-5 RTCP协议数据类型

    主要有如下几种类型:

    • SR:发送端报告,所谓发送端是指发出RTP数据报的应用程序或者终端,发送端同时也可以是接收端。
    • RR:接收端报告,所谓接收端是指仅接收但不发送RTP数据报的应用程序或者终端。
    • SDES:源描述,主要功能是作为会话成员有关标识信息的载体,如用户名、邮件地址、电话号码等,此外还具有向会话成员传达会话控制信息的功能。
    • BYE:通知离开,主要功能是指示某一个或者几个源不再有效,即通知会话中的其他成员自己将退出会话。
    • APP:由应用程序自己定义,解决了RTCP的扩展性问题,并且为协议的实现者提供了很大的灵活性。

    不同类型对应不同的数据报格式,因为不是很了解,所以不展开,感兴趣的话可以参考文末链接

    RTSP

    RTSP,是为有效地在IP网络上传输流媒体数据而提出的应用层协议。RTSP提供一种可扩展的框架,能够提供可控制的,按需传输的实时数据,比如音频和视频文件。源数据可以包括现场数据的反馈和存储的文件。RTSP对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数 据,RTSP的作用相当于流媒体服务器的远程控制。传输数据可以通过传输层的TCP/UDP协议,RTSP也提供了基于RTP传输机制的一些有效的方法。
    RTSP通常工作于可靠的传输协议TCP上,用于发起/结束流媒体传输,而RTP一般工作于UDP上,利用的是UDP低延时的特点,UDP不是可靠传输,可以使用RTCP来实时监控数据传输和服务质量。

    RTSP消息格式:

    RTSP的消息有两大类,一是请求消息(request),一是回应消息(response),两种消息的格式不同。

    • 请求消息
      [方法][URI][RTSP版本][CR][LF]
      [消息头][CR][LF]
      [消息体][CR][LF]
      • 方法: 包括OPTIONS回应中所有的命令;
      • URI是接收方(服务端)的地址;
      • RTSP版本: 一般都是RTSP/1.0。
        每行后面的CR LF表示回车换行,需要接收端有相应的解析,最后一个消息头需要有两个CR LF
        以下是抓包实例,消息方法为DESCRIBE:


        Figure-6 消息方法DESCRIBE的实例
    • 回应消息
      [RTSP版本][状态码][解释][CR][LF]
      [消息头][CR][LF]
      [消息体][CR][LF]
      • RTSP版本一般都是RTSP/1.0;
      • 状态码是一个数值,200表示成功;
      • 解释是与状态码对应的文本解释。

    以下是抓包实例,返回一个错误码401,Unauthorized(未授权),因为在发送DESCRIBE消息时,没有携带用户名密码


    Figure-7 消息方法DESCRIBE消息回应实例

    RTSP客户端与服务端交互过程可以参考雷大神的博文,RTSP协议学习笔记

    RTSP(Real Time Streaming Protocol,即实时码流协议)
    RTP(Real-time Transport Protocol,即实时传输协议)
    RTCP(Real-time Transport Control Protocol,即实时传输控制协议),RTP的配套协议,服务于RTP

    1.RTCP数据报
    2.Wireshark 抓包分析 RTSP/RTP/RTCP 基本工作过程
    3.RTP基于UDP和TCP分别实现的解析
    4.流媒体协议RTSP、HTTP、HTTPS、SDP四种区别解析
    5.RTSP协议学习笔记

    相关文章

      网友评论

        本文标题:2018-03-27 RTSP详解

        本文链接:https://www.haomeiwen.com/subject/svjscftx.html