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标准错误码
1 ”100” ; Continue (all 100 range) 2 3 “110”; Connect Timeout 4 5 “200” ; OK 6 7 ”201” ; Created 8 9 ”250” ; Low on Storage Space 10 11 ”300” ; Multiple Choices 12 13 ”301” ; Moved Permanently 14 15 ”302” ; Moved Temporarily 16 17 ”303” ; See Other 18 19 ”304” ; Not Modified 20 21 ”305” ; Use Proxy 22 23 ”350” ; Going Away 24 25 ”351” ; Load Balancing 26 27 ”400” ; Bad Request 28 29 ”401” ; Unauthorized 告诉发出请求的那端,带上401回给你的信息,并加密 30 31 ”402” ; Payment Required 32 33 ”403” ; Forbidden 信令交互过程中,出现不支持的信令;解析不到信令头等,返回403 34 35 ”404” ; Not Found 36 37 ”405” ; Method Not Allowed 38 39 ”406” ; Not Acceptable 40 41 ”407” ; Proxy Authentication Required 42 43 ”408” ; Request Time-out 44 45 ”410” ; Gone 46 47 ”411” ; Length Required 48 49 ”412” ; Precondition Failed 50 51 ”413” ; Request Entity Too Large 52 53 ”414” ; Request-URI Too Large 54 55 ”415” ; Unsupported Media Type 56 57 ”451” ; Parameter Not Understood 58 59 ”452” ; reserved 60 61 ”453” ; Not Enough Bandwidth 一般是摄像机不支持多路预览,或者多路输出;反应摄像机能力集有限 62 63 ”454” ; Session Not Found 64 65 ”455” ; Method Not Valid in This State 66 67 ”456” ; Header Field Not Valid for Resource 68 69 ”457” ; Invalid Range 70 71 ”458” ; Parameter Is Read-Only 72 73 ”459” ; Aggregate operation not allowed 74 75 ”460” ; Only aggregate operation allowed 76 77 ”461” ; Unsupported transport 78 79 ”462” ; Destination unreachable 80 81 ”500” ; Internal Server Error 82 83 ”501” ; Not Implemented 你的请求未实现,返回 reply 501 84 85 ”502” ; Bad Gateway 86 87 ”503” ; Service Unavailable 88 89 ”504” ; Gateway Time out 90 91 ”505” ; RTSP Version not supported 92 93 ”551” ; Option not supported
http中错误码101 表示切换应用层协议成功的返回,比如HTTP协议切换成websocket协议;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律