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 自适应,兼容电脑和手机浏览器。

使用体验

我自己用的时候大概是这样的:

  1. 打开 OBS,填好推流地址和 token,开始推流;
  2. 把直播间网址发给朋友;
  3. 朋友打开网页,自动开始播放,旁边就是聊天区;
  4. 我在后台登录管理员,可以随时管理消息。

整个过程没有复杂的客户端,朋友只需要一个浏览器。

部署

LiveChat 面向通用 Linux 环境,使用 Docker 部署:

docker compose up -d --build

然后用 Nginx 或 Caddy 反代到 127.0.0.1:3010

SSL 证书推荐用 Certbot 自动申请(当然我用的1panel:beaming_face:):

certbot --nginx -d live.example.com

如果用 Caddy,连证书都不用管:

live.example.com {
    reverse_proxy 127.0.0.1:3010
}

SRS 直播服务由用户自行部署,LiveChat 只负责聊天、管理和推流鉴权对接,两者互相独立。

最后

这个项目不算大,但很实用。它让我拥有了一个只属于自己和朋友的游戏直播间:低延迟、有聊天、无广告、不公开。

如果你也喜欢自己折腾,想搭一个给朋友看的私人直播间,可以参考这个思路。