RTSP协议是流媒体协议,通过在播放器和服务端交互建立连接以后,服务器在不同的通道通过UDP把音频/视频数据发送给播放器。 RTSP协议传输的数据格式一般为TS,MP4。因为音视频是分别通过不同的UDP通道传输的,所以在服务端需要把ts/mp4文件做demux,然后再传输。我们可以采用live555,vlc,ffmpeg等作为rtsp服务器。
而RTMP协议则是通过一个TCP通道把音视频数据从服务端发送到播放器,RTMP协议传输的一般为flv格式数据。开源的RTMP服务器有red5,nginx-rtmp-module,srs。red5是java实现的服务器,nginx-rtmp-module是基于web服务器nginx开发的rtmp流媒体服务器,而srs的实现基于st(state-threads)的单线程多协程服务器。
RTSP服务端和RTSP客户端的交互过程如下。 C表示RTSP客户端,S表示RTSP服务端
C->S: OPTION request //C询问S有哪些方法可用 S->C: OPTION response //S回应提供的所有可用方法
C->S: DESCRIBE request //C要求得到S提供的媒体初始化描述信息 S->C: DESCRIBE response //S回应媒体初始化描述信息(SDP)
C->S: SETUP request //C请求S建立会话 S->C: SETUP response //S建立会话,返回会话相关信息
C->S: PLAY request //C请求播放 S->C: PLAY response //S回应请求 S->C: //RTP发送流媒体数据
C->S: TEARDOWN request //C请求关闭会话 S->C: TEARDOWN response //S回应请求
RTSP服务端和客户端的整体交互过程如下。
客户端询问服务器有哪些方法可用。 服务器返回可以使用的方法。 DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,GET_PARAMETER\r\n
客户端请求服务端发送SDP,服务端发送SDP给客户端。 如下所示,SDP中包括H264的sps和pps信息。
客户端请求建立Audio和Video的UDP连接。
下面的Request请求建立Video的UDP连接。 Request: SETUP rtsp://192.168.40.1:8554/1/trackID=0 RTSP/1.0\r\n
下面的Request请求建立Audio的UDP连接。 Request: SETUP rtsp://192.168.40.1:8554/1/trackID=1 RTSP/1.0\r\n
客户端请求服务端开始提供流媒体服务,开始发送音视频数据到客户端。 如下所示,Payload type为DynamicRTP-Type-96 (96)的RTP包发送的是Video数据,Payload type为MPEG-I/II Audio (14)的RTP包发送的是Audio数据。
在开始传输音视频RTP包以后,RTCP用来提供客户端和服务端之间的传输反馈。服务端发送给客户端的RTCP包是Sender Report,客户端发送给服务端的RTCP包是Receiver Report。