SRT 协议 
安全可靠传输协议(Secure Reliable Transport,SRT)是一种能够在不可预测的网络环境中实现安全、可靠数据传输的传输协议。本文档描述了 Monibuca (m7s) 流媒体服务器中 SRT 协议的实现,重点介绍协议的架构、连接处理和媒体流传输功能。
架构概述 
Monibuca 中的 SRT 实现被构建为一个插件,支持通过 SRT 协议进行发布(推流)和播放(拉流)。该插件默认在 6000 端口注册标准 SRT 支持,并可以配置使用自定义端口。
核心组件 
SRT 插件由以下主要组件组成:
| 组件 | 描述 | 
|---|---|
| SRTPlugin | 主插件结构,包含配置和初始化逻辑 | 
| SRTServer | 处理入站连接的服务器实现 | 
| Receiver | 处理来自发布者的入站媒体数据 | 
| Sender | 管理发送给订阅者的出站媒体数据 | 
该插件通过 Monibuca 的插件系统注册,并实现了推流和拉流所需的必要接口。
SRT 协议流程 
连接建立 
当客户端连接到 SRT 服务器时,将按以下顺序进行:
- 建立 TCP 连接
 - 执行 SRT 握手
 - 处理流 ID 以确定连接类型(发布/订阅)
 - 开始媒体流传输
 
流 ID 格式 
SRT 实现使用特定的流 ID 格式来区分发布和订阅连接:
- 发布连接:
publish:/{streamPath} - 订阅连接:
subscribe:/{streamPath} 
流路径从流 ID 中提取,用于在 Monibuca 系统中创建相应的发布者或订阅者。
配置和初始化 
SRT 插件可以使用以下设置进行配置:
| 设置项 | 默认值 | 描述 | 
|---|---|---|
| ListenAddr | :6000 | 监听地址和端口 | 
| Passphrase | "" | 可选的加密密码 | 
初始化时,插件注册其功能和地址格式:
srt://{hostName}?streamid=publish:/{streamPath}       (端口 6000)
srt://{hostName}:{port}?streamid=publish:/{streamPath} (自定义端口)
srt://{hostName}?streamid=subscribe:/{streamPath}     (端口 6000)
srt://{hostName}:{port}?streamid=subscribe:/{streamPath} (自定义端口)连接处理 
发布者连接 
当发布者连接时:
- 使用配置的密码进行连接认证
 - 在 Monibuca 系统中创建新的发布者
 - 启动接收器任务处理入站媒体数据
 - 处理媒体数据并使其可用于其他插件
 
订阅者连接 
当订阅者连接时:
- 使用配置的密码进行连接认证
 - 在 Monibuca 系统中创建新的订阅者
 - 启动发送器任务处理出站媒体数据
 - 将媒体数据发送给客户端
 
与 Monibuca 核心集成 
SRT 插件通过以下机制与 Monibuca 核心系统集成:
- 通过 
m7s.InstallPlugin进行插件注册 - 使用任务系统处理连接
 - 使用发布者/订阅者接口处理媒体
 - 与核心流媒体系统集成
 
安全特性 
SRT 实现包含以下安全特性:
- 可选的基于密码的加密
 - 流 ID 验证
 - 连接类型验证(发布/订阅)
 
总结 
Monibuca 中的 SRT 协议实现为安全流媒体应用提供了强大的基础。它支持:
- 具有加密功能的完整 SRT 协议
 - 发布和播放操作
 - 自定义端口配置
 - 带密码保护的安全连接
 - 与其他 Monibuca 插件的无缝集成
 
该实现使 Monibuca 能够与各种 SRT 客户端进行交互,包括媒体编码器、播放器和其他流媒体服务器。