🧭 一、SRS 是什么?
SRS(Simple Realtime Server) 是一个纯 C++ 编写的高性能开源流媒体服务器,目标是打造简单、高效、易用、支持多协议的直播服务系统。自 2013 年开源以来,已成为国内外广泛使用的 RTMP/WebRTC 服务端方案之一。
核心特性:
- 🎯 支持主流直播协议:RTMP、HTTP-FLV、HLS、WebRTC、SRT、GB28181
- ⚡ 支持亚秒级延迟:特别是 WebRTC 和 HTTP-FLV 模式下
- 🌍 跨平台编译:支持 Linux/macOS/Windows/ARM
- 📦 模块化配置:支持边缘节点、中继、Vhost、转码、录制等模块
- 📡 RESTful API:可用于集群控制、状态监控、动态推流管理
🧪 二、适用场景分析
互动直播课堂 | 低延迟、浏览器直接播放 | WebRTC / HTTP-FLV,支持浏览器播放无需 Flash |
视频监控转发 | RTSP 拉流转 HTTP-FLV、WebRTC | 支持拉流并转封装、输出为 HTTP-FLV / WebRTC |
多端直播平台 | RTMP 推流 + 多协议播放 | 同时支持 RTMP/HLS/FLV/WebRTC |
云录播系统 | 自动按时间/按段录制 | DVR 模块支持本地录制和时间切割 |
集群分发 | 高并发、边缘分发优化 | 支持边缘模式 + 负载均衡(Nginx/自定义) |
🧱 三、SRS 架构简图与协议支持
graph LR
A[推流客户端(OBS/SDK)] –>|RTMP/RTC/SRT| B(SRS Server)
B –>|WebRTC| C[浏览器观看]
B –>|HTTP-FLV| D[低延迟播放器]
B –>|HLS| E[m3u8 播放器]
B –>|SRT/RTMP Relay| F[边缘/转发服务]
G[后端控制系统] –>|API调用| B
⚙️ 四、快速部署指南(以 RTMP + WebRTC 为例)
1. 克隆并构建
git clone https://github.com/ossrs/srs.git
cd srs/trunk
./configure –with-http-api –with-webrtc
make
2. 配置文件(conf/srs.conf 精简示例)
listen 1935;
max_connections 1000;
daemon off;
http_api {
enabled on;
listen 1985;
}
http_server {
enabled on;
listen 8080;
dir ./objs/nginx/html;
}
vhost __defaultVhost__ {
rtc {
enabled on;
nat 你的公网IP; # 否则 WebRTC ICE 失败
}
http_remux {
enabled on;
}
hls {
enabled on;
}
}
3. 启动服务
./objs/srs -c conf/srs.conf
📺 五、多协议推流与播放地址示例
RTMP 推流 | rtmp://<host>/live/stream | OBS、FFmpeg |
RTMP 播放 | 同上 | VLC、Flash 播放器 |
HTTP-FLV | http://<host>:8080/live/stream.flv | h5live、flv.js |
HLS | http://<host>:8080/live/stream.m3u8 | video.js |
WebRTC 播放 | webrtc://<host>/live/stream | Chrome/Firefox |
🔍 六、易错点与常见问题汇总
❗ WebRTC 相关
ICE 失败 / 连接卡死 | 没有配置公网 IP | rtc.nat 设置为服务器公网 IP |
视频黑屏 | 没有编码或编码格式错误 | 确保推流使用 H.264/AAC 编码 |
浏览器报错未连接成功 | WebRTC 模块未启用 | 编译时加入 –with-webrtc,配置中开启 rtc |
❗ 多协议共存冲突
-
HTTP-FLV 与 HLS 共用端口时注意 URL 路径区分
-
HTTP API、HTTP Server、WebRTC HTTP Hook 等端口不可重复
-
配置文件中端口复用示例(仅供参考):
http_api {
enabled on;
listen 1985;
}
http_server {
enabled on;
listen 8080;
}
❗ 推流鉴权/限制 IP
开启限制后,错误配置将导致推流失败:
vhost __defaultVhost__ {
security {
enabled on;
deny publish all;
allow publish 127.0.0.1;
}
}
可结合 Nginx 鉴权模块,或 RESTful API 控制权限。
📡 七、集群部署建议
对于高并发或跨地域直播服务,SRS 支持构建边缘集群架构:
#mermaid-svg-62YoOgJ4MDz5MUYt {font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-62YoOgJ4MDz5MUYt .error-icon{fill:#552222;}#mermaid-svg-62YoOgJ4MDz5MUYt .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-62YoOgJ4MDz5MUYt .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-62YoOgJ4MDz5MUYt .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-62YoOgJ4MDz5MUYt .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-62YoOgJ4MDz5MUYt .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-62YoOgJ4MDz5MUYt .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-62YoOgJ4MDz5MUYt .marker{fill:#333333;stroke:#333333;}#mermaid-svg-62YoOgJ4MDz5MUYt .marker.cross{stroke:#333333;}#mermaid-svg-62YoOgJ4MDz5MUYt svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-62YoOgJ4MDz5MUYt .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-62YoOgJ4MDz5MUYt .cluster-label text{fill:#333;}#mermaid-svg-62YoOgJ4MDz5MUYt .cluster-label span{color:#333;}#mermaid-svg-62YoOgJ4MDz5MUYt .label text,#mermaid-svg-62YoOgJ4MDz5MUYt span{fill:#333;color:#333;}#mermaid-svg-62YoOgJ4MDz5MUYt .node rect,#mermaid-svg-62YoOgJ4MDz5MUYt .node circle,#mermaid-svg-62YoOgJ4MDz5MUYt .node ellipse,#mermaid-svg-62YoOgJ4MDz5MUYt .node polygon,#mermaid-svg-62YoOgJ4MDz5MUYt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-62YoOgJ4MDz5MUYt .node .label{text-align:center;}#mermaid-svg-62YoOgJ4MDz5MUYt .node.clickable{cursor:pointer;}#mermaid-svg-62YoOgJ4MDz5MUYt .arrowheadPath{fill:#333333;}#mermaid-svg-62YoOgJ4MDz5MUYt .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-62YoOgJ4MDz5MUYt .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-62YoOgJ4MDz5MUYt .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-62YoOgJ4MDz5MUYt .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-62YoOgJ4MDz5MUYt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-62YoOgJ4MDz5MUYt .cluster text{fill:#333;}#mermaid-svg-62YoOgJ4MDz5MUYt .cluster span{color:#333;}#mermaid-svg-62YoOgJ4MDz5MUYt div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-62YoOgJ4MDz5MUYt :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
主节点回源
主节点回源
推流客户端
SRS 主节点
SRS 边缘节点1
SRS 边缘节点2
Viewer1
Viewer2
- 主节点集中接收推流
- 边缘节点部署在靠近用户的区域,实现就近播放、低延迟访问
- 自定义调度策略:基于 DNS、负载均衡器或网关反向代理
🧰 八、配套工具与生态
srs-benchmark | 压力测试工具,评估推流/播放能力 |
flv.js | H5 HTTP-FLV 播放器 |
srs-player | SRS 官方 WebRTC 播放测试工具 |
OBS Studio | 主流开源推流软件,支持 RTMP |
ffmpeg | 编解码、转码、多协议推流 |
✅ 九、总结:SRS 是否适合你?
多协议兼容 | ✅ 全面支持 RTMP / HLS / WebRTC 等 |
低延迟性能 | ✅ WebRTC/FLV 延迟在 300ms 内 |
部署复杂度 | 🟡 单机简单,集群需配置较多 |
社区活跃度 | ✅ GitHub 活跃,文档完善 |
企业级能力 | ✅ 支持录制、鉴权、API、监控等 |
视频转码 | ✅ 内建转码(基于 ffmpeg) |
SRS 是一个灵活、强大、部署成本低的直播流媒体服务器,尤其适合中小型直播平台、低延迟视频服务、自建私有流媒体系统。
📚 附录资料推荐
- SRS 官方文档:https://ossrs.io/lts/zh-cn/docs
- SRS WebRTC 教程:https://ossrs.io/lts/zh-cn/docs/v4/doc/webrtc
- SRS 性能调优与压测方案:https://ossrs.io/lts/zh-cn/docs/v4/doc/benchmark
实用小工具
App Store 截图生成器、应用图标生成器 、在线图片压缩和 Chrome插件-强制开启复制-护眼模式-网页乱码设置编码 乖猫记账,AI智能分类的聊天记账。
评论前必须登录!
注册