ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

SRS 从源码构建与部署实战:Live Streaming、WebRTC 与交叉编译完全指南

SRS 从源码构建与部署实战:Live Streaming、WebRTC 与交叉编译完全指南 SRS 从源码构建与部署实战Live Streaming、WebRTC 与交叉编译完全指南【免费下载链接】srsSRS is a simple, high-performance, AI-driven real-time media server supporting RTMP, WebRTC, HLS, HTTP-FLV, HTTP-TS, SRT, MPEG-DASH, and GB28181, with codec support for H.264, H.265, AV1, VP9, AAC, Opus, and G.711.项目地址: https://gitcode.com/GitHub_Trending/sr/srsSRSSimple Realtime Server是一个高性能、支持 AI 能力的实时媒体服务器覆盖 RTMP、WebRTC、HLS、HTTP-FLV、HTTP-TS、SRT、MPEG-DASH 与 GB28181 等协议。本文以官方 Build 文档为骨架完整讲解从源码编译 SRS 的完整流程覆盖经典直播推拉流、WebRTC 视频通话、RTMP 转 WebRTC 直播以及 HTTPS 场景并深入源码与配置说明每一处关键参数帮助你在一台 Ubuntu 20 服务器上独立完成下载源码 → 编译 → 运行 → 推流 → 播放的全链路实践。一、构建前的准备获取源码与理解目录结构官方文档推荐在Ubuntu20上从源码构建 SRS。与 Docker 快速开始 相比源码构建能让你按需裁剪功能、交叉编译到嵌入式设备并直接阅读与调试 C 实现。获取源码本文所有构建均在trunk目录下进行git clone -b develop https://gitcode.com/GitHub_Trending/sr/srs.git cd srs/trunktrunk目录是 SRS 的核心工程目录其关键构成如下构建入口 configurebash 脚本解析用户选项并生成 Makefileauto 目录options.sh选项解析、depends.sh依赖处理、modules.sh模块编译等构建子脚本conf 目录全部可用的配置文件如srs.conf、rtmp2rtc.conf、https.rtc.conf等src 目录按core核心、kernel内核、protocol协议、app应用、main入口五层组织的 C 源码etc/init.d/srs服务管理脚本支持start/stop/status/restart/reload/rotate/gracedoc/source.flv官方提供的测试视频用于推流验证。二、编译三步曲configure 与 make 的完整流程SRS 的构建模型是configure 生成 Makefilemake 编译并链接与经典 GNU 工程一致。在srs/trunk下执行./configure makeconfigure 到底做了什么阅读 configure 脚本 可以看清整个生成流程解析用户选项加载auto/options.sh见其中--jobsN、--rtcon/off、--full、--gb28181、--rtsp等大量开关设置变量加载auto/setup_variables.sh创建objs平台目录处理第三方依赖加载auto/depends.sh包括stState Threads 网络库、libsrtp2WebRTC 加密、FFmpegWebRTC 音频转码、opensslRTMP 复杂握手、gperftools性能分析、SRT 库生成Makefile并输出Configure summary——列出本次编译启用的功能如HLS is enabled、RTC is enabled、SRT is enabled与警告项。需要注意SRS 默认会从3rdparty目录下的源码编译依赖库如 openssl-1.1-fit、libsrtp-2-fit、srt-1-fit因此首次./configure会耗费一些时间下载和构建依赖属于正常现象。make 之后得到了什么make之后产物位于trunk/objsobjs/srsSRS 服务器主程序由srs_main_server链接生成见 configure 中的 APP_MAIN 定义objs/srs.log运行日志文件可通过srs_log_file配置修改位置objs/nginx/html内置 HTTP 服务器HTTP-FLV/HLS与播放器页面的静态文件根目录。构建还支持make install将二进制、配置文件、播放器页面与 systemd 服务文件安装到指定前缀默认通过SRS_PREFIX指定详见 configure 生成的 install 目标。三、启动与验证让 SRS 跑起来构建完成后用默认配置启动服务器./objs/srs -c conf/srs.conf用 init.d 脚本管理进程更规范的方式是使用 服务脚本它基于 PID 文件objs/srs.pid和日志文件objs/srs.log实现进程管理支持start|stop|status|restart|reload|rotate|grace七个子命令# 查看进程运行状态 ./etc/init.d/srs status # 实时跟踪日志输出 tail -n 30 -f ./objs/srs.log其中reload发送SIGHUP实现不重启应用新配置rotate发送SIGUSR1重开日志文件配合 logrotate 使用grace发送SIGQUIT优雅退出。默认配置解读查看 默认配置文件 可以了解端口规划配置块端口作用rtmp1935TCPRTMP 推流/拉流http_api1985TCPHTTP API状态查询、流管理http_server8080TCPHTTP 服务HTTP-FLV、HLS、播放器页面rtc_server8000UDPWebRTC 媒体端口candidate $CANDIDATEvhost __defaultVhost__下默认开启了hlsHLS 切片、http_remux[vhost]/[app]/[stream].flv格式的 HTTP-FLV 转封装和rtcWebRTC。浏览器访问http://localhost:8080/即可看到内置控制台与播放器入口。四、场景一Live Streaming 经典直播SRS 对直播场景的开箱支持指 RTMP 推流 多协议播放。推流使用 FFmpeg 或 OBS 推流其中doc/source.flv位于 SRS 源码仓库内即 trunk/doc/source.flvffmpeg -re -i ./doc/source.flv -c copy -f flv rtmp://localhost/live/livestream-re按原帧率读取模拟实时推流-c copy直接复制编码流不做转码。播放推流成功后可用三种方式播放RTMPVLC 播放器rtmp://localhost/live/livestreamH5HTTP-FLVhttp://localhost:8080/live/livestream.flvH5HLShttp://localhost:8080/live/livestream.m3u8从配置看HTTP-FLV 由http_remux的mount [vhost]/[app]/[stream].flv规则动态映射 URLHLS 则由hls配置块生成.m3u8与.ts切片。SRS 支持在同一个 vhost 下通过修改 URL 的 app/stream 区分多路流例如rtmp://ip/live/livestream、rtmp://ip/liveN/livestreamN、http://ip:8080/anyM/streamN.flv等无需改任何配置。五、场景二WebRTC 视频通话SRS 支持 WebRTC可搭建一对一/多对多视频通话应用。构建与启动方式同上关键在于CANDIDATE 环境变量CANDIDATE192.168.1.10 # 请替换为你的服务器实际 IP ./objs/srs -c conf/srs.confCANDIDATE 的作用与原理WebRTC 协商时SDP 中的 candidate 必须指向客户端可达的服务器 IP。配置中的candidate $CANDIDATE会读取环境变量CANDIDATE作为对外暴露的候选地址详见 WebRTC 文档中的 Config: Candidate 一节。若在云端服务器公网 IP或 NAT 之后部署CANDIDATE必须设为公网可达地址否则浏览器无法建立媒体连接。获取本机 IP 的常用方式# Linux CANDIDATE$(ifconfig eth0|grep inet |awk {print $2}) # macOS CANDIDATE$(ifconfig en0 inet| grep inet |awk {print $2})推流与播放SRS 在 localhost 场景下提供浏览器页面直接验证HTTP 即可推流http://localhost:8080/players/rtc_publisher.html?autostarttruestreamlivestreamport8080schemahttp播放http://localhost:8080/players/rtc_player.html?autostarttruestreamlivestreamschemahttp推流与播放使用不同的 stream 即可实现视频通话应用。注意如果 SRS 不在 localhost 上浏览器 WebRTC 要求 HTTPS原因与 getUserMedia/媒体权限及加密协商有关详见下文WebRTC using HTTPS。六、场景三WebRTC for Live StreamingRTMP 转 RTC此场景解决把直播流转换为 WebRTC 播放的需求——用 FFmpeg/OBS 推 RTMP浏览器用 WebRTCWHEP低延迟播放。CANDIDATE192.168.1.10 ./objs/srs -c conf/rtmp2rtc.conf对比 rtmp2rtc.conf 配置 与默认配置核心差异在 vhost 下的 rtc 块vhost __defaultVhost__ { rtc { enabled on; rtmp_to_rtc on; # 允许 RTMP 流被 WebRTC 播放 rtc_to_rtmp on; # 允许 WebRTC 流被 RTMP 播放 } ... }rtmp_to_rtc on开启RTMP 转 RTC桥接即 RTMP 推上来的流可以直接被 WebRTC 拉取对应srs_app_stream_bridge等源码模块的实现逻辑rtc_to_rtmp on则是反向桥接。默认的 srs.conf 中这两个开关均为off需要转换时必须使用rtmp2rtc.conf或自行开启。推流复用doc/source.flvffmpeg -re -i ./doc/source.flv -c copy -f flv rtmp://localhost/live/livestream播放WebRTCWHEPhttp://localhost:1985/rtc/v1/whep/?applivestreamlivestreamH5HTTP-FLVhttp://localhost:8080/live/livestream.flvH5HLShttp://localhost:8080/live/livestream.m3u8七、场景四WebRTC using HTTPS远程设备场景当需要在平板、手机上查看 WebRTC 流或 SRS 部署在远程服务器上时必须启用 HTTPS。构建流程不变启动时加载专门配置CANDIDATE192.168.1.10 ./objs/srs -c conf/https.rtc.confHTTPS 配置解读查看 https.rtc.conf它在默认配置基础上增加了两处 HTTPS 监听http_server { listen 8080; https { enabled on; listen 8088; # HTTPS 播放端口 key ./conf/server.key; cert ./conf/server.crt; } } http_api { listen 1985; https { enabled on; listen 1990; # HTTPS API 端口 key ./conf/server.key; cert ./conf/server.crt; } }即HTTP 服务HTTP-FLV/HLS/播放器页面增加 8088 端口HTTP API 增加 1990 端口。仓库自带自签名证书 server.key 与 server.crt 供测试使用。生产环境请替换为自己的证书相关细节可参考 HTTP API 文档的 HTTPS 一节、HTTP 回调文档的 HTTPS 一节 与 HTTP-FLV 文档的 HTTPS 直播一节也可以使用 Nginx 等反向代理终结 TLS同样能与 SRS 完美配合。推流与播放页面将 IP 换成你的服务器 IP推流https://192.168.3.82:8088/players/rtc_publisher.html?autostarttruestreamlivestreamapi1990schemahttps播放https://192.168.3.82:8088/players/rtc_player.html?autostarttruestreamlivestreamapi1990schemahttps使用自签名证书时浏览器会提示不安全在 Chrome 中可输入thisisunsafe强制继续访问。八、Cross BuildARM/MIPS 与嵌入式交叉编译SRS 通常可以直接在 ARM 或 MIPS 服务器上构建。若需为嵌入式设备做交叉编译在 x86 开发机上编译出 ARM/MIPS 目标平台的二进制./configure提供了交叉编译开关auto/options.sh中的--cross-build相关选项configure 输出的 summary 中会有The cross-build is enabled.提示。交叉编译涉及工具链设置、依赖库ST、openssl、srtp 等的交叉编译等完整流程属于进阶主题官方文档提供了专门的指南建议按目标平台查阅对应章节。九、构建选项速查按需裁剪你的 SRS./configure支持大量功能开关全部选项可在 auto/options.sh 中查看常用组合如下# 默认构建推荐功能最全 ./configure # 指定并行编译任务数加快构建 ./configure --jobs4 # 显式控制 WebRTC默认已开启 ./configure --rtcon # 启用实验性功能GB28181、RTSP、HDS 等 ./configure --gb28181on --rtspon构建完成后的make目标make help可查看完整说明目标作用make/make server构建 SRS 服务器make utest构建单元测试需 configure 时开启--utestmake install安装到指定前缀目录make clean清理编译产物make destroy清理当前平台全部生成文件make st/make ffmpeg单独重建 ST / FFmpeg 依赖从 configure 的 summary 输出 可以看到构建时每个功能都有明确的启停提示如HLS is enabled、Warning: HLS is disabled建议在 configure 后仔细阅读这些输出确认自己的目标功能尤其是 RTC、SRT、HLS、HTTP Server均已开启。十、故障排查与验证清单完成构建部署后可按以下清单逐项验证进程存活./etc/init.d/srs status输出SRS(pid xxx) is running.日志健康tail -n 30 -f ./objs/srs.log无 ERROR 级日志推流后能看到publish/play事件记录。控制台可达浏览器打开http://localhost:8080/能看到 SRS 控制台页面。推拉流闭环ffmpeg -re -i ./doc/source.flv -c copy -f flv rtmp://localhost/live/livestream推流后HTTP-FLV/live/livestream.flv与 HLS/live/livestream.m3u8均可播放。WebRTC 连通CANDIDATE必须是客户端可达的 IP跨设备访问需走 HTTPS 配置https.rtc.conf。总结从源码构建 SRS 是理解其架构与进行深度定制的必经之路./configure生成 Makefile、make产出objs/srs、-c conf/xxx.conf选择运行形态。本文覆盖的四种场景经典直播、WebRTC 通话、RTMP 转 WebRTC、HTTPS 远程播放对应仓库中的 srs.conf、rtmp2rtc.conf 与 https.rtc.conf 三份核心配置配合 init.d 服务脚本 即可支撑从开发调试到生产部署的完整链路。若追求更快的上手速度可参考 Docker 快速开始文档需要深入 WebRTC 候选地址、RTMP 细节或低延迟调优时可继续阅读仓库内 webrtc.md、rtmp.md 与 low-latency.md 等文档。【免费下载链接】srsSRS is a simple, high-performance, AI-driven real-time media server supporting RTMP, WebRTC, HLS, HTTP-FLV, HTTP-TS, SRT, MPEG-DASH, and GB28181, with codec support for H.264, H.265, AV1, VP9, AAC, Opus, and G.711.项目地址: https://gitcode.com/GitHub_Trending/sr/srs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进