音视频协议解析(RTP/RTCP/RTSP/RTMP)——RTSP解析

介绍

我这个系列讲解音视频相关的协议,这部分内容比较多,我打算分成好几篇讲,感兴趣的读者可以关注一下。有了以上的基础,我就打算做一个音视频的网络服务器。如果您觉得读起来有点困难,可以先补一下计算机网络的知识,主要是TCP,UDP,HTTP相关的知识。

讲解

我们这篇文章讲解 RTSP (Real-Time Streaming Protocol)协议。这是一个应用层协议,位于 RTP/RTCP 协议之上。用于控制流媒体,可以发起,终结流媒体,也支持中断,回放等操作。

RTSP 分为客户端,服务端。客户端发送请求,服务端响应。通常有五个接口的方法,OPTIONS,DESCRIBE,SETUP,PLAY,TEARDOWN。下面我们接着详细解释一下这五个接口。

OPTIONS:

用于获取服务端提供的方法。

这是客户端用于 OPTIONS 请求的例子:
OPTIONS rtsp://192.168.31.115:8554/live RTSP/1.0\r\n
CSeq: 2\r\n
\r\n

这段代码中,OPTIONS 是客户端请求的方法,要求服务端返回提供的方法类型。

rtsp://192.168.31.115:8554/live 是 url 地址,包括 ip 地址和端口号。

RTSP/1.0,是 RTSP 的版本号,表示 1.0 版本。

Cseq:序列号,每次请求和响应序列号一样,下一次请求、回应的序列号递增。

这是服务端返回的例子:
RTSP/1.0 200 OK\r\n
CSeq: 2\r\n
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY\r\n
\r\n

RTSP/1.0,与客户端一样,RTSP 版本号,1.0。

200 0K,说明成功返回结果。

Cseq:序列号,与请求的序列号一致。

Public:这就是回应的结果,说明服务端提供的方法有 OPTIONS,DESCRIBE,SETUP,TEARDOWN,PLAY。

DESCRIBE:

用于获取媒体的描述信息。

这是客户端请求的例子
DESCRIBE rtsp://192.168.31.115:8554/live RTSP/1.0\r\n
CSeq: 3\r\n
Accept: application/sdp\r\n
\r\n

DESCRIBE 是客户端请求的方法。

Accept:是客户端指定的媒体描述信息类型,这里指请求格式为 sdp 的文件。

其他的上面讲过了。

这是服务端响应的例子:
RTSP/1.0 200 OK \r\n
CSeq: 2\r\n
Content-Base: rtsp://192.168.31.115:8554\r\n // 内容基础,反应url的地址
Content-type: application/sdp\r\n            // 内容类型,格式为sdp
Content-length: 311\r\n                      // 内容长度,311

v=0\r\n
o=-91685885859 1 IN IP4 192.168.72.129\r\n
t=0 0\r\n
a=control:*\r\n
m=video 0 RTP/AVP 96\r\n
a=rtpmap:96 H264/90000\r\n                  //编码类型 H.264
a=control:track0\r\n
m=audio 1 RTP/AVP/TCP 97\r\n
a=rtpmap:97 mpeg4-generic/44100/2\r\n
a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1210;\r\n
a=control:track1\r\n

这里大家可以看一下注释,其余的也不展开讲。 

SETUP:

用于向服务端发起建立连接请求

这是客户端例子
SETUP rtsp://192.168.31.115:8554/live/track0 RTSP/1.0\r\n
CSeq: 4\r\n
Transport: RTP/AVP;unicast;client_port=54492-54493\r\n
\r\n

这里解释一下 Transport 的内容

RTP/AVP:表示RTP通过UDP发送,如果是RTP/AVP/TCP则表示RTP通过TCP发送

unicast:表示单播,如果是multicast则表示多播

client_port:由于这里希望采用的是RTP OVER UDP,所以客户端发送了两个用于传输数据的端口,54492表示是RTP端口,54493表示RTCP端口(RTP端口为某个偶数,RTCP端口为RTP端口+1),客户端已经将这两个端口绑定到两个udp套接字上

这是服务端例子:
RTSP/1.0 200 OK\r\n
CSeq: 4\r\n
Transport: RTP/AVP;unicast;client_port=54492-54493;server_port=56400-56401\r\n
Session: 66334873\r\n
\r\n

Transport 中的 server_port 表示服务器中传输 RTP 的端口为 56400,传输 RTCP 的端口为 56401

Session 中的数字是 Session ID,是由服务器在SETUP的回应中选择的,客户端得到Session ID后,在以后的对Session 的操作请求消息中都要包含Session ID

PLAY:

用于向服务端发起播放请求

这是客户端例子:
PLAY rtsp://192.168.31.115:8554/live RTSP/1.0\r\n
CSeq: 5\r\n
Session: 66334873\r\n
Range: npt=0.000-\r\n
\r\n
这是服务端例子:
RTSP/1.0 200 OK\r\n
CSeq: 5\r\n
Range: npt=0.000-\r\n
Session: 66334873; timeout=60\r\n
\r\n

TEARDOWN:

用于向服务端发送关闭连接的请求

这是客户端例子:
TEARDOWN rtsp://192.168.31.115:8554/live RTSP/1.0\r\n
CSeq: 6\r\n
Session: 66334873\r\n
\r\n
这是服务端例子:
TEARDOWN rtsp://192.168.31.115:8554/live RTSP/1.0\r\n
CSeq: 6\r\n
Session: 66334873\r\n
\r\n

好了,RTSP 的五种主要方法都介绍了。这里总结一下,在实际应用中,第一步:我们可以用 OPTIONS 查询支持的方法;第二步,我们用 DESCRIBE 描述媒体的信息;第三步,我们用 SETUP 与服务端建立连接;第四步,我们用 PLAY 请求播放视频;第五步,我们用 TEARDOWN 请求关闭连接。

这篇文章参考rtsp简单服务器,下一篇文章我们会讲解 RTMP。

欲知后事如何,请听下回分解。

你可能感兴趣的:(音视频,网络协议)