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
作者:luyumiao1990
网站: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