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 的方法决定了客户端能对服务端做什么。无人机图传场景中最常用的是 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,并在应用层做丢包隐藏或前向纠错。
五、典型交互流程与实战案例
一次完整的无人机拉流通常按以下顺序进行:客户端先发 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 就永久有效”,而是需要持续维护。
六、排障要点复盘
- 连不上:检查 554 端口、URL 路径、鉴权信息,先用 OPTIONS 验证服务端可达。
- 无画面:检查 DESCRIBE 返回的 SDP 是否包含正确的 payload type 和编码格式。
- 中途断流:检查 Session timeout 与保活周期,关注 454 状态码。
- 延迟高:检查 RTP 走 UDP 还是 TCP,TCP 重传会显著增加延迟。
- 花屏:检查 RTP 丢包与乱序,结合 RTCP RR 中的丢包率定位链路问题。
掌握 RTSP 的方法语义、会话生命周期以及它与 RTP/RTCP 的分工,就能在无人机图传调试中快速判断问题出在控制面还是数据面,从而把排查范围从“整条链路”缩小到“某一个协议层”。