live555抓包实例

相对于看RTSP协议,直接抓包分析会对该协议有一个简单的认知。本文在Windows下使用Wireshark抓包,live555服务器使用前些日子搞的工程。

一、RTSP包

RTSP包基于TCP传输。下面按照使用live555的h264测试工程,使用单播方式,按顺序列出RTSP包的格式。先打开Wireshark工具进行抓包,然后用vlc连接,这样才会出现rtsp包。本文live555服务端为自编译,自运行,地址为:rtsp://192.168.18.18:8554/h264ESVideo/

1.1、OPTION

客户端(vlc)发送OPTION请求:

1
2
3
4
Request: OPTIONS rtsp://192.168.18.18:8554/h264ESVideo RTSP/1.0\r\n
CSeq: 2\r\n
User-Agent: LibVLC/2.1.3 (LIVE555 Streaming Media v2014.01.21)\r\n
\r\n

服务器回应包:

1
2
3
4
5
Response: RTSP/1.0 200 OK\r\n
CSeq: 2\r\n
Date: Sun, Jan 03 2016 11:57:35 GMT\r\n
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER\r\n
\r\n

发送option获取服务器支持的方法有哪些。

1.2、DESCRIBE

客户端发送DESCRIBE,请求RTSP服务器描述自身有哪些资源,对应的抓包结果:

1
2
3
4
5
Request: DESCRIBE rtsp://192.168.18.18:8554/h264ESVideo RTSP/1.0\r\n
CSeq: 3\r\n
User-Agent: LibVLC/2.1.3 (LIVE555 Streaming Media v2014.01.21)\r\n
Accept: application/sdp\r\n
\r\n

服务器回应包:

1
2
3
4
5
6
7
Response: RTSP/1.0 200 OK\r\n
CSeq: 3\r\n
Date: Sun, Jan 03 2016 11:57:35 GMT\r\n
Content-Base: rtsp://192.168.18.18:8554/h264ESVideo/\r\n
Content-type: application/sdp
Content-length: 515
\r\n

回应同时有SDP(会话描述协议),SDP内容较多较复杂,不在本文详述。抓包结果如下图所示:
SDP包

1.3、SETUP

SETUP命令用于确定转输机制,建立RTSP会话。客户端发的包如下:

1
2
3
4
5
Request: SETUP rtsp://192.168.18.18:8554/h264ESVideo/track1 RTSP/1.0\r\n
CSeq: 4\r\n
User-Agent: LibVLC/2.1.3 (LIVE555 Streaming Media v2014.01.21)\r\n
Transport: RTP/AVP/TCP;unicast;client_port=64328-64329
\r\n

服务器回应:

1
2
3
4
5
6
Response: RTSP/1.0 200 OK\r\n
CSeq: 4\r\n
Date: Sun, Jan 03 2016 11:57:35 GMT\r\n
Transport: RTP/AVP/TCP;unicast;destination=192.168.18.1;source=192.168.18.18;client_port=64328-64329;server_port=6970-6971
Session: 735B75BD;timeout=65
\r\n

Transport的值表示传输协议,如为“Transport: RTP/AVP/TCP”表示RTP使用TCP来传输。如果是 “RTP/AVP/UDP”则表示使用UDP传输。后面接着的值表示单播(unicast)、多播(multicast)。以及端口号范围。回应包除了上述内容,还有IP地址。

1.4、PLAY

PLAY即开始播放视频,客户端发包:

1
2
3
4
5
6
Request: PLAY rtsp://192.168.18.18:8554/h264ESVideo/ RTSP/1.0\r\n
CSeq: 5\r\n
User-Agent: LibVLC/2.1.3 (LIVE555 Streaming Media v2014.01.21)\r\n
Session: 735B75BD
Range: npt=0.000-\r\n
\r\n

服务器回应:

1
2
3
4
5
6
7
Response: RTSP/1.0 200 OK\r\n
CSeq: 5\r\n
Date: Sun, Jan 03 2016 11:57:35 GMT\r\n
Range: npt=0.000-\r\n
Session: 735B75BD
RTP-Info: url=rtsp://192.168.18.18:8554/h264ESVideo/track1;seq=33054;rtptime=859736117\r\n
\r\n

1.5、GET_PARAMETER

获取参数命令,客户端发包:

1
2
3
4
5
Request: GET_PARAMETER rtsp://192.168.18.18:8554/h264ESVideo/ RTSP/1.0\r\n
CSeq: 6\r\n
User-Agent: LibVLC/2.1.3 (LIVE555 Streaming Media v2014.01.21)\r\n
Session: 735B75BD
\r\n

服务器回应:

1
2
3
4
5
6
Response: RTSP/1.0 200 OK\r\n
CSeq: 6\r\n
Date: Sun, Jan 03 2016 11:57:35 GMT\r\n
Session: 735B75BD
Content-length: 10
\r\n

1.6、TEARDOWN

关闭播放,VLC发TEARDOWN命令:

1
2
3
4
5
Request: TEARDOWN rtsp://192.168.18.18:8554/h264ESVideo/ RTSP/1.0\r\n
CSeq: 7\r\n
User-Agent: LibVLC/2.1.3 (LIVE555 Streaming Media v2014.01.21)\r\n
Session: 735B75BD
\r\n

服务器回应:

1
2
3
4
Response: RTSP/1.0 200 OK\r\n
CSeq: 7\r\n
Date: Sun, Jan 03 2016 11:57:38 GMT\r\n
\r\n

RTSP还有很多其它的命令,可以参考其它资料,本文不涉及。

二、RTP包

RTP包基于UDP或TCP传输。VLC发PLAY命令就会播放视频,接着就是连续不断的RTP包。下图是一个RTP协议截图:
RTP包

三、RTCP包

RTP包基于UDP传输。会话参与者会定期发送RTCP包。RTCP包有不同的类型:
RTCP包
Goodbye包
Goodbye包

李迟 2016.1.3 晚