本文发自 http://www.binss.me/blog/cloud-gaming-yes/,转载请注明出处。

春节回乡,轻装上阵,把娱乐设备都留在了工作城市的居所。回想起去年因疫情无法复工,手头没东西玩只能把各平台的网剧都刷了一遍的悲惨经历,恰逢新拉的带宽有公网 IP,于是决定整一个远程游戏方案。

节前经过一周多的折腾,最终组合了一套方案,在整个春节期间,支撑着我远程云游戏 1080P 60FPS 玩原神,在此进行分享。

效果

居所:中国电信 500M / 50M 带宽,具有公网 IP

家:中国联通 200M / 20M 带宽,没有公网 IP

其他环境:中国电信 5G 网络接入

在测试了串流软件后,最终选中 moonlight ,连接稳定、配置丰富、各个平台 (PC / Mac / IOS) 都有客户端。我主要是用 Mac 接入,在 1080P 60FPS H265 的配置下,实时下载速率大概在 2MB/s 。

此外,当出门在外时,我会使用 iPhone + 雷蛇骑仕手柄进行接入,配合 5G 网络,实际体验也很流畅。

配置

接下来介绍如何配置。注意本文只针对 有公网 IP 的情况,没有公网 IP 需要考虑内网穿透,这个以前我也折腾过,无论是 frp 、zerotier 还是 tailscale ,都不是很稳定,现在想起来一把辛酸泪。在此建议有条件的朋友尽量搞个公网 IP ,避免折腾。

要使用 moonlight ,需要显卡是 N 卡,安装 Ndivia Experience 后在 设置 - shield 界面开启 GAMESTREAM ,然后添加想要远程玩的游戏,最后添加一个远程桌面(C:\Windows\System32\mstsc.exe) 防止万一。相关的配置网上有很多文章介绍,在此不做赘述。

目标串流机器使用固定 IP ,使用网线连接路由器。路由器上配置端口映射,将 47984 - 48010 的 TCP 和 UDP 都转发到目标串流机器的内网 IP 上。

然后打开 Moonlight 客户端,填入公网 ip 连接,在目标串流机器上填入验证码进行配对后即可开始串流游戏。

虽然在 Mac 上进行串流很顺利,但在 IOS 上遇到了点问题。首先,由于苹果的限制,app store 上下载的 moonlight 客户端是不支持连接公网 ip 的,会提示:

为此我在 https://github.com/moonlight-stream/moonlight-ios 上 clone 了一份代码,然后将 Limelight/Network/DiscoveryManager.m 中的:

if (prohibitedAddress) {
    callback(nil, prohibitedAddressMessage);
    return;
}

注释掉,自己编译一个版本装上即可。

这个办法有点折腾,后面我又想了一个新办法但由于懒没实现,有兴趣的朋友可以试试:在内网配置一个 ss server。moonlight 客户端指定串流机器内网 ip 地址,在 surge 类软件中配置 ip 规则将流量走内网的 ss server,变相绕过该限制,类似教程可参考 轻松访问家中的网络服务

此外还有一个坑,若 IOS 开启了 Quantumult X 的代理,会发现 moonlight 虽然能连上,但开始串流游戏的时候报某个端口连接失败,关闭代理后恢复,粗略看了下好像是 Quantumult X 对 rtsp 协议的支持有点问题,换用 Surge 则没有问题。

小结

折腾多年,终于实现了稳定的远程云游戏方案,高兴。