rtsp(Real Time Streaming Protocol,RFC2326),实时流传输协议,是TCP/IP协议体系中的一个应用层协议。
该协议主要规定了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP体系结位于RTP和RTCP之上(RTCP用于控制传输,RTP用于数据传输),使用TCP或UDP完成数据传输!
OPTIONS
DESCRIBE
SETUP
PLAY
TEARDOWN
sdp(Session Description Protocol,会话描述协议)对应RFC2327。RTSP协议中使用sdp进行媒体信息的描述。 sdp的目的就是在媒体会话中,传递媒体流信息,允许会话描述的接收者去参与会话,定义了会话描述的统一格式。
sdp信息由多行"="组成,其中是一个字符串,是一个字符串,type表示类型,value的格式视type而定,整个协议区分大小写,"="两侧不允许有空格!
sdp会话描述包含一个会话级描述(session_level_description)和多个媒体级描述(media_level description)组成!会话级描述的作用域是整个会话,其位置从"v="行开始到第一个媒体描述为止;媒体级描述是对单个的媒体流进行描述,如传输过程中的视频流信息,从m=开始到下一个媒体描述为止,如下图所示:
必选。
必选。
必选。
可选。
可选。
必选。
可选。
可选。
可选。
可选。
必选。
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
可选。
一般为RTSP客户端发起的第一条请求指令,该指令的目的是得到服务端提供了哪些方法!(OPTIONS, DESCRIBE, PLAY, PAUSE, SETUP, TEARDOWN, SET_PARAMETER, GET_PARAMETER等)。
# 请求报文
OPTIONS rtsp://192.168.0.110:554/Streaming/Channels/101 RTSP/1.0
CSeq: 2
User-Agent: LibVLC/3.0.17.4 (LIVE555 Streaming Media v2016.11.28)
# 响应报文
RTSP/1.0 200 OK
CSeq: 2
Public: OPTIONS, DESCRIBE, GET_PARAMETER, PAUSE, PLAY, SETUP, SET_PARAMETER, TEARDOWN
Date: Mon, Dec 05 2022 17:00:10 GMT
注意:OPTION响应中的序列号与请求中的序列号相同。
客户端发起OPTION请求后,得到了RTSP服务器支持的指令。在此之后,客户端会继续向服务器发送DESCRIBE消息,来获取会话描述信息(sdp)。
# 第一次发送describe请求
DESCRIBE rtsp://192.168.0.110:554/Streaming/Channels/101 RTSP/1.0
CSeq: 3
User-Agent: LibVLC/3.0.17.4 (LIVE555 Streaming Media v2016.11.28)
Accept: application/sdp
# 服务端返回401---未认证
RTSP/1.0 401 Unauthorized
CSeq: 3
WWW-Authenticate: Digest realm="IP Camera(J4640)", nonce="a1c588527e4e05c101acf26a8ce7bea6", stale="FALSE"
Date: Mon, Dec 05 2022 17:00:10 GMT
# 第二次发送describe请求
DESCRIBE rtsp://192.168.0.110:554/Streaming/Channels/101 RTSP/1.0
CSeq: 4
Authorization: Digest username="admin", realm="IP Camera(J4640)", nonce="a1c588527e4e05c101acf26a8ce7bea6", uri="rtsp://192.168.0.110:554/Streaming/Channels/101", response="6e0f28a1a40865ab098d748eb306be92"
User-Agent: LibVLC/3.0.17.4 (LIVE555 Streaming Media v2016.11.28)
Accept: application/sdp
DESCRIBE消息,有两种返回结果:
1)服务端需要认证,则首先返回401,并要求客户端认证,客户端再次发送包含认证信息的DESCRIBE指令,服务端收到带认证信息的DESCRIBE请求,返回sdp信息给客户端;
2)服务端不需要认证,则直接返回sdp;
# 响应报文
RTSP/1.0 200 OK
CSeq: 4
Content-Type: application/sdp
Content-Base: rtsp://192.168.0.110:554/Streaming/Channels/101/
Content-Length: 788
v=0
o=- 1670259610794238 1670259610794238 IN IP4 192.168.0.110
s=Media Presentation
e=NONE
b=AS:5100
t=0 0
a=control:rtsp://192.168.0.110:554/Streaming/Channels/101/
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:5000
a=recvonly
a=x-dimensions:2560,1440
a=control:rtsp://192.168.0.110:554/Streaming/Channels/101/trackID=1
a=rtpmap:96 H265/90000
a=fmtp:96 sprop-vps=QAEMAf//AWAAAAMAAAMAAAMAAAMAlqwJ; sprop-sps=QgEBAWAAAAMAAAMAAAMAAAMAlqABQCAFoWNrkk5TNwEBAQQAADhAAAV+QoQ=; sprop-pps=RAHA8vAiQA==
m=audio 0 RTP/AVP 11
c=IN IP4 0.0.0.0
b=AS:50
a=recvonly
a=control:rtsp://192.168.0.110:554/Streaming/Channels/101/trackID=2
a=rtpmap:11 PCM/16000
a=Media_header:MEDIAINFO=494D4B480103003E0000007D000000000000000000000000000000000000;
a=appversion:1.0
ANNOUNCE rtsp://192.168.0.110:554/Streaming/Channels/101 RTSP/1.0
CSeq:312
Date:23Jan 199715:35:06GMT
Session:47112344Content-Type:application/sdp
Content-Length:332
文本内容
RTSP/1.0 200 OK
SETUP rtsp://192.168.0.110:554/Streaming/Channels/101/trackID=1 RTSP/1.0
CSeq: 5
Authorization: Digest username="admin", realm="IP Camera(J4640)", nonce="a1c588527e4e05c101acf26a8ce7bea6", uri="rtsp://192.168.0.110:554/Streaming/Channels/101/", response="512cc1939bddf54e217bdb9ca51cdfc7"
User-Agent: LibVLC/3.0.17.4 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP/TCP;unicast;interleaved=0-1
RTSP/1.0 200 OK
CSeq: 5
Session: 366292562;timeout=60
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=224b8452;mode="play"
Date: Mon, Dec 05 2022 17:00:10 GMT
客户端发送的播放请求,发送播放请求的时候可以指定播放区间。发起播放请求后,如果连接正常,则服务端开始播放,即开始向客户端按照之前在TRASPORT中约定好的方式发送音视频数据包。
PLAY rtsp://192.168.0.110:554/Streaming/Channels/101/ RTSP/1.0
CSeq: 6
Authorization: Digest username="admin", realm="IP Camera(J4640)", nonce="a1c588527e4e05c1cf26a8ce7bea6", uri="rtsp://192.168.0.110:554/Streaming/Channels/101/", response="0365b758c23e959fa5964cb47098b"
User-Agent: LibVLC/3.0.17.4 (LIVE555 Streaming Media v2016.11.28)
Session: 366292562
Range: npt=0.000-
RTSP/1.0 200 OK
CSeq: 6
Session: 366292562
RTP-Info: url=rtsp://192.168.0.110:554/Streaming/Channels/101/trackID=1;seq=16946;rtptime=2502369666
Date: Mon, Dec 05 2022 17:00:10 GMT
暂停请求会使得流传输暂时中断,主要用于回放或录制。
PAUSE rtsp://192.168.0.110:554/Streaming/Channels/101/ RTSP/1.0
CSeq:12
Session:366292562
RTSP/1.0 200 OK
CSeq:12
Session:366292562
结束流。
TEARDOWN rtsp://192.168.0.110:554/Streaming/Channels/101/ RTSP/1.0
CSeq: 7
Authorization: Digest username="admin", realm="IP Camera", nonce="a1c588527e401acf26a8ce7bea6", uri="rtsp://192.168.0.110:554/Streaming/Channels/101/", response="d57351cf4606ef70ef80e4709b"
User-Agent: LibVLC/3.0.17.4 (LIVE555 Streaming Media v2016.11.28)
Session: 366292562
字段基本与其他命令含义相同。
RTSP/1.0 200 OK
CSeq: 7
Session: 366292562
Date: Mon, Dec 05 2022 17:00:13 GMT
向服务器获取参数,一般用于获取时间范围。当发送的请求中没有相关请求参数时,则用作保持RTSP连接**(tcp方式的心跳)**。
GET_PARAMETER rtsp://192.168.0.110:554/Streaming/Channels/101/?transportmode=unicast&profile=Profile_12 RTSP/1.0
CSeq: 17
Authorization: Digest username="admin", realm="bcad28138995", nonce="a1a5b9d3865180dc1cb2eb2a27", uri="rtsp://192.168.0.110:554/Streaming/Channels/101/", response="4764a1f2772821f5528e18c3f9"
User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28)
Session: 366292562
RTSP/1.0 200 OK
CSeq: 17
Date: Thu, Aug 27 2022 18:29:00 GMT
给URI指定的流地址设置参数。
可跟一个或多个参数。
RTP是一种应用层协议,传输层协议可以是TCP或者UDP(UDP多一些)。
RTP数据包由两部分组成,一部分是RTP Heaeder,一部分是RTP body,RTP Header占用最少12个字节,最多72个字节;另一部分是RTP Payload,用来封装实际的数据负载,如封装h264编码的视频数据!
0 1 2 3 4
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| synchronization source (SSRC) identifier |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
| contributing source (CSRC) identifiers |
| .... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
有效载荷类型表
PT | *Encoding Name* | *Audio/Video (A/V)* | *Clock Rate (Hz)* | *Channels* | *Reference* |
---|---|---|---|---|---|
0 | PCMU | A | 8000 | 1 | [RFC3551] |
1 | Reserved | ||||
2 | Reserved | ||||
3 | GSM | A | 8000 | 1 | [RFC3551] |
4 | G723 | A | 8000 | 1 | [Vineet_Kumar][RFC3551] |
5 | DVI4 | A | 8000 | 1 | [RFC3551] |
6 | DVI4 | A | 16000 | 1 | [RFC3551] |
7 | LPC | A | 8000 | 1 | [RFC3551] |
8 | PCMA | A | 8000 | 1 | [RFC3551] |
9 | G722 | A | 8000 | 1 | [RFC3551] |
10 | L16 | A | 44100 | 2 | [RFC3551] |
11 | L16 | A | 44100 | 1 | [RFC3551] |
12 | QCELP | A | 8000 | 1 | [RFC3551] |
13 | CN | A | 8000 | 1 | [RFC3389] |
14 | MPA | A | 90000 | [RFC3551][RFC2250] | |
15 | G728 | A | 8000 | 1 | [RFC3551] |
16 | DVI4 | A | 11025 | 1 | [Joseph_Di_Pol] |
17 | DVI4 | A | 22050 | 1 | [Joseph_Di_Pol] |
18 | G729 | A | 8000 | 1 | [RFC3551] |
19 | Reserved | A | |||
20 | Unassigned | A | |||
21 | Unassigned | A | |||
22 | Unassigned | A | |||
23 | Unassigned | A | |||
24 | Unassigned | V | |||
25 | CelB | V | 90000 | [RFC2029] | |
26 | JPEG | V | 90000 | [RFC2435] | |
27 | Unassigned | V | |||
28 | nv | V | 90000 | [RFC3551] | |
29 | Unassigned | V | |||
30 | Unassigned | V | |||
31 | H261 | V | 90000 | [RFC4587] | |
32 | MPV | V | 90000 | [RFC2250] | |
33 | MP2T | AV | 90000 | [RFC2250] | |
34 | H263 | V | 90000 | [Chunrong_Zhu] | |
35-71 | Unassigned | ? | |||
72-76 | Reserved for RTCP conflict avoidance | [RFC3551] | |||
77-95 | Unassigned | ? | |||
96-127 | dynamic | ? | [RFC3551] |
GB28181中对payload的定义
负载类型 | 编码名称 | 时钟频率 | 通道数 | SDD描述中m字段的media项 |
---|---|---|---|---|
4 | G.723 | 8k HZ | 1 | audio |
8 | PCMA(G.711 A) | 8k HZ | 1 | audio |
9 | G722 | 8k HZ | 1 | audio |
18 | G.729 | 8k HZ | 1 | audio |
20 | SVACA(SVAC音频) | 8k HZ | 1 | audio |
96 | PS | 90k HZ | video | |
97 | MPEG-4 | video | ||
98 | H.264 | |||
99 | SAVC(SVAC视频) |
载荷数据。