2023 年,正确使用 PS5 原生推流到 B 站
昨晚折腾了一晚上,就为了实现 PS 直接推流到 B 站直播。开始之前以为劫持 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 容器。
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
这边我把 Web 端管理映射到了 8888 端口,在内网可以用 10.0.0.106:8888
进行访问。
DNS 重写和流量转发
在网关(10.0.0.2),修改 hosts 文件。增加一行:
*.contribute.live-video.net 10.0.0.106
或者。使用 ADGuard Home 的 DNS 重写。
然后需要把 live.twitch.tv
的流量转发到 Arch (10.0.0.106)。使用 iptables,用 hosts 和 DNS 重写无效。
live.twitch.tv
不能通过 DNS 修改,如果被修改,就会出现无法播放的错误代码!首先查询 live.twitch.tv
的 IP 段。
$ 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
我们可以看到记录有 3 个 IP,都在 45.113.128.0/24 中,所以我们就 DNAT 这个网段的 1935 端口到 Arch(10.0.0.106)的 1935 端口就行。
在网关(10.0.0.2)上执行:
iptables -t nat -I PREROUTING -d 45.113.128.0/24 -p tcp --dport 1935 -j DNAT --to-destination 10.0.0.106:1935
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_
后面的替换成自己的。