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

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

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

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

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

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

6 结束会话

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

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

 

 

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

设备(服务端)应答:

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


7 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 2023-05-30 20:09  邗影  阅读(1104)  评论(0编辑  收藏  举报

导航