RTSP(Real Time Streaming Protocol)協議全解析
一、協議概述
-
定位:應用層協議,用于控制流媒體服務器(播放、暫停、錄制),媒體傳輸由 RTP/RTCP 實現。
-
特點:
- 基于文本(類似 HTTP),支持 TCP/UDP(默認端口 554)。
- 無狀態協議,通過
Session
頭維護會話狀態。
-
核心命令:
方法 用途 OPTIONS
查詢服務器支持的方法 DESCRIBE
獲取媒體描述(SDP 格式) SETUP
建立傳輸通道(協商 RTP/RTCP 參數) PLAY/PAUSE
控制媒體播放 TEARDOWN
終止會話
二、核心命令詳解(含 TCP/UDP 場景對比)
1. DESCRIBE
用途:獲取媒體流的元數據(SDP 格式)。
交互示例:
UDP 場景:
C→S: DESCRIBE rtsp://example.com/live RTSP/1.0CSeq: 1Accept: application/sdpS→C: RTSP/1.0 200 OKContent-Type: application/sdpContent-Length: 320v=0o=- 0 0 IN IP4 192.168.1.1s=Live Streamm=video 5004 RTP/AVP 96 # UDP端口5004傳輸視頻a=rtpmap:96 H264/90000a=control:trackID=0a=rtcp:5005 # RTCP端口5005
TCP 場景:
S→C: RTSP/1.0 200 OKContent-Type: application/sdpContent-Length: 300v=0o=- 0 0 IN IP4 192.168.1.1s=Live Streamm=video 0 RTP/AVP/TCP 96 # TCP復用連接a=rtpmap:96 H264/90000a=control:trackID=0a=interleaved:0-1 # 通道0=RTP,通道1=RTCP
2. SETUP
用途:協商 RTP/RTCP 傳輸參數。
交互示例:
UDP 場景:
C→S: SETUP rtsp://example.com/live/trackID=0 RTSP/1.0CSeq: 2Transport: RTP/AVP/UDP;unicast;client_port=5000-5001S→C: RTSP/1.0 200 OKSession: 12345678Transport: RTP/AVP/UDP;unicast;client_port=5000-5001;server_port=6000-6001
TCP 場景:
C→S: SETUP rtsp://example.com/live/trackID=0 RTSP/1.0CSeq: 2Transport: RTP/AVP/TCP;unicast;interleaved=0-1S→C: RTSP/1.0 200 OKSession: 12345678Transport: RTP/AVP/TCP;unicast;interleaved=0-1
關鍵字段對比:
參數 | UDP 場景 | TCP 場景 |
---|---|---|
傳輸協議 | RTP/AVP/UDP | RTP/AVP/TCP |
端口協商 | client_port=5000-5001 | 無端口(通過 interleaved 復用) |
通道標識 | 無 | interleaved=0-1 |
3. PLAY/PAUSE/TEARDOWN
交互示例(通用格式):
C→S: PLAY rtsp://example.com/live RTSP/1.0CSeq: 3Session: 12345678Range: npt=0-S→C: RTSP/1.0 200 OKCSeq: 3RTP-Info: url=rtsp://example.com/live/trackID=0;seq=12345;rtptime=123456789
三、SDP(Session Description Protocol)詳解
SDP 是 RTSP 中描述媒體流參數的元數據協議,核心字段如下:
1. 全局字段
字段 | 格式 | 說明 |
---|---|---|
v= | v=0 | 協議版本(固定為0) |
o= | o=<username> <sess-id> <version> IN IP4 <IP> | 會話源信息(如 o=- 0 0 IN IP4 192.168.1.1 ) |
s= | s=<session name> | 會話名稱(如 s=Live Stream ) |
t= | t=0 0 | 會話時間(0表示無限制) |
2. 媒體行(m=
)
參數 | 說明 |
---|---|
<media> | 媒體類型(video /audio ) |
<port> | UDP 場景為端口號(如 5004 ),TCP 場景為 0 |
<proto> | 傳輸協議(RTP/AVP 表示 UDP,RTP/AVP/TCP 表示 TCP) |
<fmt> | 負載格式編號(對應 a=rtpmap 中的值) |
示例:
m=video 0 RTP/AVP/TCP 96 # TCP視頻流
m=audio 5004 RTP/AVP 97 # UDP音頻流(端口5004)
3. 擴展屬性(a=
)
屬性 | 說明 |
---|---|
rtpmap | 定義編解碼器(如 a=rtpmap:96 H264/90000 ) |
fmtp | 編解碼器參數(如 a=fmtp:96 profile-level-id=42001f ) |
control | 媒體流控制 URL(用于 SETUP 請求,如 a=control:trackID=0 ) |
interleaved | TCP 通道號(如 a=interleaved:0-1 ) |
rtcp | UDP 場景的 RTCP 端口(如 a=rtcp:5005 ) |
四、TCP/UDP 場景數據傳輸對比
1. UDP 場景
- RTP 包:通過獨立 UDP 端口發送。
[RTP Header][Payload] // 端口5004
- RTCP 包:通過相鄰奇數端口發送。
[RTCP Header][Payload] // 端口5005
2. TCP 場景
- 數據包格式:所有數據通過同一連接傳輸,帶通道標識前綴。
$<Channel><Length High><Length Low>[Payload]
- 示例:
$00 00 04 00 [RTP視頻數據] // 通道0$01 00 00 0C [RTCP視頻報告] // 通道1
五、協議選擇建議
特性 | UDP 場景 | TCP 場景 |
---|---|---|
實時性 | 高(低延遲,適合直播、會議) | 中(適合點播、弱網環境) |
可靠性 | 可能丟包(需 RTCP 反饋) | 高(依賴 TCP 重傳) |
防火墻穿透 | 需開放多個端口 | 僅需一個端口(默認554) |
開發復雜度 | 需處理丟包重傳邏輯 | 邏輯簡化(依賴 TCP 可靠性) |