RTSP 协议 
本文档记录了 Monibuca 中实时流协议 (RTSP) 的实现。它涵盖了服务器和客户端组件、媒体传输机制以及与核心平台的集成。
1. 概述 
RTSP(实时流协议)是一种用于控制流媒体服务器的网络协议。Monibuca 的 RTSP 实现支持发布(从客户端接收流)和播放(向客户端发送流)操作,并支持 TCP 和 UDP 传输模式。
2. 架构 
RTSP 插件由几个关键组件组成,这些组件与外部 RTSP 客户端/服务器和 Monibuca 核心系统进行交互。
2.1 RTSP 协议组件 
RTSP 实现包括:
- 连接处理
 - 媒体传输
 - 会话管理
 - 协议状态机
 
2.2 RTSP 协议流程 
协议流程遵循标准 RTSP 规范,支持:
- 会话建立
 - 媒体描述
 - 传输设置
 - 播放控制
 - 会话终止
 
3. RTSP 服务器实现 
RTSP 服务器处理传入连接并根据协议规范处理 RTSP 方法。
3.1 连接处理 
NetConnection 类构成了 RTSP 通信的基础:
- 默认 RTSP 端口:554(RTSPS 端口:443)
 - 通过 RTSPS 的安全连接(基于 TLS 的 RTSP)
 - 10 秒默认超时处理
 - 带有自动保活 OPTIONS 消息的会话管理
 - 支持 RTP 和 RTCP 数据包处理
 
3.2 RTSP 方法处理 
RTSPServer 类处理标准 RTSP 方法:
| 方法 | 描述 | 实现 | 
|---|---|---|
| OPTIONS | 查询可用方法 | 返回支持的方法列表 | 
| DESCRIBE | 获取媒体信息 | 从可用轨道生成 SDP | 
| ANNOUNCE | 接收媒体信息 | 解析 SDP 以设置发布者 | 
| SETUP | 建立传输 | 为媒体配置 TCP 或 UDP 传输 | 
| PLAY | 开始播放 | 启动向客户端的媒体流传输 | 
| RECORD | 开始录制 | 开始从客户端接收媒体 | 
| TEARDOWN | 结束会话 | 终止 RTSP 会话 | 
3.3 媒体传输模式 
RTSP 实现支持两种主要的传输方法:
TCP(交织)传输 
媒体数据通过用于 RTSP 信令的同一 TCP 连接发送。RTP 数据包以 "$" 字符开头,后跟通道 ID 和长度。
TCP 模式下的 RTP 数据包格式示例:
$<channel><length_high><length_low><RTP payload...>UDP 传输 
媒体数据通过单独的 UDP 连接发送,RTP 用于媒体,RTCP 用于控制信息。功能包括:
- 动态端口分配
 - UDP 失败时自动回退到 TCP
 - RTP 和 RTCP 的单独连接
 - IPv4 和 IPv6 支持
 
4. 媒体处理 
4.1 发送器实现 
Sender 类处理向 RTSP 客户端的媒体流传输:
- 连接到 Monibuca 订阅系统
 - 将内部格式转换为 RTP 数据包
 - 通过 TCP 或 UDP 发送媒体
 - 管理 RTCP 以获取流统计信息
 
4.2 接收器实现 
Receiver 类处理来自 RTSP 客户端的媒体:
- 接收来自客户端的 RTP 数据包
 - 处理和分组数据包为帧
 - 将帧写入 Monibuca 发布系统
 - 处理时间戳校正和同步
 
5. 客户端实现 
5.1 拉流模式 
拉流模式用于从外部 RTSP 服务器接收流:
- 连接到远程服务器
 - 发送 OPTIONS 检查服务器能力
 - 发送 DESCRIBE 获取流信息
 - 为每个媒体轨道发送 SETUP
 - 发送 PLAY 开始接收媒体
 - 处理传入的 RTP 数据包
 
5.2 推流模式 
推流模式用于向外部 RTSP 服务器发送流:
- 连接到远程服务器
 - 发送 OPTIONS 检查服务器能力
 - 发送带有流信息的 ANNOUNCE
 - 为每个媒体轨道发送 SETUP
 - 发送 RECORD 开始发送媒体
 - 为每个媒体帧发送 RTP 数据包
 
6. 代理支持 
6.1 拉流代理 
RTSPPullProxy 维护与外部 RTSP 服务器的连接:
- 失败时自动重连
 - 定期发送 OPTIONS 消息维持连接
 - RTT 测量用于监控
 - 关闭时资源清理
 
6.2 推流代理 
RTSPPushProxy 管理与外部 RTSP 服务器的连接:
- 连接状态管理
 - 故障检测和重连
 - 适当的资源清理
 - 支持 TCP 和 UDP 传输
 
7. 高级功能 
7.1 SDP 处理 
会话描述协议 (SDP) 功能:
- 为输出流生成 SDP
 - 解析输入流的 SDP
 - 编解码器参数提取和转换
 
7.2 RTP/RTCP 实现 
实现处理:
- RTP 数据包构建和解析
 - RTCP 发送方报告生成
 - RTCP 接收方报告处理
 - 时间戳同步
 - 音频和视频之间的媒体同步
 
8. 与外部系统集成 
RTSP 实现设计用于与以下系统互操作:
- IP 摄像头
 - 监控系统
 - 媒体服务器
 - 媒体播放器(如 VLC、FFmpeg、GStreamer)
 - 硬件编码器和解码器