wireshark解析RTSP交互

RTSP信令交互

           RTSP协议即实时流协议(Real TIme Streaming Protocol,RTSP)是一种网络应用协议,用以控制流媒体服务器信息交互。大多数RTSP服务器使用实时传输协议(RTP)和实时传输控制协议(RTCP)结合媒体流传输。即客户端和服务器先进行RTSP交互,获取服务端可用命令,以及媒体参数;之后传输数据的时候传输的是RTP封装的数据包;

      下边的描述中,客户端就是我发送RTSP请求的那端,本例子中我使用的是VLC拉流,VLC就是客户端;服务端就是“设备”,是一个带存储功能的服务器设备;

简单的交互流程图:以RTSP over tcp为例,当然RTSP数据传输也可以使用UDP:(客户端拉流交互流程)

 

 

 

1 客户端和服务器进行RTSP交互过程中,我们通过TCP进行协议交互;首先就是TCP3次握手

 

 

2 RTSP交互,首先是客户端发送options命令给服务端,用来查询服务端支持的命令种类【设备是海康的】

 

 

请求的具体内容:

 

设备回复可用的方法:

3客户端向服务端发送describe命令,获取SDP信息

客户端发送describe请求:

设备回复:(该设备是海康的存储设备)

 

这里注意,客户端与某些设备【服务端】交互的时候,第一次发送describe,设备会回复401,此时客户端需要携带服务端上次回复的认证信息,再次发送describe;

 

设备回复SDP信息(下次客户端发送setup请求的URL就是media attribute里的control-URL):

 

 

4 客户端向服务端发起SETUP命令,建立会话链接:

 这里注意,setup有个重要参数,无论是接收推流,还是代理拉流,使用TCP还是UDP进行数据传输? 是setup里标注的

 

 

客户端发送的请求:(有音视频两个track的话,setup请求两次

注意,setup命令使用的URL是服务端返回的SDP中的control信息,如果setup用错了URL,服务端会回复415 Unsupported media type;

 

设备端的回复:

 

 

5 客户端向服务端发起播放请求

 

客户端发送play请求:

 “PLAY”请求中,URL就是你RTSP请求拉流的URL,不带用户名和密码;里边的range很重要,也需要带上;避免拉回放流出现时间对不上的问题【拉早上7点,得到的是早上5点,这种其实就与play命令的URL和range有关】

 

range有clock(UTC)和npt(毫秒seek位置)两种格式

 

 

  “ Range头可能包含一个时间参数。该参数以UTC格式指定了播放开始的时间。如果在这个指定时间后收到消息,那么播放立即开始。时间参数可能用来帮助同步从不同数据源获取的数据流。

  不含Range头的PLAY请求也是合法的。它从媒体流开头开始播放,直到媒体流被暂停。如果媒体流通过PAUSE暂停,媒体流传输将在暂停点(the pause point)重新开始。(只不过有些厂家解析RTSP请求的时候,range起到了重要作用)

  如果媒体流正在播放,那么这样一个PLAY请求将不起更多的作用,只是客户端可以用此来测试服务器是否存活。---来源于雷神的博客  ”

设备返回OK:如果你是pause转play,paly的回复可能某些流媒体服务器也会带range,这个range有些播放器会使用,所以要注意它的正确性;会影响播放器PTS的计算;

play信令的回复还有下边这种样式(海康的设备回复千变万化)


播放过程中你还可以发送其他请求,这里不再做其他操作;播放过程的数据交互

6 结束会话

Rst断开一般和ACK一起,如果只是单独的RST可能并不一定是真正的断开,有可能是路由异常

客户端向服务端发送结束会话请求:

如果是点播:一般是服务端本段时间的数据发完了,客户端收数据超时,触发teardown;或者有些客户端自己开发解析play信令的Range返回值,接收到满足Range时间段就不接收了;目前看到的基本都是客户端发teardown;结束;

 

 

客户端向服务端发送RTCP控制协议goodbye:

设备(服务端)应答:

结束TCP会话:强制关闭TCP链接(没有用四次挥手)使用 RST ACK;

——————————————————————————————————————————————————————————————————————

7 客户端RTSP推流流程

1 、option:交互支持哪些信令(并不是必须的,可以没有)

2、ANNOUNE:告知接收端,我这里的音视频数据格式,SPS,PPS,VPS等

3、option :获取接收端支持的数据传输协议,发送端就会用该协议发送数据

4、RECORD:告知接收端,发送端要开始发流了,并携带NTP时间

announce:

 

 

 

复制代码
ANNOUNCE rtsp://10.*.*.*:554/live/push186 RTSP/1.0
Content-Length: 313
Content-Type: application/sdp
CSeq: 1
User-Agent:  Mediaserver

v=0
o=- 0 0 IN IP4 0.0.0.0
s=Streamed by  Mediaserver
c=IN IP4 0.0.0.0
t=0 0
a=range:npt=now-
a=control:*
m=video 0 RTP/AVP 96
a=fmtp:96 packetization-mode=0; profile-level-id=641033; sprop-parameter-sets=Z2QQM6wbGqB4AiflhAAAAwAEAAADAMo8IhGo,aO4xshs=
a=rtpmap:96 H264/90000
a=control:trackID=0
RTSP/1.0 200 OK
CSeq: 1
Date: Wed, Oct 16 2024 05:56:56 GMT
Server:  Mediaserver
Session: DneaJ5deFkvM

SETUP rtsp://10.*.*.*:554/live/push186/trackID=0 RTSP/1.0
CSeq: 2
Session: DneaJ5deFkvM
Transport: RTP/AVP;unicast;client_port=32656-32657;mode=record
User-Agent: Mediaserver

RTSP/1.0 200 OK
CSeq: 2
Date: Wed, Oct 16 2024 05:56:56 GMT
Server:  Mediaserver
Session: DneaJ5deFkvM
Transport: RTP/AVP/UDP;unicast;client_port=32656-32657;mode=record;server_port=32258-32259;ssrc=00000000

RECORD rtsp://10.*.*.*:554/live/push186 RTSP/1.0
CSeq: 3
Range: npt=0.000-
Session: DneaJ5deFkvM
User-Agent:  Mediaserver

RTSP/1.0 200 OK
CSeq: 3
Date: Wed, Oct 16 2024 05:56:56 GMT
RTP-Info: url=rtsp://10.*.*.*:554/live/push186/trackID=0
Server:  Mediaserver
Session: DneaJ5deFkvM

OPTIONS rtsp://10.*.*.*:554/live/push186 RTSP/1.0
CSeq: 4
Session: DneaJ5deFkvM
User-Agent:  Mediaserver

RTSP/1.0 200 OK
CSeq: 4
Date: Wed, Oct 16 2024 05:57:01 GMT
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, ANNOUNCE, RECORD, SET_PARAMETER, GET_PARAMETER
Server:  Mediaserver
Session: DneaJ5deFkvM
复制代码

 

 

 

 


RTSP标准错误码

复制代码
 1100” ; Continue (all 100 range)
 2 
 3110”; Connect Timeout
 4 
 5200” ; OK
 6 
 7201” ; Created
 8 
 9250” ; Low on Storage Space
10 
11300” ; Multiple Choices
12 
13301” ; Moved Permanently
14 
15302” ; Moved Temporarily
16 
17303” ; See Other
18 
19304” ; Not Modified
20 
21305” ; Use Proxy
22 
23350” ; Going Away
24 
25351” ; Load Balancing
26 
27400” ; Bad Request
28 
29401” ; Unauthorized   告诉发出请求的那端,带上401回给你的信息,并加密
30 
31402” ; Payment Required
32 
33403” ; Forbidden   信令交互过程中,出现不支持的信令;解析不到信令头等,返回403
34 
35404” ; Not Found
36 
37405” ; Method Not Allowed
38 
39406” ; Not Acceptable
40 
41407” ; Proxy Authentication Required
42 
43408” ; Request Time-out
44 
45410” ; Gone
46 
47411” ; Length Required
48 
49412” ; Precondition Failed
50 
51413” ; Request Entity Too Large
52 
53414” ; Request-URI Too Large
54 
55415” ; Unsupported Media Type
56 
57451” ; Parameter Not Understood
58 
59452” ; reserved
60 
61453” ; Not Enough Bandwidth  一般是摄像机不支持多路预览,或者多路输出;反应摄像机能力集有限
62 
63454” ; Session Not Found
64 
65455” ; Method Not Valid in This State
66 
67456” ; Header Field Not Valid for Resource
68 
69457” ; Invalid Range
70 
71458” ; Parameter Is Read-Only
72 
73459” ; Aggregate operation not allowed
74 
75460” ; Only aggregate operation allowed
76 
77461” ; Unsupported transport
78 
79462” ; Destination unreachable
80 
81500” ; Internal Server Error
82 
83501” ; Not Implemented  你的请求未实现,返回 reply 501
84 
85502” ; Bad Gateway
86 
87503” ; Service Unavailable
88 
89504” ; Gateway Time out
90 
91505” ; RTSP Version not supported
92 
93551” ; Option not supported

http中错误码101 表示切换应用层协议成功的返回,比如HTTP协议切换成websocket协议;
复制代码

 

posted on   邗影  阅读(1572)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示