网络流媒体协议之——RTSP协议

网络 网络管理
RTSP(Real-Time Stream Protocol)协议是一个基于文本的多媒体播放控制协议,属于应用层。RTSP以客户端方式工作,对流媒体提供播放、暂停、后退、前进等操作。该标准由IETF指定,对应的协议是RFC2326。

RTSP(Real-Time Stream Protocol)协议是一个基于文本的多媒体播放控制协议,属于应用层。RTSP以客户端方式工作,对流媒体提供播放、暂停、后退、前进等操作。该标准由IETF指定,对应的协议是RFC2326。

RTSP作为一个应用层协议,提供了一个可供扩展的框架,使得流媒体的受控和点播变得可能,它主要用来控制具有实时特性的数据的发送,但其本身并不用于传送流媒体数据,而必须依赖下层传输协议(如RTP/RTCP)所提供的服务来完成流媒体数据的传送。RTSP负责定义具体的控制信息、操作方法、状态码,以及描述与RTP之间的交互操作。RTSP媒体服务协议框架如下:

客户端要播放RTSP媒体流,就需要知道媒体源的URL,RTSP的URL格式一般如下:

rtsp://host[:port]/[abs_path]/content_name 
  • 1.
  • host:有效的域名或IP地址;
  • port:端口号,缺省为554,若为缺省可不填写,否则必须写明。

例如,一个完整的RTSP URL可写为:

rtsp://192.168.1.67:554/test 
  • 1.

又如目前市面上常用的海康网络摄像头的RTSP地址格式为:

rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream 
  • 1.

示例:

rtsp://admin:12345@192.168.1.67:554/h264/ch1/main/av_stream 
rtsp://admin:12345@192.168.1.67/mpeg4/ch1/sub/av_stream 
  • 1.
  • 2.

RTSP报文

对RTSP协议的使用有了一个大概的了解之后,我们来看一下RTSP报文结构。

RTSP是一种基于文本的协议,用CRLF(回车换行)作为每一行的结束符,其好处是,在使用过程中可以方便地增加自定义参数,也方便抓包分析。从消息传送方向上来分,RTSP的报文有两类:请求报文和响应报文。请求报文是指从客户端向服务器发送的请求(也有少量从服务器向客户端发送的请求),响应报文是指从服务器到客户端的回应。

RTSP请求报文的常用方法与作用:

网络流媒体协议之——RTSP协议

一次基本的RTSP交互过程如下,C表示客户端,S表示服务端。

网络流媒体协议之——RTSP协议

首先客户端连接到流媒体服务器并发送一个RTSP描述请求(DESCRIBE request),服务器通过一个SDP(Session DescriptionProtocol)描述来进行反馈(DESCRIBEresponse),反馈信息包括流数量、媒体类型等信息。客户端分析该SDP描述,并为会话中的每一个流发送一个RTSP连接建立请求(SETUPrequest),该命令会告诉服务器用于接收媒体数据的端口,服务器响应该请求(SETUP response)并建立连接之后,就开始传送媒体流(RTP包)到客户端。在播放过程中客户端还可以向服务器发送请求来控制快进、快退和暂停等。最后,客户端可发送一个终止请求(TEARDOWN request)来结束流媒体会话。

下面我们通过具体的消息实例来进一步了解一下RTSP的工作过程:

(1) OPTIONS

OPTIONS请求是客户端向服务器询问可用的方法,请求和回复实例如下:

C->S: OPTIONS rtsp://example.com/media.mp4 RTSP/1.0 
 CSeq: 1 
 Require: implicit-play 
 Proxy-Require: gzipped-messages 
  
S->C: RTSP/1.0 200 OK 
 CSeq: 1 
 Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

(2) DESCRIBE

客户端向服务器请求媒体资源描述,服务器端通过SDP(Session Description Protocol)格式回应客户端的请求。资源描述中会列出所请求媒体的媒体流及其相关信息,典型情况下,音频和视频分别作为一个媒体流传输。实例如下:

C->S: DESCRIBE rtsp://example.com/media.mp4 RTSP/1.0 
 CSeq: 2 
  
S->C: RTSP/1.0 200 OK 
 CSeq: 2 
 Content-Base: rtsp://example.com/media.mp4 
 Content-Type: application/sdp 
 Content-Length: 460 
  
 m=video 0 RTP/AVP 96 
 a=control:streamid=0 
 a=range:npt=0-7.741000 
 a=length:npt=7.741000 
 a=rtpmap:96 MP4V-ES/5544 
 a=mimetype:string;"video/MP4V-ES" 
 a=AvgBitRate:integer;304018 
 a=StreamName:string;"hinted video track" 
 m=audio 0 RTP/AVP 97 
 a=control:streamid=1 
 a=range:npt=0-7.712000 
 a=length:npt=7.712000 
 a=rtpmap:97 mpeg4-generic/32000/2 
 a=mimetype:string;"audio/mpeg4-generic" 
 a=AvgBitRate:integer;65790 
 a=StreamName:string;"hinted audio track" 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.

(3) SETUP

SETUP请求确定了具体的媒体流如何传输,该请求必须在PLAY请求之前发送。SETUP请求包含媒体流的URL和客户端用于接收RTP数据(audio or video)的端口以及接收RTCP数据(meta information)的端口。服务器端的回复通常包含客户端请求参数的确认,并会补充缺失的部分,比如服务器选择的发送端口。每一个媒体流在发送PLAY请求之前,都要首先通过SETUP请求来进行相应的配置。

C->S: SETUP rtsp://example.com/media.mp4/streamid=0 RTSP/1.0 
 CSeq: 3 
 Transport: RTP/AVP;unicast;client_port=8000-8001 
  
S->C: RTSP/1.0 200 OK 
 CSeq: 3 
 Transport: RTP/AVP;unicast;client_port=8000-8001;server_port=9000-9001;ssrc=1234ABCD 
 Session: 12345678 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

(4) PLAY

客户端通过PLAY请求来播放一个或全部媒体流,PLAY请求可以发送一次或多次,发送一次时,URL为包含所有媒体流的地址,发送多次时,每一次请求携带的URL只包含一个相应的媒体流。PLAY请求中可指定播放的range,若未指定,则从媒体流的开始播放到结束,如果媒体流在播放过程中被暂停,则可在暂停处重新启动流的播放。

C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0 
 CSeq: 4 
 Range: npt=5-20 
 Session: 12345678 
  
S->C: RTSP/1.0 200 OK 
 CSeq: 4 
 Session: 12345678 
 RTP-Info: url=rtsp://example.com/media.mp4/streamid=0;seq=9810092;rtptime=3450012 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

(5) PAUSE

PAUSE请求会暂停一个或所有媒体流,后续可通过PLAY请求恢复播放。PAUSE请求中携带所请求媒体流的URL,若参数range存在,则指明在何处暂停,若该参数不存在,则暂停立即生效,且暂停时长不确定。

C->S: PAUSE rtsp://example.com/media.mp4 RTSP/1.0 
 CSeq: 5 
 Session: 12345678 
  
S->C: RTSP/1.0 200 OK 
 CSeq: 5 
 Session: 12345678 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

(6) TEARDOWN

结束会话请求,该请求会停止所有媒体流,并释放服务器上的相关会话数据。

C->S: TEARDOWN rtsp://example.com/media.mp4 RTSP/1.0 
 CSeq: 8 
 Session: 12345678 
  
S->C: RTSP/1.0 200 OK 
 CSeq: 8 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

(7) GET_PARAMETER

检索指定URI数据中的参数值。不携带消息体的GET_PARAMETER可用来测试服务器端或客户端是否可通(类似ping的功能)。

S->C: GET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0 
 CSeq: 9 
 Content-Type: text/parameters 
 Session: 12345678 
 Content-Length: 15 
  
 packets_received 
 jitter 
  
C->S: RTSP/1.0 200 OK 
 CSeq: 9 
 Content-Length: 46 
 Content-Type: text/parameters 
  
 packets_received: 10 
 jitter: 0.3838 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

(8) SET_PARAMETER

用于设置指定媒体流的参数。

C->S: SET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0 
 CSeq: 10 
 Content-length: 20 
 Content-type: text/parameters 
  
 barparam: barstuff 
  
S->C: RTSP/1.0 451 Invalid Parameter 
 CSeq: 10 
 Content-length: 10 
 Content-type: text/parameters 
  
 barparam 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

(9) REDIRECT

重定向请求,用于服务器通知客户端新的服务地址,客户端需要向这个新地址重新发起请求。重定向请求中可能包含Range参数,指明重定向生效的时间。客户端若需向新服务地址发起请求,必须先teardown当前会话,再向指定的新主机setup一个新的会话。

S->C: REDIRECT rtsp://example.com/media.mp4 RTSP/1.0 
 CSeq: 11 
 Location: rtsp://bigserver.com:8001 
 Range: clock=19960213T143205 
  • 1.
  • 2.
  • 3.
  • 4.

(10) ANNOUNCE

ANNOUNCE请求有两个用途:(1)C->S:客户端向服务器端发布URL指定的媒体信息描述;(2) S->C:实时更新对话描述。若媒体表示中新增了一个媒体流,例如在直播过程中,则整个媒体表示的description都要被重新发送,而不是只发送新增部分。

C->S: ANNOUNCE rtsp://example.com/media.mp4 RTSP/1.0 
 CSeq: 7 
 Date: 23 Jan 1997 15:35:06 GMT 
 Session: 12345678 
 Content-Type: application/sdp 
 Content-Length: 332 
  
 v=0 
 o=mhandley 2890844526 2890845468 IN IP4 126.16.64.4 
 s=SDP Seminar 
 i=A Seminar on the session description protocol 
 u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps 
 e=mjh@isi.edu (Mark Handley) 
 c=IN IP4 224.2.17.12/127 
 t=2873397496 2873404696 
 a=recvonly 
 m=audio 3456 RTP/AVP 0 
 m=video 2232 RTP/AVP 31 
  
S->C: RTSP/1.0 200 OK 
 CSeq: 7 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.

(11) RECORD

请求录制指定范围的媒体数据,请求中可指定录制的起止时间戳;若未指定时间范围,则使用presentation description中的开始和结束时间,这种情况下,如果会话已开始,则立即启动录制操作。

C->S: RECORD rtsp://example.com/media.mp4 RTSP/1.0 
 CSeq: 6 
 Session: 12345678 
  
S->C: RTSP/1.0 200 OK 
 CSeq: 6 
 Session: 12345678 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

以上就是RTSP中常用的命令及其实例介绍。最后,来看一段实际使用的RTSP命令交互过程,该过程是通过PC对海康摄像头视频流的拉取和播放,并通过Wireshark抓取客户端的数据得到的:

OPTIONS rtsp://10.3.8.202:554 RTSP/1.0 
CSeq: 2 
User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22) 
  
RTSP/1.0 200 OK 
CSeq: 2 
Public: OPTIONS, DESCRIBE, PLAY, PAUSE, SETUP, TEARDOWN, SET_PARAMETER, GET_PARAMETER 
Date: Mon, Jan 29 2018 16:56:47 GMT 
  
DESCRIBE rtsp://10.3.8.202:554 RTSP/1.0 
CSeq: 3 
User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22) 
Accept: application/sdp 
  
RTSP/1.0 401 Unauthorized 
CSeq: 3 
WWW-Authenticate: Digest realm="IP Camera(10789)"nonce="6b9a455aec675b8db81a9ceb802e4eb8"stale="FALSE" 
Date: Mon, Jan 29 2018 16:56:47 GMT 
  
DESCRIBE rtsp://10.3.8.202:554 RTSP/1.0 
CSeq: 4 
Authorization: Digest username="admin"realm="IP Camera(10789)"nonce="6b9a455aec675b8db81a9ceb802e4eb8"uri="rtsp://10.3.8.202:554"response="3fc4b15d7a923fc36f32897e3cee69aa" 
User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22) 
Accept: application/sdp 
  
RTSP/1.0 200 OK 
CSeq: 4 
Content-Type: application/sdp 
Content-Base: rtsp://10.3.8.202:554/ 
Content-Length: 551 
  
v=0 
o=- 1517245007527432 1517245007527432 IN IP4 10.3.8.202 
s=Media Presentation 
e=NONE 
b=AS:5050 
t=0 0 
a=control:rtsp://10.3.8.202:554/ 
m=video 0 RTP/AVP 96 
c=IN IP4 0.0.0.0 
b=AS:5000 
a=recvonly 
a=x-dimensions:2048,1536 
a=control:rtsp://10.3.8.202:554/trackID=1 
a=rtpmap:96 H264/90000 
a=fmtp:96 profile-level-id=420029packetization-mode=1sprop-parameter-sets=Z00AMp2oCAAwabgICAoAAAMAAgAAAwBlCA==,aO48gA== 
a=Media_header:MEDIAINFO=494D4B48010200000400000100000000000000000000000000000000000000000000000000000000
a=appversion:1.0 
  
SETUP rtsp://10.3.8.202:554/trackID=1 RTSP/1.0 
CSeq: 5 
Authorization: Digest username="admin"realm="IP Camera(10789)"nonce="6b9a455aec675b8db81a9ceb802e4eb8"uri="rtsp://10.3.8.202:554/"response="ddfbf3e268ae954979407369a104a620" 
User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22) 
Transport: RTP/AVP;unicast;client_port=57844-57845 
  
RTSP/1.0 200 OK 
CSeq: 5 
Session: 1273222592;timeout=60 
Transport: RTP/AVP;unicast;client_port=57844-57845;server_port=8218-8219;ssrc=5181c73a;mode="play" 
Date: Mon, Jan 29 2018 16:56:47 GMT 
  
PLAY rtsp://10.3.8.202:554/ RTSP/1.0 
CSeq: 6 
Authorization: Digest username="admin"realm="IP Camera(10789)"nonce="6b9a455aec675b8db81a9ceb802e4eb8"uri="rtsp://10.3.8.202:554/"response="b5abf0b230de4b49d6c6d42569f88e91" 
User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22) 
Session: 1273222592 
Range: npt=0.000- 
  
RTSP/1.0 200 OK 
CSeq: 6 
Session: 1273222592 
RTP-Info: url=rtsp://10.3.8.202:554/trackID=1;seq=65373;rtptime=3566398668 
Date: Mon, Jan 29 2018 16:56:47 GMT 
  
GET_PARAMETER rtsp://10.3.8.202:554/ RTSP/1.0 
CSeq: 7 
Authorization: Digest username="admin"realm="IP Camera(10789)"nonce="6b9a455aec675b8db81a9ceb802e4eb8"uri="rtsp://10.3.8.202:554/"response="bb2309dcd083b25991c13e165673687b" 
User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22) 
Session: 1273222592 
  
RTSP/1.0 200 OK 
CSeq: 7 
Date: Mon, Jan 29 2018 16:56:47 GMT 
  
TEARDOWN rtsp://10.3.8.202:554/ RTSP/1.0 
CSeq: 8 
Authorization: Digest username="admin"realm="IP Camera(10789)"nonce="6b9a455aec675b8db81a9ceb802e4eb8"uri="rtsp://10.3.8.202:554/"response="e08a15c27d3daac14fd4b4bcab424a5e" 
User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22) 
Session: 1273222592 
  
RTSP/1.0 200 OK 
CSeq: 8 
Session: 1273222592 
Date: Mon, Jan 29 2018 16:57:03 GMT 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
责任编辑:赵宁宁 来源: 今日头条
相关推荐

2022-05-26 07:54:43

TCPUDP协议

2023-12-28 08:30:42

媒体协议媒体格式Android

2022-12-01 10:40:09

IPCSRT网络

2014-06-13 13:47:31

UDP

2010-07-14 18:25:14

RTSP协议

2022-07-19 16:59:04

流媒体传输IPC物联网

2011-08-24 09:56:13

网络协议BOOTP协议TFTP协议

2020-04-23 09:11:09

网络协议网络设备网络

2010-06-12 15:54:09

TCP IP协议

2025-02-08 10:11:25

2020-07-28 08:38:10

TCPUDP协议

2014-06-16 09:22:59

2023-12-17 14:43:17

2010-09-27 14:10:29

DNS协议简介

2010-06-17 17:51:12

资源预留协议

2011-08-24 10:31:01

网络协议SLIPPPP

2019-04-29 10:26:49

TCP网络协议网络通信

2014-06-16 09:33:22

ICMPPingTraceroute

2011-08-24 09:46:33

NetBIOS协议NetBEUI协议

2010-09-02 23:52:15

VoIP网络协议
点赞
收藏

51CTO技术栈公众号