搭建自己的直播服务器实现低延迟直播
Docker

搭建自己的直播服务器实现低延迟直播

⚠️
已找到了更好的方案,见下一篇
🤗
有和朋友偶尔屏幕分享的需求,但是发现市面上的一些产品都不尽人意,要不就是画质太低,帧率太低,要不就是有时间限制。所以就突发奇想,为什么不自己搭建一个呢?踩了许多坑之后,终于发现一个简单易上手又好用的方案

前言

这不是一个教程,这篇文章是基于我自己的实践经验写的,只是想记录一下当时的做法。如果你也想要搭建一个自己的直播服务器,我强烈建议阅读官方的入门文档,并根据你的需要调整这些步骤。
使用的项目是SRS,一个国人大佬开发的直播流服务
SRS是一款简单、高效、支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH、GB28181的实时视频服务器。

最终效果展示

首先推流到直播服务器
使用OBS推流
使用OBS推流
打开网页来观看直播流
notion image
测试延迟
左边是打开的网页来观看直播,右边是直播的屏幕
左边是打开的网页来观看直播,右边是直播的屏幕
可以看到延迟只有1秒左右

搭建

准备工作

  • 一台有公网ip的Linux服务器
  • 我搭建的环境为
    • Ubuntu 22.04
    • Docker Engine - Community 25.0.2

启动服务

官方推荐使用Docker来启动服务

Docker Compose

更推荐使用docker compose来启动服务,更加容易维护
创建一个文件夹,然后在文件夹下创建docker-compose.yml文件把下面内容复制进去后保存退出
services: srs: image: ossrs/srs:5 ports: - 1935:1935 - 1985:1985 - 8080:8080
这里推荐一个网站,可以把docker run命令转换成docker compose:
启动服务,要在docker-compose-yml所在的目录执行
docker compose up -d

测试

查看docker正在运行的容器
docker ps
看看相应的端口是否被成功映射了
notion image
  • 8080: 网页客户端,用来管理和拉流
  • 1935: 直播要推流的端口
  • 1985: rtc端口,暂时用不到
没问题的话,可以打开网页客户端http:/服务器地址:8080/ ,注意云服务器要在网页管理面板里把8080和1935端口打开
正常的话会显示这样的界面
notion image

直播推流

打开OBS,选择设置→直播
  • 服务:选择自定义…
  • 服务器:rtmp://服务器地址:1935/live
  • 推流码:livestream
    • 这个其实可以随便设定,默认的就不用每次打开客户端修改观看的地址了
设定完成之后,就可以开始愉快的直播了
绿色信号就表示推流成功
绿色信号就表示推流成功

OBS设置

为了降低观看的延迟,需要做一些小小的设置,视频编码器选择NVIDIA NVENC H.264,用显卡进行编码效果很好
notion image
只要设置了这么几项,就可以把延迟缩小到1秒左右
  • 输出模式:高级
  • 关键帧间隔:1s
  • 调节:超低延迟
  • 配置:baseline
如果使用CPU进行编码
notion image

客户端观看

前往客户端页面,点击SRS播放器,然后点击Play
notion image
如果你之前设置了自定义的推流码,只要把URL里的网址改成把最后部分改成你的推流码就行
http://服务器地址:8080/live/你的推流码.flv

总结

在服务器上搭建了直播服务器,通过OBS推流到服务器,然后在用网页来观看直播