假设我们有一个视频监控系统,其中有一个 IP 摄像头(流媒体服务器)和一个客户端播放器(例如 VLC 播放器)。我们使用 RTSP 协议来控制流媒体的播放过程,客户端通过 RTSP 命令来请求视频流并进行控制,而视频数据通过 RTP 协议来传输。
流量示例场景:
-
客户端发送 SETUP 请求:
- 客户端首先发送一个 SETUP 请求,以建立与流媒体服务器的连接。
- 流量示例(客户端 -> 服务器):
SETUP rtsp://example.com/stream/1 RTSP/1.0 CSeq: 1 Transport: RTP/UDP;unicast;client_port=8000-8001
这里,客户端请求通过 RTP/UDP 协议传输流数据,指定了两个端口(8000 和 8001)用于接收 RTP 数据包。
- 服务器会回复客户端确认连接:
RTSP/1.0 200 OK CSeq: 1 Transport: RTP/UDP;unicast;server_port=9000-9001
- 服务器为客户端分配了端口(9000 和 9001)用于流数据的传输。
-
客户端发送 PLAY 请求:
- 一旦 SETUP 完成,客户端发送 PLAY 命令来开始播放流媒体。
- 流量示例(客户端 -> 服务器):
PLAY rtsp://example.com/stream/1 RTSP/1.0 CSeq: 2 Range: npt=0.000-
- 该请求表示客户端希望从视频流的第 0 秒开始播放。
-
服务器开始发送 RTP 数据:
- 当服务器收到 PLAY 请求后,它开始通过指定的端口(9000 和 9001)发送 RTP 数据包。这些 RTP 数据包包含了实际的视频内容(例如,视频帧)。
- 流量示例(服务器 -> 客户端,RTP 数据):
RTP packet (video frame data) --> Port 9000 (for video) RTP packet (audio frame data) --> Port 9001 (for audio)
- 在流的实际传输过程中,音视频数据通过 RTP 协议传输,而 RTSP 仅用于控制。
-
客户端发送 PAUSE 请求:
- 客户端可以随时发送 PAUSE 请求,暂停视频流的播放。
- 流量示例(客户端 -> 服务器):
PAUSE rtsp://example.com/stream/1 RTSP/1.0 CSeq: 3
- 服务器收到 PAUSE 请求后,停止通过 RTP 发送数据,视频播放被暂停。
-
客户端发送 TEARDOWN 请求:
- 当客户端希望停止整个流的传输时,发送 TEARDOWN 请求来断开与服务器的连接。
- 流量示例(客户端 -> 服务器):
TEARDOWN rtsp://example.com/stream/1 RTSP/1.0 CSeq: 4
- 服务器收到 TEARDOWN 请求后,终止流的传输并释放相关资源。
总结流量步骤:
- SETUP:客户端通过 RTSP 向服务器请求建立流的连接,并指定接收流的端口(如 8000-8001)。
- PLAY:客户端请求开始播放流媒体,服务器开始通过 RTP 协议向客户端发送视频数据包。
- RTP 数据传输:通过 RTP 协议,视频和音频数据流在客户端和服务器之间实时传输。
- PAUSE:客户端可以随时发送暂停命令,服务器停止传输数据,客户端暂停播放。
- TEARDOWN:客户端发送停止命令,服务器结束流传输并断开连接。
RTSP、RTP 流量分析的关键点:
- RTSP 协议 用于 控制 流的状态(如播放、暂停、停止),并且在通信中使用 文本命令 来传达这些指令。
- RTP 协议 用于实际的音视频数据传输,数据通过 UDP 包传输,而不是通过 RTSP 本身传输。
- RTSP 和 RTP 通过 端口协商(如客户端使用端口 8000,服务器使用端口 9000)来保证控制和数据流分别通过不同的通道进行。
流量角度的关键总结:
- RTSP 本身控制的是流的播放过程(如开始、暂停、停止),而实际的视频数据通过 RTP 协议传输。
- 客户端和服务器之间的通信通过 RTSP 协议进行命令的传递(例如
SETUP
,PLAY
,PAUSE
),而音视频流的数据通过 RTP 协议传输。 - 在整个过程中,RTSP 协议的流量较小,主要是用于控制和配置,而 RTP 协议传输的是实际的音视频数据流。