首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SRS(Simple Realtime Server) 开源直播/双录服务器

SRS(Simple Realtime Server) 开源直播/双录服务器

作者头像
井九
发布2025-07-11 10:28:14
发布2025-07-11 10:28:14
55300
代码可运行
举报
文章被收录于专栏:四楼没电梯四楼没电梯
运行总次数:0
代码可运行

🧭 一、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:可用于集群控制、状态监控、动态推流管理

🧪 二、适用场景分析

应用场景

特性需求

SRS 的支持方式

互动直播课堂

低延迟、浏览器直接播放

WebRTC / HTTP-FLV,支持浏览器播放无需 Flash

视频监控转发

RTSP 拉流转 HTTP-FLV、WebRTC

支持拉流并转封装、输出为 HTTP-FLV / WebRTC

多端直播平台

RTMP 推流 + 多协议播放

同时支持 RTMP/HLS/FLV/WebRTC

云录播系统

自动按时间/按段录制

DVR 模块支持本地录制和时间切割

集群分发

高并发、边缘分发优化

支持边缘模式 + 负载均衡(Nginx/自定义)


🧱 三、SRS 架构简图与协议支持

代码语言:javascript
代码运行次数:0
运行
复制
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. 克隆并构建
代码语言:javascript
代码运行次数:0
运行
复制
git clone https://github.com/ossrs/srs.git
cd srs/trunk
./configure --with-http-api --with-webrtc
make
2. 配置文件(conf/srs.conf 精简示例)
代码语言:javascript
代码运行次数:0
运行
复制
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. 启动服务
代码语言:javascript
代码运行次数:0
运行
复制
./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 等端口不可重复

配置文件中端口复用示例(仅供参考):

代码语言:javascript
代码运行次数:0
运行
复制
http_api {
  enabled on;
  listen 1985;
}
http_server {
  enabled on;
  listen 8080;
}

❗ 推流鉴权/限制 IP

开启限制后,错误配置将导致推流失败:

代码语言:javascript
代码运行次数:0
运行
复制
vhost __defaultVhost__ {
  security {
    enabled on;
    deny publish all;
    allow publish 127.0.0.1;
  }
}

可结合 Nginx 鉴权模块,或 RESTful API 控制权限。


📡 七、集群部署建议

对于高并发或跨地域直播服务,SRS 支持构建边缘集群架构:

  • 主节点集中接收推流
  • 边缘节点部署在靠近用户的区域,实现就近播放、低延迟访问
  • 自定义调度策略:基于 DNS、负载均衡器或网关反向代理

🧰 八、配套工具与生态

工具 / 插件

用途

srs-benchmark

压力测试工具,评估推流/播放能力

flv.js

H5 HTTP-FLV 播放器

srs-player

SRS 官方 WebRTC 播放测试工具

OBS Studio

主流开源推流软件,支持 RTMP

ffmpeg

编解码、转码、多协议推流


✅ 九、总结:SRS 是否适合你?

考察维度

SRS 支持情况

多协议兼容

✅ 全面支持 RTMP / HLS / WebRTC 等

低延迟性能

✅ WebRTC/FLV 延迟在 300ms 内

部署复杂度

🟡 单机简单,集群需配置较多

社区活跃度

✅ GitHub 活跃,文档完善

企业级能力

✅ 支持录制、鉴权、API、监控等

视频转码

✅ 内建转码(基于 ffmpeg)

SRS 是一个灵活、强大、部署成本低的直播流媒体服务器,尤其适合中小型直播平台、低延迟视频服务、自建私有流媒体系统。

📚 附录资料推荐

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🧭 一、SRS 是什么?
  • 🧪 二、适用场景分析
  • 🧱 三、SRS 架构简图与协议支持
  • ⚙️ 四、快速部署指南(以 RTMP + WebRTC 为例)
    • 1. 克隆并构建
    • 2. 配置文件(conf/srs.conf 精简示例)
    • 3. 启动服务
  • 📺 五、多协议推流与播放地址示例
  • 🔍 六、易错点与常见问题汇总
    • ❗ WebRTC 相关
    • ❗ 多协议共存冲突
    • ❗ 推流鉴权/限制 IP
  • 📡 七、集群部署建议
  • 🧰 八、配套工具与生态
  • ✅ 九、总结:SRS 是否适合你?
  • 📚 附录资料推荐
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档