Live Chat,直播我直播给朋友看
我搭了一个给朋友看的游戏直播间
平时玩游戏,偶尔想叫几个朋友一起看。用大直播平台当然可以,但广告多、延迟不稳定,而且路人也能进来,总觉得不够“私人”。
所以我干脆自己搭了一个小直播间:自己推流,朋友打开网页就能看,旁边还能实时聊天。
这套东西是什么
整个方案由两部分组成:
- 直播流服务:负责接收推流、分发播放地址。我使用的是 SRS,这部分由我自己部署和维护。
- LiveChat:我写的一个网页聊天室,负责直播间的聊天、管理员管理,以及推流鉴权。
简单说就是:
OBS 推流
│
▼
SRS 直播服务(自行部署)
│
▼
朋友浏览器播放画面 + LiveChat 聊天
LiveChat 本身是一个独立的 Node.js 项目,不绑定具体的直播服务,通过接口和 SRS 对接。
为什么这样搭
选择自己搭,主要是为了这几个体验:
- 给朋友看,不公开:推流地址带 token,只有知道地址和 token 的人能推流,陌生人顶不了流。
- 低延迟:支持 WebRTC、FLV、HLS 自适应播放,朋友网络好的时候可以做到接近实时。
- 有聊天:朋友边看边聊,比拉语音群更有“一起看”的感觉。
- 没有广告:自己搭的页面干干净净,没有平台推流、没有贴片广告。
- 管理自由:有人刷屏或乱说话,我可以禁言、删消息,甚至踢出去。
LiveChat 的功能
LiveChat 是我这个直播间里的“聊天 + 管理”部分:
- 实时文字聊天,基于 WebSocket;
- 新朋友进来自动加载最近的历史消息;
- 显示当前在线人数和观看人数;
- 断线自动重连;
- 管理员口令登录后可以:
- 删除消息;
- 按分钟禁言;
- 解除禁言;
- 踢人下线;
- 每个 IP 3 秒最多发 1 条消息,防止刷屏;
- 提供 SRS
on_publish推流鉴权回调,防止陌生人推流。
技术架构
浏览器
│
│ HTTPS / WSS
▼
Nginx / Caddy 反向代理
│
▼
LiveChat Web 服务(Node.js + Express + ws)
│
▼
MariaDB / MySQL(历史消息、禁言列表)
- 后端:Node.js + Express + ws;
- 数据库:MariaDB / MySQL;
- 前端:原生 JavaScript,没有重框架;
- 播放器:WebRTC / FLV / HLS 自适应,兼容电脑和手机浏览器。
使用体验
我自己用的时候大概是这样的:
- 打开 OBS,填好推流地址和 token,开始推流;
- 把直播间网址发给朋友;
- 朋友打开网页,自动开始播放,旁边就是聊天区;
- 我在后台登录管理员,可以随时管理消息。
整个过程没有复杂的客户端,朋友只需要一个浏览器。
部署
LiveChat 面向通用 Linux 环境,使用 Docker 部署:
docker compose up -d --build
然后用 Nginx 或 Caddy 反代到 127.0.0.1:3010。
SSL 证书推荐用 Certbot 自动申请(当然我用的1panel😁):
certbot --nginx -d live.example.com
如果用 Caddy,连证书都不用管:
live.example.com {
reverse_proxy 127.0.0.1:3010
}
SRS 直播服务由用户自行部署,LiveChat 只负责聊天、管理和推流鉴权对接,两者互相独立。
最后
这个项目不算大,但很实用。它让我拥有了一个只属于自己和朋友的游戏直播间:低延迟、有聊天、无广告、不公开。
如果你也喜欢自己折腾,想搭一个给朋友看的私人直播间,可以参考这个思路。