
一、关于直播
在当今直播行业中,24小时不间断的直播已成为许多平台和内容创作者的需求。然而,传统的直播间通常需要大量的人力和设备支持,这使得搭建和维护成为一项挑战。
为了简化这一过程,我们可以借助NAS/VPS和Docker的强大功能,快速搭建一个高效、稳定的无人值守直播间。

本教程将详细介绍如何通过Docker部署SRS-Stack开源项目,利用飞牛云的NAS/VPS资源,打造一个全天候7*24小时自动运行的无人直播间。
SRS(Simple Real-time Streaming)是一款高效、低延迟的流媒体服务器,支持RTMP、WebRTC、HLS等协议,广泛应用于直播场景。通过本文的指导,您将能够快速部署并配置一个稳定的直播流系统,轻松实现24小时不间断的直播服务。
二、什么是SRS
SRS(Simple Realtime Server)是一个简单高效的实时视频服务器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT等多种实时流媒体协议。
Oryx是一个一体化、开箱即用、开源的视频解决方案,可部署在云上或自建机房,以直播和WebRTC等能力赋能你的业务。

三、有关截图

四、部署方法
1.安装Docker
前提是已经安装好了Docker容器。若是未安装请使用脚本安装,注意是在VPS或者你的服务器上,NAS上本来就有Dockeer容器
bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrors@main/DockerInstallation.sh)
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
2.创建docker-compose.yml文件
登录服务器使用root账户执行以下步骤
创建一个目录,并进入此目录
mkdir srs;cd srs然后再新建docker-compose.yml
vim docker-compose.ymlservices:
oryx:
image: ossrs/oryx:5 # 使用 ossrs 的 oryx:5 镜像。如果你在中国,请使用此镜像 registry.cn-hangzhou.aliyuncs.com/ossrs/oryx:5 加快 Docker 拉取过程,并确保设置正确的语言。
container_name: oryx # 容器名称为 oryx
ports:
- "2022:2022" # HTTP 端口,将容器的 2022 端口映射到宿主机的 2022 端口
- "2443:2443" # HTTPS 端口,将容器的 2443 端口映射到宿主机的 2443 端口
- "1935:1935" # RTMP 端口,支持通过 RTMP 向 Oryx 发布流,将容器的 1935 端口映射到宿主机的 1935 端口
- "8000:8000/udp" # WebRTC UDP 端口,用于传输 WebRTC 媒体数据(例如 RTP 数据包),将容器的 8000 端口(UDP)映射到宿主机的 8000 端口
- "10080:10080/udp" # SRT UDP 端口,支持通过 SRT 协议发布流,将容器的 10080 端口(UDP)映射到宿主机的 10080 端口
volumes:
- ./data:/data # 将宿主机的 ./data 目录挂载到容器的 /data 目录,用于持久化存储
restart: always # 容器崩溃时自动重启
3.执行容器运行命令
docker-compose up -d #运行容器docker-compose ps #查看是否启动成功正常启动如下所示
docker-compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
oryx ossrs/oryx:5 "./bootstrap" oryx About an hour ago Up About an hour 0.0.0.0:1935->1935/tcp, [::]:1935->1935/tcp, 0.0.0.0:2022->2022/tcp, [::]:2022->2022/tcp, 5060/tcp, 8080/tcp, 0.0.0.0:8000->8000/udp, [::]:8000->8000/udp, 0.0.0.0:2443->2443/tcp, [::]:2443->2443/tcp, 9000/tcp, 0.0.0.0:10080->10080/udp, [::]:10080->10080/udp4.服务端完成
打开web页面使用
成功以后需要打开自己相应的端口2022)防火墙就可以web端访问了
http://ip:2022直接打开即可使用,第一次首先配置管理员密码和语言

五、客户端设置
1.YouTube
首先打开油管的直播界面配置好必要的标题封面等参数-将直播地址和直播码分别填入如图所示的地方即可

2.B站
跟油管上一样按照图示填入直播地址和对应秘钥即可


六、进阶实战:如何实现真正的“无人值守”循环推流
上面的步骤我们已经成功搭建了 SRS 服务端(直播分发中心),并在 B站 / YouTube 设置了接收端。但要想实现真正的“无人值守”,我们还需要一个 “推流源”。
通常情况下,大家会使用电脑上的 OBS 进行推流,但这需要电脑 24 小时开机,不仅费电,还容易因为电脑卡顿断流。既然我们已经有了全天候运行的 NAS/VPS,为什么不让服务器自己推流给自己呢?
这里我们需要请出音视频处理领域的神器 —— FFmpeg。
- 在服务器上安装 FFmpeg
如果你使用的是 CentOS/Ubuntu/Debian,可以通过简单的命令直接安装:
# Ubuntu/Debian 系统
apt-get update && apt-get install -y ffmpeg
# CentOS 系统
yum install epel-release -y
yum install ffmpeg -y安装完成后,输入 ffmpeg -version 确认是否安装成功。
- 准备直播视频源
将你准备好的一段 MP4 视频素材(例如你提前录制好的助眠音乐、风景视频、或者是循环播放的游戏录像)上传到服务器的某个目录下,例如 /root/video/live_source.mp4。 - 使用 FFmpeg 执行无限循环推流指令
在终端中执行以下命令(请将推流地址替换为你刚才在 SRS 面板或 B 站获取到的真实 RTMP 推流地址):
ffmpeg -re -stream_loop -1 -i /root/video/live_source.mp4 -c:v copy -c:a copy -f flv rtmp://127.0.0.1:1935/live/livestream参数硬核解析:
-re:表示按照视频原本的真实帧率读取。如果不加这个参数,FFmpeg 会以最快速度把视频“塞”给服务器,瞬间撑爆带宽。
-stream_loop -1:这是无人直播的灵魂参数,表示将输入的视频进行无限循环播放。
-i:指定你的本地视频文件路径。
-c:v copy -c:a copy:音视频流直接复制拷贝,不进行任何二次转码。这极其重要!它能让你的服务器 CPU 占用率接近于 0,哪怕是一台 1核1G 的低配 VPS 也能轻松跑起 1080P 的无人直播。
-f flv:将输出格式封装为 flv 流媒体格式。
rtmp://...:最终推向的直播间地址。
- 让推流在后台永久运行(Nohup/Screen)
如果你直接运行上面的命令,一旦关闭 SSH 终端软件,直播就会断开。为了让它 24 小时后台运行,我们可以使用 nohup 工具:
nohup ffmpeg -re -stream_loop -1 -i /root/video/live_source.mp4 -c:v copy -c:a copy -f flv rtmp://127.0.0.1:1935/live/livestream > /dev/null 2>&1 &现在,你可以安心关掉电脑睡觉了,你的服务器正在默默地为你 24 小时全天候打工赚钱!
七、核心流媒体协议深度解析(小白科普篇)
在前面的 docker-compose.yml 中,我们开放了一大堆端口(1935, 8000, 10080),很多初学者可能一头雾水。这里博主为大家科普一下这些端口背后代表的流媒体协议,让你知其然更知其所以然:
RTMP (TCP 1935端口):老牌霸主
这是 Adobe 公司早年间开发的协议。它的优点是极其稳定、几乎所有的推流软件(如 OBS、手机直播 APP)都默认支持它。缺点是延迟稍高(通常在 3-5 秒左右),且随着 Flash 的淘汰,现代浏览器无法直接播放 RTMP 流。
WebRTC (UDP 8000端口):未来的毫秒级王者
这是 Google 主导的实时通讯协议。它的杀手锏是“毫秒级超低延迟”(低于 500ms)。如果你要在网页上直接发起直播,或者进行连麦互动,WebRTC 是唯一的选择。注意,WebRTC 极度依赖 UDP 传输,所以服务器的安全组规则必须放行 UDP。
SRT (UDP 10080端口):弱网环境的救星
这是近年来崛起的新星协议。如果你的 VPS 在海外,或者跨国推流时网络经常丢包卡顿,使用 SRT 协议代替 RTMP 推流,可以利用其底层的 ARQ 重传机制,让直播画面丝滑流畅,彻底告别马赛克。
八、生产环境高阶配置:域名绑定与 HTTPS 反向代理
默认情况下,我们通过 http://IP:2022 来访问 Oryx 的管理后台。但这在实际生产环境中存在两个致命问题:
直接暴露 IP 和端口,容易遭到黑客的恶意扫描和爆破。
WebRTC 协议的硬性限制: 现代浏览器(如 Chrome, Edge)出于安全策略,强制要求只有在 HTTPS 环境下,才允许网页调用麦克风和摄像头。 因此,如果你想使用网页直接开播的功能,必须给 Oryx 绑定域名并配置 SSL 证书。最简单的做法是借助宝塔面板 (BT Panel) 的 Nginx 反向代理功能:
在宝塔面板中新建一个站点,例如 live.yourdomain.com。
申请并部署好 SSL 证书(Let's Encrypt 免费证书即可)。
进入站点设置 -> 反向代理 -> 添加反向代理。
目标 URL 填写:http://127.0.0.1:2022。
提交后,你就可以通过安全加密的 https://live.yourdomain.com 来访问你的 SRS 后台,并完美解锁 WebRTC 的所有高级功能了。
九、性能监控与系统安全防护
由于直播服务极其消耗网络和带宽资源,如果是部署在公网 VPS 上,我们必须做好以下防护:
- 严格配置云服务商安全组
无论是阿里云、腾讯云还是国外的云厂商,默认都会拦截非常规端口。部署完成后,请务必登录云服务器的控制台,在“防火墙”或“安全组”中手动放行以下规则:
入站规则 (TCP): 放行 2022、2443、1935 端口。
入站规则 (UDP): 放行 8000、10080 端口。(极其重要!很多水友发现 WebRTC 和 SRT 推流失败,99% 是因为忘了放行 UDP)。
- Docker 资源限制 (Cgroups)
如果你使用的是与建站同服务器的 VPS,为了防止异常推流导致 CPU 飙升从而影响你的网站访问,可以在 docker-compose.yml 中加入资源限制策略:
deploy:
resources:
limits:
cpus: '1.5' # 限制最多使用 1.5 个 CPU 核心
memory: 2048M # 限制最大内存占用为 2GB十、常见疑难杂症排查指南 (FAQ)
Q1:按照教程部署成功了,后台也能打开,但是用 OBS 推流一直提示“无法连接到服务器”?
排查方案: 绝大多数情况是云服务器的安全组(TCP 1935 端口)未放行。另外,请检查你的宝塔面板内的“系统防火墙”插件是否也同步放行了该端口。可以用电脑的 cmd 执行 telnet 你的IP 1935 测试连通性。
Q2:使用 FFmpeg 循环推流时,没过多久进程就自动死掉了?
排查方案: 检查你的原视频素材(MP4)。如果原视频的视频流或音频流存在时间戳损坏,FFmpeg 在循环首尾衔接时会引发报错退出。建议先用剪辑软件(如 PR / 剪映)将视频重新导出一次标准 MP4,再上传推流。
Q3:转播到 YouTube / B 站时,平台提示“直播流比特率过低/过高”导致频繁转圈?
排查方案: B站对于普通主播的码率上限通常限制在 6000kbps (6Mbps) 左右。如果你使用 FFmpeg copy 模式推流,原视频的码率有多大,推出来的就有多大。如果你的原视频是 4K 高码率,请务必先将原素材压缩至 1080P、码率 4000kbps 左右,再上传到服务器进行推流,既省 VPS 带宽,又不会被直播平台限流。
- 版权说明:本站资源博主亲自踩坑记录实践,仅供学习交流,严禁商用。
- 服务说明:本站提供技术资料分享,请教问题请评论区咨询博主。
- 引用规范:转载本文请务必注明原文链接,尊重博主劳动成果。
- 关于隐私:请查看隐私政策。
评论 (0)