价格

快速上手

相关源文件

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

SRT(Secure, Reliable, Transport)是一个开源的传输协议库,专注于在不可靠网络上提供安全、可靠的数据传输能力。本文档将引导开发者完成从环境准备到编写第一个 SRT 应用的全过程。

环境准备与依赖

编译工具链要求

SRT 项目使用 CMake 作为其构建系统。根据项目配置文件,CMake 的最低版本要求为 3.5CMakeLists.txt:10-26)。当前 SRT 版本定义为 1.5.5

项目使用 C 和 C++ 混合编译,需要支持 C++11 标准的编译器。对于 GCC 编译器,版本需不低于 4.7 才能启用 C++11 相关组件(如 srt-live-transmit 工具)(CMakeLists.txt:163-167)。

基础依赖模块

构建过程中,CMake 会自动检测并加载以下核心模块(CMakeLists.txt:32-36):

模块名称用途
FindPkgConfig检测系统安装的库(如 OpenSSL)
FindThreads检测系统线程库(如 pthreads)
CheckFunctionExists检测特定函数是否可用
CheckSymbolExists检测特定符号是否存在

可选依赖

  • OpenSSL:用于启用加密功能(默认启用)。可通过 USE_OPENSSL_PC 选项控制是否使用 pkg-config 查找 OpenSSL(CMakeLists.txt:191)。
  • pthreads / C++11 线程:用于计时和同步,可通过 ENABLE_STDCXX_SYNC 选项切换(CMakeLists.txt:190)。

操作系统支持

项目通过平台检测宏支持多种操作系统,包括 Linux、macOS/Darwin/iOS、BSD、Windows(MSVC/MinGW/Cygwin)、Android、OHOS 等(CMakeLists.txt:38-52)。

使用 CMake 构建

标准构建流程

以下是 Linux/macOS 环境下的标准 CMake 构建命令:

bash
1# 克隆仓库
2git clone https://github.com/Haivision/srt.git
3cd srt
4
5# 创建构建目录
6mkdir build && cd build
7
8# 配置(以 Release 模式为例)
9cmake ..
10
11# 编译
12make -j$(nproc)

构建类型控制

SRT 通过 ENABLE_DEBUG 变量控制构建类型(CMakeLists.txt:57-94):

ENABLE_DEBUG构建类型说明
OFF(默认)Release定义 NDEBUG
ON / 1Debug定义 _DEBUG 宏,启用 SRT_ASSERT()
2RelWithDebInfo带调试信息的优化构建

配置示例:

bash
1# Debug 构建
2cmake -DENABLE_DEBUG=1 ..
3
4# Release 构建(默认)
5cmake ..

常用构建选项

项目提供了丰富的编译选项供开发者按需定制(CMakeLists.txt:161-196)。以下是关键选项汇总:

选项默认值说明
ENABLE_SHAREDON构建动态库(libsrt.so / libsrt.dylib)
ENABLE_STATICON构建静态库(libsrt.a)
ENABLE_APPSON构建支持应用程序(如 srt-live-transmit)
ENABLE_CXX11ON启用 C++11 组件(编译器版本足够时)
ENABLE_LOGGINGON启用日志功能
ENABLE_HEAVY_LOGGING视构建类型启用详细调试日志
ENABLE_ENCRYPTIONON启用 SRT 加密
ENABLE_TESTINGOFF构建开发者测试应用
ENABLE_UNITTESTSOFF启用单元测试
ENABLE_BONDINGOFF启用绑定功能

配置示例——仅构建静态库并禁用应用:

bash
1cmake -DENABLE_SHARED=OFF -DENABLE_APPS=OFF ..

使用 configure 脚本快速配置

脚本概述

SRT 提供了一个基于 Tcl 的 configure 脚本,作为 CMake 的用户友好包装器。该脚本的设计目的是简化 CMake 配置过程,提供类似传统 autotools 的使用体验(configure:12-46)。

基本用法

bash
1# 查看帮助信息
2./configure --help
3
4# 使用默认配置
5./configure
6
7# 指定安装前缀
8./configure --prefix=/usr/local
9
10# 启用/禁用特定选项
11./configure --enable-logging --disable-shared

选项映射规则

configure 脚本会自动将命令行选项转换为 CMake 变量(configure:12-46):

  • --enable-c++11-DENABLE_CXX11=1
  • --cmake-special-option=ON-DCMAKE_SPECIAL_OPTION=ON
  • --disable-shared 等价于 --enable-shared=0

脚本还支持 --prefix 作为 --cmake-install-prefix 的别名(configure:55-56)。

查看可用选项

执行 ./configure --help 可列出所有已注册的显式选项及其说明(configure:105-122)。帮助信息中会提示:

  • 选项列表可能不完整,需参考 CMakeLists.txt 中的变量定义
  • 未注册的选项会按规则自动转换为 CMake -D 参数
  • 可使用 --disable-x 代替 --enable-x=0

编写第一个 SRT 应用

引入 SRT 头文件

在 C++ 应用中使用 SRT 库时,需要引入核心头文件。根据项目中 srt-live-transmit 应用的实践,安装后的库应使用 <srt/srt.h> 路径引入(apps/srt-live-transmit.cpp:76-81):

cpp
1// 使用已安装的 SRT 库
2#include <srt/srt.h>
3#include <srt/logging.h>

注意srt-live-transmit.cpp 中使用的是内部路径 <srt.h>,因为它是从源码树内部构建的。外部应用应使用 <srt/srt.h>apps/srt-live-transmit.cpp:76-79)。

基础应用框架

以下是一个最小化的 SRT 发送端应用框架,展示了必要的初始化和清理步骤:

cpp
1#include <srt/srt.h>
2#include <iostream>
3
4int main() {
5    // 1. 启动 SRT 库
6    srt_startup();
7
8    // 2. 创建 SRT 套接字
9    SRTSOCKET sock = srt_create_socket();
10    if (sock == SRT_ERROR) {
11        std::cerr << "srt_create_socket: " << srt_getlasterror_str() << std::endl;
12        srt_cleanup();
13        return 1;
14    }
15
16    // 3. 连接到远程 SRT 监听器
17    struct sockaddr_in sa;
18    sa.sin_family = AF_INET;
19    sa.sin_port = htons(9000);
20    inet_pton(AF_INET, "127.0.0.1", &sa.sin_addr);
21
22    int result = srt_connect(sock, (struct sockaddr*)&sa, sizeof(sa));
23    if (result == SRT_ERROR) {
24        std::cerr << "srt_connect: " << srt_getlasterror_str() << std::endl;
25        srt_close(sock);
26        srt_cleanup();
27        return 1;
28    }
29
30    // 4. 发送数据
31    const char* data = "Hello, SRT!";
32    srt_send(sock, data, strlen(data));
33
34    // 5. 清理资源
35    srt_close(sock);
36    srt_cleanup();
37    return 0;
38}

常用标准库依赖

开发 SRT 应用时,通常需要包含以下标准库头文件以支持网络操作、字符串处理和异常处理(apps/srt-live-transmit.cpp:51-66):

cpp
1#include <cstring>      // memset, strerror
2#include <iostream>     // std::cerr, std::cout
3#include &lt;string&gt;       // std::string
4#include <stdexcept>    // std::runtime_error
5#include <csignal>      // signal handling

编译链接

编译 SRT 应用时需链接 srt 库:

bash
1# 动态链接
2g++ -std=c++11 my_app.cpp -lsrt -o my_app
3
4# 静态链接
5g++ -std=c++11 my_app.cpp -static -lsrt -lssl -lcrypto -lpthread -o my_app

建议/常见做法(未在仓库证据中出现):具体链接依赖可能因平台和构建选项而异,建议使用 pkg-config --libs srt 获取准确的链接标志。

运行验证

验证库安装

构建完成后,可通过以下方式验证 SRT 库是否正确安装:

bash
1# 检查库文件是否存在(建议/常见做法,未在仓库证据中出现)
2ls -la /usr/local/lib/libsrt.*
3
4# 检查 pkg-config 信息(建议/常见做法,未在仓库证据中出现)
5pkg-config --modversion srt

预期输出应包含版本号 1.5.5(与 CMakeLists.txt:11 中定义的版本一致)。

验证 srt-live-transmit 工具

如果启用了 ENABLE_APPS(默认开启),构建将生成 srt-live-transmit 工具。该工具是 SRT 的核心测试和演示程序(apps/srt-live-transmit.cpp:47-82)。

bash
1# 查看帮助信息(建议/常见做法,未在仓库证据中出现)
2./srt-live-transmit -h

使用 srt-live-transmit 进行端到端测试

以下是一个基本的 SRT 数据传输测试流程(建议/常见做法,未在仓库证据中出现):

bash
1# 终端 1:启动 SRT 接收端,监听 9000 端口
2./srt-live-transmit srt://:9000 file://conveyor.ts
3
4# 终端 2:启动 SRT 发送端,连接到接收端
5./srt-live-transmit file://input.ts srt://127.0.0.1:9000

需要确认srt-live-transmit 的具体命令行参数格式需参考其帮助输出或项目 README,源码片段中未包含完整的参数解析逻辑。

常见问题与排错

问题 1:CMake 版本过低

现象:执行 cmake .. 时报错 cmake_minimum_required 版本不满足。

原因:系统安装的 CMake 版本低于 3.5(CMakeLists.txt:10)。

解决方案

bash
1# Ubuntu/Debian
2sudo apt install cmake
3
4# macOS
5brew install cmake
6
7# 或从官方下载最新版本
8# https://cmake.org/download/

问题 2:找不到 OpenSSL

现象:CMake 配置阶段报错 Could NOT find OpenSSL

原因:SRT 默认启用加密功能(ENABLE_ENCRYPTION=ON),需要 OpenSSL 开发库(CMakeLists.txt:182)。

解决方案

bash
1# Ubuntu/Debian
2sudo apt install libssl-dev
3
4# macOS
5brew install openssl
6# 可能需要设置环境变量
7export OPENSSL_ROOT_DIR=$(brew --prefix openssl)
8
9# 或禁用加密(不推荐用于生产环境)
10cmake -DENABLE_ENCRYPTION=OFF ..

问题 3:C++11 编译器不支持

现象:编译 srt-live-transmit 时出现 C++11 语法错误。

原因:GCC 版本低于 4.7 时,C++11 组件会被自动禁用(CMakeLists.txt:163-167)。

解决方案

bash
1# 升级编译器
2sudo apt install g++-7
3
4# 或显式禁用 C++11 应用
5cmake -DENABLE_CXX11=OFF ..

问题 4:configure 脚本无法执行

现象:执行 ./configure 报错 tclsh: command not found

原因configure 脚本使用 Tcl 编写(configure:1),需要系统安装 Tcl 解释器。

解决方案

bash
1# Ubuntu/Debian
2sudo apt install tcl
3
4# macOS(通常已预装)
5brew install tcl-tk
6
7# 或直接使用 cmake 命令替代 configure
8cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..

问题 5:Windows 平台构建问题

现象:在 Windows 上使用 MSVC 构建时遇到路径或链接问题。

原因:Windows 平台有特殊的构建配置,项目通过 MICROSOFT 宏区分处理(CMakeLists.txt:46)。MSVC 使用多配置生成器,不通过 CMAKE_BUILD_TYPE 控制构建类型(CMakeLists.txt:73)。

解决方案

bash
1# 使用 Visual Studio 生成器
2cmake -G "Visual Studio 16 2019" ..
3
4# 构建时指定配置
5cmake --build . --config Release

下一步建议

完成快速上手后,建议按以下路径深入学习:

  1. 传输模式详解:了解 SRT 的三种传输模式——Live 模式、File 模式和 Message 模式,以及各自的适用场景。
  2. 加密与安全配置:学习如何配置密码套件、密钥交换机制,以及 ENABLE_ENCRYPTION 相关的高级选项。
  3. 性能调优:研究 USE_BUSY_WAITINGCMakeLists.txt:193)、ENABLE_MONOTONIC_CLOCKCMakeLists.txt:189)等选项对延迟和吞吐量的影响。
  4. 绑定功能:探索 ENABLE_BONDING 选项启用后的多路径传输能力。
  5. 参考应用源码:阅读 apps/srt-live-transmit.cpp 的完整实现,了解生产级 SRT 应用的架构设计。