1、 流媒体协议之RTSP详解
1.1 RTSP概述
RTSP(Real Time Streaming Protocol):实时流媒体协议,是由Real network 和 Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议,RTSP提供一种可扩展的框架,使能够提供能控制的,按需传输实时数据,如音频流、视频流、metadata; 遵循规范IETF RFC 2326,4567,6064,其语法和操作参考了HTTP/1.1,基于文本的协议,采用ISO10646字符集,使用UTF-8编码;承载RTSP的传输层协议为TCP,默认端口554;如果是RTSP-over-HTTP tunneling,则默认TCP端口为8080;实时流数据由不同的协议传输,比如RTP/RTCP完成数据流和控制命令的传输。
RTSP支持的方法如下:
RTSP流媒体协议交互及码流传输过程中所用的协议如下:
后续会对相关协议进行详细介绍,这些协议相互配合,功能完成了流媒体协议会话及码流传输的过程。
可通过请关注公众号壹零仓,发送消息获取,发送rtsp,获取rtsp相关文章,发送rtp,获取rtp/rtcp相关文章
1.2 RTSP协议交互过程
RTSP协议通常是基于TCP的方式进行协议交互,另外也可基于HTTP,其交互过程有所不通,协议交互主要实现流媒体信息描述/码流通道建立/流媒体控制等功能,这里要区分RTSP协议交互与流媒体码流传输,RTSP协议交互,只做流媒体会话交互功能,通过describe来同步流媒体编码、封装、连接等信息,通过setup来建立流媒体传输通道,通过play来开启流媒体播放,通过teardown来结束播放;流媒体码流的传输是通过RTSP交互建立的流媒体传输通道来传输码流,其传输协议一般为RTP/RTCP,其传输层可以为UDP或者TCP。
1.2.1 RTSP基于TCP交互过程
承载RTSP的协议为TCP,其主要交互过程如下图所示:
RTSP返回的状态码与HTTP类似,各个方法的说明也很简单也不做过多的说明,再开发中,RTSP客户端可以直接发送describe,而无强制要求必须要发送option,describe之后,根据其携带的SDP信息,判断流媒体的编码格式/封装格式/payloadtype/timescale,track标识等信息,客户端保存此信息用于后续码流的解复用和解码,根据track标识去申请想要的类型的码流,客户端通过setup来建立码流通道,如果有多路,需要根据不通的track 调用setup方法多次,一般setup建立通道可以是rtp/avp或者rtp/avp/tcp类型,这里标识以rtp传输音视频,前者基于UDP传输,后者基于TCP传输,这里要注意基于UDP传输码流时,需要根据setup交互的信息,单独建立RTP/RTCP两路UDP通道,如果是TCP则与RTSP公用一个TCP通道,通过在RTP/RTCP头加上$开头的四个字节的tcpheader来区分是哪一路的RTP/RTCP,还是RTSP。
1.2.2 RTSP基于HTTP的交互过程
RTSP-over-HTTP tunneling,通过HTTP隧道来传输RTSP协议和媒体流,需要RTSP服务器支持此种方式,开启HTTP隧道监听端口;客户端首先会建立一个链接通过HTTP-GET方法来获取协议响应消息和媒体流,然后再建立一个链路,通过HTTP-POST方法来发送请求消息,两个tcp链接都是长连接,POST 连接中发送RTSP请求消息,一般要进行BASE64编码,来隐藏RTSP信息。数据流的发送封装方式与RTP/TCP一样,通过GET链路发送给客户端,响应消息也是通过GET链路发送给客户端,其流程如下: