RTSP over UDP与RTSP over TCP取流对比(转)

add by zhj : 我用FFmpeg从RTSP拉摄像头的流,日志级别设置-v trace,可以看到这些消息。默认的,FFmpeg使用UDP传输媒体数据,如果想用TCP传输媒体数据,需要指定参数-rtsp_transport tcp,亲测。下面是FFmpeg发送的SETUP消息,以及服务端摄像头的响应,参照下文所说,这里的Transport: RTP/AVP/UDP就是指媒体数据使用UDP传输。

 

 

原文:https://blog.csdn.net/luyumiao1990/article/details/106093001

作者:

网站:CSDN

 

本文详细介绍通过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所示

图1 RTSP over UDP

 

图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所示。

图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

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

OPTION消息,是得到服务器提供的可用方法。
客户端发送的OPTION消息:

 

服务端对OPTION消息的回复:

 

DESCRIBE消息,目的是为了得到会话描述信息(SDP)。
客户端发送DESCRIBE消息:

 

服务端回复DESCRIBE消息:

 

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

 

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

 

SETUP消息,建立会话,并确定传输模式。
客户端发送SETUP消息:

 

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

 

PLAY消息,开始播放。
客户端发送PLAY消息:

 

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

 

媒体数据传输

 

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是可靠的传输协议,但正是因为如此,会导致在实时流媒体中的延时。
————————————————
版权声明:本文为CSDN博主「luyumiao1990」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/luyumiao1990/article/details/106093001

posted @ 2023-05-18 18:04  奋斗终生  Views(750)  Comments(0Edit  收藏  举报