RTSP协议全解析

发布于:2025-02-27 ⋅ 阅读:(9) ⋅ 点赞:(0)

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.0
     CSeq: 1
     Accept: application/sdp

S→C: RTSP/1.0 200 OK
     Content-Type: application/sdp
     Content-Length: 320

     v=0
     o=- 0 0 IN IP4 192.168.1.1
     s=Live Stream
     m=video 5004 RTP/AVP 96       # UDP端口5004传输视频
     a=rtpmap:96 H264/90000
     a=control:trackID=0
     a=rtcp:5005                   # RTCP端口5005

TCP 场景

S→C: RTSP/1.0 200 OK
     Content-Type: application/sdp
     Content-Length: 300

     v=0
     o=- 0 0 IN IP4 192.168.1.1
     s=Live Stream
     m=video 0 RTP/AVP/TCP 96      # TCP复用连接
     a=rtpmap:96 H264/90000
     a=control:trackID=0
     a=interleaved:0-1             # 通道0=RTP,通道1=RTCP

2. SETUP

用途:协商 RTP/RTCP 传输参数。
交互示例

UDP 场景

C→S: SETUP rtsp://example.com/live/trackID=0 RTSP/1.0
     CSeq: 2
     Transport: RTP/AVP/UDP;unicast;client_port=5000-5001

S→C: RTSP/1.0 200 OK
     Session: 12345678
     Transport: RTP/AVP/UDP;unicast;client_port=5000-5001;server_port=6000-6001

TCP 场景

C→S: SETUP rtsp://example.com/live/trackID=0 RTSP/1.0
     CSeq: 2
     Transport: RTP/AVP/TCP;unicast;interleaved=0-1

S→C: RTSP/1.0 200 OK
     Session: 12345678
     Transport: 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.0
     CSeq: 3
     Session: 12345678
     Range: npt=0-

S→C: RTSP/1.0 200 OK
     CSeq: 3
     RTP-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 可靠性)