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

RTSP包含Normal RTSP(数据通过RTP传输,运用厂商有苹果和微软等),以及Real-RTSP(数据通过RDT传输)。
本篇我们紧张讲Normal RTSP。

RTSP传输的一样平常是TS、MP4格式的流,其传输一样平常须要2~3个通道,命令和数据通道分离。
利用RTSP协议传输流媒体数据须要有专门的媒体播放器和媒体做事器,也便是须要支持RTSP协议的客户端和做事器。

phprtsp流媒体收集流媒体协定之RTSP协定 Vue.js

客户端要播放RTSP媒体流,就须要知道媒体源的URL,RTSP的URL格式一样平常如下:

rtsp://host[:port]/[abs_path]/content_name

host: 有效的域名或IP地址;

port: 端口号,缺省为554,若为缺省可不填写,否则必须写明。

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

rtsp://192.168.1.67:554/test

又现在朝市情上常用的海康网络摄像头的RTSP地址格式为:

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

示例: 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

RTSP报文

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

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

RTSP要求报文的常用方法与浸染:

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

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

下面我们通过详细的实例来进一步理解一下RTSP的事情过程:

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

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"

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

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

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

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

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

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

REDIRECT

重定向要求,用于做事器关照客户端新的做事地址,客户端须要向这个新地址重新发起要求。
重定向要求中可能包含Range参数,指明重定向生效的韶光。
客户端若需向新做事地址发起要求,必须先teardown当前会话,再向指定的新主机setup一个新的会话。

S->C: REDIRECT rtsp://example.com/media.mp4 RTSP/1.0

CSeq: 11

Location: rtsp://bigserver.com:8001

Range: clock=19960213T143205Z-

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

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

以上便是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=420029; packetization-mode=1; sprop-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

本日的内容就分享到这里,须要音视频干系学习资料的可往后台私信“音视频资料”,免费分享