快速上手
相关源文件
本页面内容基于以下源文件生成:
SRT(Secure, Reliable, Transport)是一个开源的传输协议库,专注于在不可靠网络上提供安全、可靠的数据传输能力。本文档将引导开发者完成从环境准备到编写第一个 SRT 应用的全过程。
环境准备与依赖
编译工具链要求
SRT 项目使用 CMake 作为其构建系统。根据项目配置文件,CMake 的最低版本要求为 3.5(CMakeLists.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 构建命令:
bash1# 克隆仓库 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 / 1 | Debug | 定义 _DEBUG 宏,启用 SRT_ASSERT() |
2 | RelWithDebInfo | 带调试信息的优化构建 |
配置示例:
bash1# Debug 构建 2cmake -DENABLE_DEBUG=1 .. 3 4# Release 构建(默认) 5cmake ..
常用构建选项
项目提供了丰富的编译选项供开发者按需定制(CMakeLists.txt:161-196)。以下是关键选项汇总:
| 选项 | 默认值 | 说明 |
|---|---|---|
ENABLE_SHARED | ON | 构建动态库(libsrt.so / libsrt.dylib) |
ENABLE_STATIC | ON | 构建静态库(libsrt.a) |
ENABLE_APPS | ON | 构建支持应用程序(如 srt-live-transmit) |
ENABLE_CXX11 | ON | 启用 C++11 组件(编译器版本足够时) |
ENABLE_LOGGING | ON | 启用日志功能 |
ENABLE_HEAVY_LOGGING | 视构建类型 | 启用详细调试日志 |
ENABLE_ENCRYPTION | ON | 启用 SRT 加密 |
ENABLE_TESTING | OFF | 构建开发者测试应用 |
ENABLE_UNITTESTS | OFF | 启用单元测试 |
ENABLE_BONDING | OFF | 启用绑定功能 |
配置示例——仅构建静态库并禁用应用:
bash1cmake -DENABLE_SHARED=OFF -DENABLE_APPS=OFF ..
使用 configure 脚本快速配置
脚本概述
SRT 提供了一个基于 Tcl 的 configure 脚本,作为 CMake 的用户友好包装器。该脚本的设计目的是简化 CMake 配置过程,提供类似传统 autotools 的使用体验(configure:12-46)。
基本用法
bash1# 查看帮助信息 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):
cpp1// 使用已安装的 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 发送端应用框架,展示了必要的初始化和清理步骤:
cpp1#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):
cpp1#include <cstring> // memset, strerror 2#include <iostream> // std::cerr, std::cout 3#include <string> // std::string 4#include <stdexcept> // std::runtime_error 5#include <csignal> // signal handling
编译链接
编译 SRT 应用时需链接 srt 库:
bash1# 动态链接 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 库是否正确安装:
bash1# 检查库文件是否存在(建议/常见做法,未在仓库证据中出现) 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)。
bash1# 查看帮助信息(建议/常见做法,未在仓库证据中出现) 2./srt-live-transmit -h
使用 srt-live-transmit 进行端到端测试
以下是一个基本的 SRT 数据传输测试流程(建议/常见做法,未在仓库证据中出现):
bash1# 终端 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)。
解决方案:
bash1# 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)。
解决方案:
bash1# 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)。
解决方案:
bash1# 升级编译器 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 解释器。
解决方案:
bash1# 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)。
解决方案:
bash1# 使用 Visual Studio 生成器 2cmake -G "Visual Studio 16 2019" .. 3 4# 构建时指定配置 5cmake --build . --config Release
下一步建议
完成快速上手后,建议按以下路径深入学习:
- 传输模式详解:了解 SRT 的三种传输模式——Live 模式、File 模式和 Message 模式,以及各自的适用场景。
- 加密与安全配置:学习如何配置密码套件、密钥交换机制,以及
ENABLE_ENCRYPTION相关的高级选项。 - 性能调优:研究
USE_BUSY_WAITING(CMakeLists.txt:193)、ENABLE_MONOTONIC_CLOCK(CMakeLists.txt:189)等选项对延迟和吞吐量的影响。 - 绑定功能:探索
ENABLE_BONDING选项启用后的多路径传输能力。 - 参考应用源码:阅读
apps/srt-live-transmit.cpp的完整实现,了解生产级 SRT 应用的架构设计。
