2023 年,正确使用 PS5 原生推流到 B 站

2023 年,正确使用 PS5 原生推流到 B 站

昨晚折腾了一晚上,就为了实现 PS 直接推流到 B 站直播。开始之前以为劫持 Twitch 还是挺简单的,实际操作起来还是遇到了不少的问题。记录一下留给有需要的朋友。

准备工作

开始之前,你的 PS5 应该已经登录了 Twitch 服务。

如果你没有软路由设备,可选一台设备能提供旁路网关的功能,因为你需要劫持 DNS 解析,并且能操作 iptables 进行流量转发(必须,仅重写 DNS 现已无法实现)。软路由一般都具备这些功能。

如果你没有软路由设备,可以尝试在虚拟机中安装一个 Linux 作为旁路网关。 如果你使用 macOS,可以使用 Surge 等软件实现网关的功能。

以我的设备为例:

  • OpenWrt 网关: 10.0.0.2
  • Arch IP: 10.0.0.106
  • PS5: 10.0.0.102
  • macOS: 10.0.0.101

上面的地址需要记住前两个即可。Arch 是我用来挂 Docker,Docker 里跑推流服务的。原理就是劫持 PS5 推流的流量转发到 Arch 中的 Docker。macOS 就可以通过 Arch 来获取流再用 OBS 推到 B 站。

部署 Docker 镜像

在我的 Arch (10.0.0.106) 上部署 Docker 容器。

BASH
docker pull bao3/playstation
docker run -d -it -p 0.0.0.0:8888:80 -p 0.0.0.0:1935:1935 --restart always --name ps5living bao3/playstation
Copy

这边我把 Web 端管理映射到了 8888 端口,在内网可以用 10.0.0.106:8888 进行访问。

DNS 重写和流量转发

在网关(10.0.0.2),修改 hosts 文件。增加一行:

*.contribute.live-video.net 10.0.0.106
Copy

或者。使用 ADGuard Home 的 DNS 重写。

然后需要把 live.twitch.tv 的流量转发到 Arch (10.0.0.106)。使用 iptables,用 hosts 和 DNS 重写无效。

首先查询 live.twitch.tv 的 IP 段。

BASH
$ dig live.twitch.tv

# ; <<>> DiG 9.11.5-P4-5.1-Debian <<>> live.twitch.tv
# ;; global options: +cmd
# ;; Got answer:
# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36451
# ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1
#
# ;; QUESTION SECTION:
# ;live.twitch.tv.                        IN      A
#
# ;; ANSWER SECTION:
# live.twitch.tv.         600     IN      CNAME   live.video.twitch.tv.
# live.video.twitch.tv.   600     IN      CNAME   live-beta.video.twitch.tv.
# live-beta.video.twitch.tv. 600  IN      CNAME   live-hkg.twitch.tv.
# live-hkg.twitch.tv.     600     IN      A       45.113.128.181
# live-hkg.twitch.tv.     600     IN      A       45.113.128.147
# live-hkg.twitch.tv.     600     IN      A       45.113.128.110
#
# ;; Query time: 312 msec
# ;; SERVER: 192.168.123.1#53(192.168.123.1)
# ;; WHEN: Fri Sep 13 15:14:30 CST 2019
# ;; MSG SIZE  rcvd: 321
Copy

我们可以看到记录有 3 个 IP,都在 45.113.128.0/24 中,所以我们就 DNAT 这个网段的 1935 端口到 Arch(10.0.0.106)的 1935 端口就行。

在网关(10.0.0.2)上执行:

BASH
iptables -t nat -I PREROUTING -d 45.113.128.0/24 -p tcp --dport 1935 -j DNAT --to-destination 10.0.0.106:1935
Copy

PS5 开启 Twitch 直播

PS5 的网关指向 10.0.0.2,开启直播。没有意外的话,在 mac 打开 10.0.0.106:8888 这个地址就能显示在 app 下面了。

此时,打开 OBS,添加 媒体源,取消本地文件的复选框,填写 rtmp://10.0.0.106:1935/app/live_884958670_oI4yCxIRHzlBJzmxCQ9hNFgo7iIGji。就能显示 PS5 的画面了。live_ 后面的替换成自己的。

如果 PS5 无法开启直播,提示「目前其他设备正向同一个频道进行播放」。可以看看路由器防火墙是不是禁止了 1935,2805-2899,6667 端口。或者是富强插件只做了常用的端口转发都有可能。

参考