价格

项目总览

相关源文件

本页面内容基于以下源文件生成:

Secure Reliable Transport(SRT)是一个开源传输协议项目,专注于超低延迟(亚秒级)的音视频流传输以及通用批量数据传输。该项目由 Haivision Systems Inc. 主导开发,以 Mozilla Public License v2.0 开源,代码托管于 GitHub,同时发布了 IETF Internet Draft 规范文档,并拥有持续增长的 SRT 联盟社区生态(README.md:24-26)。

SRT 协议名称本身即概括了其三大核心能力:Secure(安全加密)、Reliable(可靠恢复)、Transport(动态自适应传输)。该协议主要应用于视频流工作流的贡献和分发端点,确保在任何网络条件下都能以最低延迟交付最佳质量的视频内容(README.md:30-34)。

核心特性与技术优势

SRT 协议围绕低延迟流媒体传输场景,提供了一系列关键特性,使其在不可靠网络环境中仍能保持高质量的传输表现。

恒定端到端延迟与网络自适应

在直播流配置中,SRT 协议维持恒定的端到端延迟。这使得直播流的信号特征能够在接收端精确重建,从而减少缓冲需求。当数据包从源端传输到目的端时,SRT 检测并适应两端之间的实时网络状况,帮助补偿因拥塞网络上的噪声导致的抖动和带宽波动(README.md:36-37)。

AES 加密与错误恢复机制

SRT 实现了 AES 加密以保护媒体流的有效载荷,并提供多种错误恢复机制来最小化 Internet 连接中典型的丢包问题。其中,自动重传请求(ARQ)是主要方法——当接收方检测到丢包时,会向发送方发送警报请求重传丢失的数据包。此外,协议还支持前向纠错(FEC)和连接绑定功能,后者可提供无缝流保护和无中断故障切换(README.md:38)。

核心特性概览

特性说明
高质量可靠性无论网络多不可靠,都能从严重的丢包和抖动中恢复,确保视频流的完整性和质量(README.md:48-56
低延迟传输流错误纠正可配置以适应用户部署条件,延迟显著低于 TCP/IP,同时提供 UDP 传输速度(README.md:58-66
内容格式无关SRT 在网络传输层运行,作为内容的包装器,可传输任何视频格式、编解码器、分辨率或帧率(README.md:68-76
防火墙穿透握手过程支持出站连接,无需在防火墙中开放永久外部端口,维护企业 LAN 安全策略(README.md:78-86
AES 加密使用 128/192/256 位 AES 加密,确保内容从贡献到分发的端到端保护(README.md:88-95

技术架构与版本信息

核心实现架构

SRT 的核心实现基于 C/C++,以跨平台库的形式提供。核心头文件 srtcore/srt.h 定义了整个公共 API 的基础结构,包含平台系统头文件、字符串处理库以及日志 API 的引用(srtcore/srt.h:35-42)。

该头文件通过条件编译宏处理不同平台的导出符号:在 Windows 平台上使用 __declspec(dllexport)__declspec(dllimport),在其他平台使用 __attribute__((visibility("default"))),确保库在动态链接和静态链接场景下均能正确导出符号(srtcore/srt.h:19-33)。

版本特性与编译支持

项目定义了版本特性宏 SRT_VERSION_FEAT_HSv5(值为 0x010300),用于特性测试,可与 SRTO_MINVERSION 选项配合使用。同时,通过 C++ 标准版本检测自动判断是否启用 C++17 支持(SRT_HAVE_CXX17),体现了项目对现代 C++ 标准的兼容性(srtcore/srt.h:52-60)。

技术栈概览

技术维度详情
核心语言C/C++(支持 C++17)
许可证Mozilla Public License v2.0(srtcore/srt.h:5-7
构建系统CMake
支持平台Linux(Ubuntu/CentOS)、Windows、macOS、iOS、Android
包管理器Ubuntu、Fedora、Debian、Homebrew、Vcpkg、ConanCenter(README.md:16-21
协议规范IETF Internet Draft

系统架构与模块关系

以下架构图展示了 SRT 项目的核心模块层次与依赖关系:

正在加载图表渲染器...

架构图说明要点:

  1. 应用层:外部应用程序通过包含 srt.h 头文件调用 SRT API,该头文件是整个公共接口的入口点(srtcore/srt.h:16-17)。
  2. 公共 API 层srt.h 负责处理跨平台符号导出(SRT_API 宏),并引入日志 API 接口供上层使用(srtcore/srt.h:19-42)。
  3. 核心协议层:传输引擎基于 UDP 构建,集成加密、错误恢复和拥塞控制三大子系统,分别对应 SRT 名称中的 Secure、Reliable、Transport 特性(README.md:30-34)。
  4. 平台抽象层:通过 platform_sys.h 屏蔽不同操作系统的底层差异,version.h 管理版本信息与特性宏定义(srtcore/srt.h:35-37)。
  5. 依赖方向:所有依赖严格自上而下,上层模块不直接依赖平台特定实现,保证了跨平台可移植性。

关键数据流与传输时序

以下时序图展示了 SRT 协议在典型直播场景中的核心数据流:

正在加载图表渲染器...

时序图说明要点:

  1. 加密流程:发送端应用提交媒体数据后,SRT 发送栈首先对载荷执行 AES 加密,然后通过 UDP 发送,确保端到端内容安全(README.md:38)。
  2. ARQ 重传机制:当接收栈检测到丢包时,发送 NAK(Negative Acknowledgment)请求重传,发送端响应并重传丢失数据包,这是 SRT 的主要错误恢复方法(README.md:38)。
  3. 恒定延迟保障:接收栈在解密后执行恒定延迟排序,确保端到端延迟保持稳定,从而重建发送端的信号特征(README.md:36-37)。
  4. 网络自适应:整个传输过程中,SRT 持续检测并适应两端之间的实时网络状况,动态调整以补偿抖动和带宽波动(README.md:36-37)。

文档体系与项目结构

文档组织架构

SRT 项目维护了一套完整的分层文档体系,涵盖 API 参考、构建指南、开发规范和特性说明四大类别(docs/README.md:1-35)。

API 文档层:包含 SRT C API 详细描述、API 函数参考、Socket 选项说明、拒绝码列表、统计信息使用指南以及缓冲区配置指南,为开发者提供完整的接口参考(docs/README.md:5-13)。

构建指南层:覆盖 CMake 构建系统配置说明,以及 Linux(Ubuntu/CentOS)、Windows、macOS、iOS、Android 五大平台的详细构建步骤,并汇总了支持 SRT 库的各包管理器信息(docs/README.md:15-26)。

开发文档层:提供开发者指南(开发环境设置、项目结构、编码规范、Issue 与 PR 提交流程)、底层技术信息(互斥锁机制)以及问题报告与调试日志收集指南(docs/README.md:28-35)。

核心目录结构

srt/
├── srtcore/           # 核心协议实现
│   ├── srt.h          # 公共 API 头文件(入口点)
│   ├── version.h      # 版本定义
│   └── logging_api.h  # 日志 API 接口
├── docs/              # 文档体系
│   ├── API/           # API 参考文档
│   ├── build/         # 多平台构建指南
│   ├── dev/           # 开发者文档
│   └── features/      # 特性说明(FEC、Bonding 等)
├── CMakeLists.txt     # CMake 构建配置
└── LICENSE            # MPLv2.0 许可证

核心模块深度解析

模块一:公共 API 接口模块

职责边界:该模块负责定义 SRT 库的公共编程接口,处理跨平台符号导出,不涉及具体协议实现逻辑。

入口与关键 API:核心入口为 srtcore/srt.h 头文件,通过 SRT_API 宏控制函数符号的导出行为。在 Windows 动态链接场景下使用 __declspec(dllexport),静态链接时不添加额外修饰;非 Windows 平台使用 GCC/Clang 可见性属性(srtcore/srt.h:19-33)。

关键数据结构:模块定义了版本特性常量 SRT_VERSION_FEAT_HSv50x010300),用于握手协议 v5 特性检测;以及 SRT_HAVE_CXX17 编译期常量,标识当前编译环境是否支持 C++17 特性(srtcore/srt.h:54-60)。

错误处理与边界条件:通过条件编译宏 _WIN32SRT_DYNAMICSRT_EXPORTS 的组合处理四种编译场景(Windows 动态导出、Windows 动态导入、Windows 静态、非 Windows),确保在任何编译配置下符号可见性正确(srtcore/srt.h:20-32)。

模块二:传输引擎模块

职责边界:基于 UDP 协议实现数据包的发送与接收,负责载荷加密、错误恢复和网络自适应,不负责上层媒体编解码。

关键调用链:发送路径为"应用提交数据 → AES 加密载荷 → UDP 发送";接收路径为"UDP 接收 → 丢包检测 → NAK 重传请求 → 恒定延迟排序 → AES 解密 → 交付应用"(README.md:36-38)。

关键数据结构:传输层处理的数据包包含加密后的载荷,接收端维护重排序缓冲区以实现恒定延迟输出。NAK 控制消息携带丢失数据包的序列号信息用于请求重传。

错误处理与边界条件:ARQ 作为主要错误恢复机制处理丢包,FEC 作为补充手段在丢包率较高时提供前向纠错能力。连接绑定功能在主链路故障时提供无中断故障切换(README.md:38)。

模块三:安全加密模块

职责边界:对媒体流载荷执行 AES 加密/解密,确保端到端内容安全,不负责连接认证和密钥协商的完整流程。

关键 API 与配置:支持 AES-128、AES-192、AES-256 三种密钥长度,通过 Socket 选项进行配置。加密作用于数据包载荷层面,协议头部信息保持明文以支持网络中间设备的正常处理(README.md:38)。

关键调用链:发送端在数据包提交到 UDP 层之前执行加密;接收端在重排序完成后、交付应用之前执行解密。加密与解密操作嵌入在传输引擎的发送/接收路径中。

模块四:平台抽象与版本管理模块

职责边界:屏蔽不同操作系统的底层差异,管理版本信息与特性标志,不包含业务逻辑。

入口与关键 API:通过 platform_sys.h 提供操作系统相关的类型定义和系统调用抽象;通过 version.h 管理版本号。srt.h 同时引入这两个头文件作为基础依赖(srtcore/srt.h:35-37)。

关键数据结构SRT_VERSION_FEAT_HSv5 宏定义了握手协议 v5 的最小版本要求值 0x010300,可与 SRTO_MINVERSION Socket 选项配合使用,用于在运行时强制最低协议版本要求(srtcore/srt.h:54)。

错误处理与边界条件:C++ 标准版本检测通过 __cplusplus 预处理器宏判断是否大于 201406(C++17 标准值),自动设置 SRT_HAVE_CXX17 标志。对于旧版编译器(不支持 C++17),该标志设为 0,确保向后兼容(srtcore/srt.h:56-60)。

适用场景

SRT 协议的设计目标使其适用于以下典型场景:

  • 直播贡献:从现场采集点到广播中心的低延迟视频传输,要求在不可靠网络(如公共 Internet)上保持高质量
  • 内容分发:从广播中心到边缘节点的视频流分发,需要端到端加密保护内容安全
  • 跨防火墙传输:企业网络间的视频流传输,利用 Rendezvous 模式避免开放永久外部端口
  • 远程制作:需要亚秒级延迟的远程制作工作流,对抖动和带宽波动有容忍需求
  • 通用数据传输:除音视频外,SRT 也支持通用批量数据的可靠传输(README.md:26

报告阅读路线图

以下图表展示了本技术分析报告各章节的关系与推荐阅读顺序:

正在加载图表渲染器...

阅读路线说明:

  1. 项目总览(当前页面)提供全局视角,建议首先阅读以建立整体认知
  2. 核心特性详解 深入分析各特性的实现机制与配置选项
  3. 架构设计分析 剖析模块间依赖关系与设计决策
  4. 数据流与调用链 追踪关键路径上的函数调用与数据变换
  5. API 设计与接口规范 详细说明公共 API 的使用方法与参数语义
  6. 构建与部署指南 覆盖多平台构建、包管理器集成与生产部署注意事项

项目核心能力量化

量化指标数值
支持加密密钥长度3 种(AES-128/192/256)
支持操作系统平台5 个(Linux、Windows、macOS、iOS、Android)(docs/README.md:20-24
支持包管理器6 个(Ubuntu、Fedora、Debian、Homebrew、Vcpkg、ConanCenter)(README.md:16-21
错误恢复机制2 种主要(ARQ、FEC)+ 连接绑定故障切换(README.md:38
API 文档类别6 类(API 参考、函数参考、Socket 选项、拒绝码、统计信息、配置指南)(docs/README.md:5-13
开源许可证MPLv2.0(srtcore/srt.h:5-7
目标延迟亚秒级(README.md:26