Skip to content

SRT 协议

安全可靠传输协议(Secure Reliable Transport,SRT)是一种能够在不可预测的网络环境中实现安全、可靠数据传输的传输协议。本文档描述了 Monibuca (m7s) 流媒体服务器中 SRT 协议的实现,重点介绍协议的架构、连接处理和媒体流传输功能。

架构概述

Monibuca 中的 SRT 实现被构建为一个插件,支持通过 SRT 协议进行发布(推流)和播放(拉流)。该插件默认在 6000 端口注册标准 SRT 支持,并可以配置使用自定义端口。

核心组件

SRT 插件由以下主要组件组成:

组件描述
SRTPlugin主插件结构,包含配置和初始化逻辑
SRTServer处理入站连接的服务器实现
Receiver处理来自发布者的入站媒体数据
Sender管理发送给订阅者的出站媒体数据

该插件通过 Monibuca 的插件系统注册,并实现了推流和拉流所需的必要接口。

SRT 协议流程

连接建立

当客户端连接到 SRT 服务器时,将按以下顺序进行:

  1. 建立 TCP 连接
  2. 执行 SRT 握手
  3. 处理流 ID 以确定连接类型(发布/订阅)
  4. 开始媒体流传输

流 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} (自定义端口)

连接处理

发布者连接

当发布者连接时:

  1. 使用配置的密码进行连接认证
  2. 在 Monibuca 系统中创建新的发布者
  3. 启动接收器任务处理入站媒体数据
  4. 处理媒体数据并使其可用于其他插件

订阅者连接

当订阅者连接时:

  1. 使用配置的密码进行连接认证
  2. 在 Monibuca 系统中创建新的订阅者
  3. 启动发送器任务处理出站媒体数据
  4. 将媒体数据发送给客户端

与 Monibuca 核心集成

SRT 插件通过以下机制与 Monibuca 核心系统集成:

  1. 通过 m7s.InstallPlugin 进行插件注册
  2. 使用任务系统处理连接
  3. 使用发布者/订阅者接口处理媒体
  4. 与核心流媒体系统集成

安全特性

SRT 实现包含以下安全特性:

  1. 可选的基于密码的加密
  2. 流 ID 验证
  3. 连接类型验证(发布/订阅)

总结

Monibuca 中的 SRT 协议实现为安全流媒体应用提供了强大的基础。它支持:

  1. 具有加密功能的完整 SRT 协议
  2. 发布和播放操作
  3. 自定义端口配置
  4. 带密码保护的安全连接
  5. 与其他 Monibuca 插件的无缝集成

该实现使 Monibuca 能够与各种 SRT 客户端进行交互,包括媒体编码器、播放器和其他流媒体服务器。

基于 AGPL 许可发布