本文详细介绍通过RTSP取流的过程,分析RTSP over UDP与RTSP over TCP在RTSP消息、媒体数据封装上的区别,并总结RTSP over UDP与RTSP over TCP的优缺点。

        RTSP: Real Time Streaming Protocol,实时流协议,用于多媒体数据流的控制,如播放,暂停等。

        RTP: Real-time Transport Protocol,实时传输协议,一般用于多媒体数据的传输。 

        RTCP: RTP Control Protocol,实时传输控制协议,同RTP一起用于数据传输的监视,控制功能。 

        RTP/RTCP相对于底层传输层,和RTSP、SIP等上层协议一起可以实现视频会议,视频直播等应用。RTP位于传输层(通常是UDP)之上,应用程序之下,实时语音、视频数据经过模数转换和压缩编码处理后,先送给RTP封装成为RTP数据单元,RTP数据单元被封装为UDP数据报,然后再向下递交给IP封装为IP数据包。这么说RTP是没有保证传输成功的。那怎么保证呢?就要用到RTCP。 RTCP消息含有已发送数据的丢包统计和网络拥塞等信息,服务器可以利用这些信息动态的改变传输速率。

       RTSP协议是一个流媒体协议,可以实现直播和点播形式的音频与视频流的播放。RTSP协议定义了多种服务器-客户端之间交互的接口,主要有OPTIONS,DESCRIBE,SETUP,PLAY,TEARDOWN,RECORD,ANNOUNCE。RTSP并不包括具体媒体数据的传输,媒体数据一般由RTP与RTCP协议来实现,并可以通过TCP或UDP两种底层传输方式进行。

       播放RTSP流时,可通过客户端来指定拉流方式为UDP还是TCP。两者分别建立了几条socket连接呢?如下图1和图2所示

https://upload-images.jianshu.io/upload_images/1720840-165bfd3997dd32ba.png

图1 RTSP over UDP

https://upload-images.jianshu.io/upload_images/1720840-4add93d66caf300e.png

图2 RTSP over TCP

从图2可以看出RTSP over TCP 方式时,RTSP、RTP(Video)、RTCP(Video)、RTP(Audio)、RTCP(Audio)都通过同一个TCP 连接来传输。那么如何区分RTSP、RTP(Video)、RTCP(Video)、RTP(Audio)、RTCP(Audio) ?做法是对于RTP和RTCP包,在TCP和RTP(RTCP)数据之间增加一层RTSP Interleaved Frame,如图3所示。

https://upload-images.jianshu.io/upload_images/1720840-2c933e726cb785c7.png

图3 RTSP Interleaved Frame

       下面以实例说明RTSP over UDP与RTSP over TCP的区别。采用vlc.exe作为RTSP 客户端,海康视频设备作为RTSP服务端。vlc.exe中可以设置流传输方式是RTSP over UDP 还是RTSP over TCP,设置路径为【工具】-【首选项】-【输入/编解码器】,如图4所示。

图4 vlc设置流传输方式

1、RTSP over UDP

接下来对每一条消息详细分析。

  1. OPTION消息,是得到服务器提供的可用方法。

客户端发送的OPTION消息:

服务端对OPTION消息的回复:

  1. DESCRIBE消息,目的是为了得到会话描述信息(SDP)。

客户端发送DESCRIBE消息:

服务端回复DESCRIBE消息:

客户端发送带鉴权的DESCRIBE消息:

服务端回复200OK并携带SDP信息:

  1. SETUP消息,建立会话,并确定传输模式。

客户端发送SETUP消息:

服务端对SETUP回复200OK消息:

  1. PLAY消息,开始播放。

客户端发送PLAY消息:

服务端对SETUP回复200OK消息:

  1. 媒体数据传输

 

  1. TEARDOWN消息,停止播放。

客户端发送TEARDOWN消息:

         服务端对TEARDOWN回复200OK消息:

 

2、RTSP over TCP

上面已经详细描述了RTSP over UDP的各个消息,现针对RTSP over TCP,只介绍与RTSP over UDP不同的地方。

不同点1:SETUP消息

不同点2:媒体数据传输

       上文详细描述了RTSP over UDP与RTSP over TCP实现上的区别,至于项目中选择RTSP over UDP还是RTSP over TCP,一般由项目中的对接协议规定,当然也存在我们自行选择RTSP over UDP或者RTSP over TCP的情况,此时我们需要知道这两者的优缺点,根据实际情况选择。

        RTSP over UDP优点:码流通过UDP发送,一个UDP包里有且仅有一个RTP包,不需要Interleaved Frame,封包和解包相对简单些;数据流收发快速,无阻塞。

        RTSP over UDP缺点:需要额外建立socket,用于RTP和RTCP传输;不可靠传输,可能丢包。

        RTSP over TCP优点:不需要另外建立音视频传输的socket,直接使用RTSP的socket,节省资源开支;提供可靠的流传输。

        RTSP over TCP缺点:由于RTSP、RTP、RTCP交织,封包和解包的过程相对复杂些;TCP是可靠的传输协议,但正是因为如此,会导致在实时流媒体中的延时。

 

 

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐