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 客户端进行交互,包括媒体编码器、播放器和其他流媒体服务器。