3. RTSP协议详解

RTSP(Real Time Streaming Protocol,实时流传输协议)是无人机视频链路中负责“控制”的核心协议。它并不直接搬运视频帧,而是像一位导演:通过 DESCRIBE 获取媒体信息,通过 SETUP 建立传输通道,通过 PLAY 启动推流,通过 TEARDOWN 结束会话。真正承载 H.264/H.265 码流的,是 RTSP 之下的 RTP,而 RTCP 则负责反馈传输质量。理解 RTSP 的请求方法、会话机制以及它与 RTP/RTCP 的分工,是排查无人机图传“连不上、卡顿、花屏、延迟高”等问题的前提。

一、RTSP 的定位与协议特征

RTSP 是一个应用层协议,默认使用 TCP 554 端口,语法风格接近 HTTP,但语义完全不同。HTTP 是“无状态请求—响应”,而 RTSP 是“有状态会话”:一次 SETUP 之后,服务端会分配一个 Session ID,后续的 PLAY、PAUSE、TEARDOWN 都必须携带该 ID,否则服务端无法知道你在控制哪一路流。

RTSP 的另一大特征是“带外控制”。控制命令走 RTSP 通道,媒体数据走 RTP 通道,两者可以分别使用不同端口甚至不同传输方式。这种分离设计让 RTSP 既能控制实时流,也能控制点播文件,还能在会话中途切换传输参数。

RTSP 只负责“说什么、什么时候开始、什么时候停”,不负责“怎么把每一帧送到”。把控制面和数据面分开理解,是掌握 RTSP 的关键。

二、请求与响应方法

RTSP 的方法决定了客户端能对服务端做什么。无人机图传场景中最常用的是 OPTIONS、DESCRIBE、SETUP、PLAY、TEARDOWN,PAUSE 和 GET_PARAMETER 则用于暂停与保活。

方法方向作用无人机场景示例
OPTIONS客户端→服务端查询服务端支持的方法确认飞机是否支持 PLAY、TEARDOWN
DESCRIBE客户端→服务端获取 SDP 媒体描述拿到 H.264 的 payload type、分辨率、时钟频率
SETUP客户端→服务端建立传输通道并分配 Session指定 RTP over TCP 或 UDP,获取 Session ID
PLAY客户端→服务端启动或恢复流传输开始接收实时视频
PAUSE客户端→服务端暂停流但保留会话临时停止拉流,稍后继续
TEARDOWN客户端→服务端结束会话并释放资源关闭图传,释放飞机侧编码资源

响应使用状态码表达结果:200 OK 表示成功,401 Unauthorized 表示需要鉴权,404 Not Found 表示流地址不存在,454 Session Not Found 表示 Session ID 已失效,503 Service Unavailable 表示服务端资源不足。无人机图传中,454 和 503 是高频故障码,前者通常因为会话超时,后者常见于飞机端并发拉流数超限。

三、会话控制与保活

RTSP 会话由服务端维护,Session ID 通过 SETUP 响应头返回,形如 Session: 12345678;timeout=60。timeout 表示会话空闲超时时间,单位秒。如果客户端在超时时间内没有发送任何 RTSP 请求,服务端会回收会话,后续 PLAY 就会返回 454。

保活有两种常见方式:一是周期性发送 OPTIONS 或 GET_PARAMETER 请求;二是在 PLAY 请求中携带 Range: npt=0- 维持播放。无人机链路中,建议保活周期小于 timeout 的 1/2,例如 timeout=60 时每 25 秒发一次 OPTIONS。

OPTIONS rtsp://192.168.1.10:554/live RTSP/1.0
CSeq: 2
Session: 12345678
User-Agent: DroneViewer/1.0

RTSP/1.0 200 OK
CSeq: 2
Public: OPTIONS, DESCRIBE, SETUP, PLAY, PAUSE, TEARDOWN

四、RTSP 与 RTP/RTCP 的关系

三者是“控制—承载—反馈”的协作关系。RTSP 建立和控制会话,RTP 承载音视频载荷,RTCP 周期性发送发送者报告(SR)和接收者报告(RR),用于统计丢包率、抖动和往返时延。无人机图传中,RTCP 的丢包统计是判断链路质量的重要依据。

传输方式上,RTP 可以走 UDP,也可以走 TCP。UDP 延迟低但易受丢包影响;TCP 可靠但可能因重传引入延迟。低延迟无人机图传通常优先 UDP,并在应用层做丢包隐藏或前向纠错。

RTSP 控制面 / RTP 数据面 / RTCP 反馈面 协作与典型交互 无人机客户端 拉流 / 解码 / 显示 无人机图传服务端 编码 / 推流 / 会话管理 RTSP 控制通道(TCP 554) RTP 媒体通道(UDP / TCP) RTCP 反馈通道(SR / RR / 丢包统计) 典型交互流程 客户端 服务端 OPTIONS → 查询支持方法 DESCRIBE → 获取 SDP SETUP → 建立通道,返回 Session ID PLAY → 启动 RTP 流 RTP 视频帧 + RTCP 反馈

五、典型交互流程与实战案例

一次完整的无人机拉流通常按以下顺序进行:客户端先发 OPTIONS 探测能力,再发 DESCRIBE 获取 SDP,然后发 SETUP 建立 RTP 通道并拿到 Session ID,最后发 PLAY 开始收流。结束时发送 TEARDOWN 释放会话。

DESCRIBE rtsp://192.168.1.10:554/live RTSP/1.0
CSeq: 1
Accept: application/sdp

RTSP/1.0 200 OK
CSeq: 1
Content-Type: application/sdp
Content-Length: 218

v=0
o=- 0 0 IN IP4 192.168.1.10
s=Drone Live
t=0 0
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1

某次巡检任务中,地面站拉流后画面每隔 30 秒卡住一次,日志显示 454 Session Not Found。排查发现客户端只在 PLAY 时携带 Session ID,中间没有保活,而飞机端 timeout 设置为 30 秒。将保活周期改为 10 秒后问题消失。这说明会话控制不是“一次 SETUP 就永久有效”,而是需要持续维护。

常见误区:把 RTSP 当成视频传输协议。RTSP 本身不传视频帧,视频帧由 RTP 承载。排查花屏、丢帧时,应优先看 RTP 序列号和 RTCP 丢包统计,而不是反复重发 PLAY。

六、排障要点复盘

  • 连不上:检查 554 端口、URL 路径、鉴权信息,先用 OPTIONS 验证服务端可达。
  • 无画面:检查 DESCRIBE 返回的 SDP 是否包含正确的 payload type 和编码格式。
  • 中途断流:检查 Session timeout 与保活周期,关注 454 状态码。
  • 延迟高:检查 RTP 走 UDP 还是 TCP,TCP 重传会显著增加延迟。
  • 花屏:检查 RTP 丢包与乱序,结合 RTCP RR 中的丢包率定位链路问题。

掌握 RTSP 的方法语义、会话生命周期以及它与 RTP/RTCP 的分工,就能在无人机图传调试中快速判断问题出在控制面还是数据面,从而把排查范围从“整条链路”缩小到“某一个协议层”。