用SRS搭建一个私人直播平台

初衷是想给朋友直播一些游戏或者一起看剧看番这类需求,但一是在b站等公共平台有审查,且不说一堆黄赌毒,或者比较暴力血腥的游戏都不能播,版权问题也很麻烦;腾讯会议这类比较私密的方式又会限制码率(其实b站也会),播游戏会又卡又糊,于是打算搭一个小型直播平台。

想给朋友直播一些游戏或者一起看剧看番,但一是在b站等公共平台有审查,且不说一堆黄赌毒,或者比较暴力血腥的游戏都不能播,版权问题也很麻烦;腾讯会议这类比较私密的方式又会限制码率(其实b站也会),播游戏会又卡又糊,于是打算搭一个小型直播平台。

起初在群里看到有人用syncplay和对象一起看电影(可恶啊!),想到以前和朋友看剧也有点麻烦,遂去了解了一下syncplay。这软件只能同步播放进度,同步播放暂停等等功能,只支持桌面端的几个播放器,比如mpv,mpc-hc等等,而且还要事先给所有人分发视频文件,对于非技术向人群还是不够友好。

选择困难症

于是就想干脆搭个直播平台吧。这样在obs加东西也比较方便,什么都能播。咨询GPT之后给出几个方案:

  1. Nginx RTMP

  2. SRS (Simple Realtime Server)(最终的方案)

  3. Ant Media Server

  4. NMS(Node-Media-Server)

gpt的总结:

工具 难度 优点 适用场景
Nginx RTMP ⭐⭐ 稳定、高效 传统 RTMP 推流
SRS ⭐⭐ 支持多协议、低延迟 实时流媒体传输
Ant Media Server ⭐⭐⭐ 支持 WebRTC、企业级 低延迟互动需求
Node-Media-Server ⭐⭐⭐ 基于 Node.js,易扩展 前端开发者

其他几个都没有尝试,使用体验略。

我问GPT SRS怎么用的时候他让我要么用WSL要么docker装,感觉都有点麻烦,,遂去看文档,发现其实SRS有Windows版。

SRS文档

有一说一我觉得这个文档,,可能是语言风格的问题,让人感觉并非非常,有文档的感觉。更像是我这种博客的语言风格,快速起步感觉也不是很傻瓜化,介绍不是很多。不过我docker和Linux用的都不多是真的

Windows服务端是可以正常用的,在电脑上开个服务端再开个OBS推流到本机就可以在内网看到直播了。但本人的笔记本经常移动,网络环境不固定,不太适合外网访问,于是打算把SRS部署到群晖上。

转移阵地

部署说难也不难,毕竟DSM上有docker。下好镜像之后部署一下,记得把8080和1935端口都打开就行了。8080是访问web服务的,1935是RTMP推流端口。

这次只搞了RTMP,WebRTC之类的就没弄了,基本都是默认配置没动过。

部署完之后访问NAS的8080端口即可看到欢迎页

欢迎页

SRS控制台

直播页

服务器资源监控

NAS的CPU是J3455,内存8G,直播时资源监控如图。

在OBS的推流设置填入NAS的IP和密钥(也可不填密钥)然后推流即可在内网访问直播页。

如果要在外网访问,首先你需要一个公网IP和一个域名,域名映射到你的服务器上(我这里是NAS),然后在路由器的端口映射把NAS的8080和1935映射到你想要的端口号。

DSM上可以设置反向代理,我把内部的8080映射到了域名的8080端口,不知道这一步是不是需要的。

然后就可以在外网用域名+端口号访问SRS了,也可以让你的朋友推流到这个网址了。

由于没加推流密钥没有鉴权,所以任何知道网址的人都可以推流,但我也没研究怎么加密钥,所以解决方法是不用的时候把srs的服务关掉,以后研究一下安全问题。

此外HTTPS也没整。

以上。这只是一个勉强能用的无审查直播方案,但问题还很多。除了上面提到的问题,现在本人这里pc可以访问播放页,手机关掉代理(可能是使用的域名不在规则里会自动走代理)之后wifi和流量都可以访问,但朋友那边只能用手机流量访问而推流正常,原因不明。