6、sunshine moonlight串流win11 - mugencomic/PVE_NAS GitHub Wiki

前面第二章讲过ipv6的基础部署。下文部署ipv6访问内网串流需要基于目前网络已经跑通ipv6。目前国内有民间推出的 皎月连 已经可以较低成本实现内网穿透,年费36元几乎赶上买域名的钱;此外还有网易Game Viewer这样的串流服务暂时还未收费。但参考Todesk,未来都将难逃收费命运。结合自身折腾的水平,考虑是否使用这些收费的服务。(收费也不代表完全不用折腾,甚至有的不兼容个别设备)

考虑到会有手机串流的需求,这就会涉及虚拟分辨率的问题。sunshine原版不支持,国内有基地版sunshine能够满足,因此建议部署之前了解下 国内版本 ,直接安装,省去卸载普通版本的麻烦。

同时配套的还有加强的 Moonlight ,监控面板更加迷你,多一些好用的功能,也能单独使用,强烈推荐

通过长时间的折腾,我总结出一个串流win较为靠谱的设置流程,参考 知乎这篇文章

  1. 网络设置
  • 让windows生成固定后缀的ipv6地址

在win虚拟机中,管理员模式打开powershell,输入 Set-NetIPv6Protocol -RandomizeIdentifiers Disabled

这样windows开机生成的地址就遵从MAC地址特征,后缀会固定,这是后续防火墙设置转发的关键。

  • DDNS方法一

参考第二章ipv6,如果电脑是通过DHCPv6方式获得的ipv6地址,可以使用这个方法。

openwrt下使用 DDNS-GO 或者 Lucky大吉插件 (后者是socat+DDNS+webhook+证书管理综合插件) ,结合

INTERF=br-lan; SUFFIX="6dcb:1863:2bd1:b28f"; ip -6 addr show dev $INTERF | awk '/inet6/ && !/fe80::|deprecated/ {print $2}' | cut -d':' -f1-4 | sed "s/$/:$SUFFIX/"

命令获取局域网内win虚拟机的地址,其中 6dcb:1863:2bd1:b28f 为虚拟机ipv6地址后缀,是由mac地址固定生成。上一步操作让win生成的ipv6地址带有固定的后缀,让这一步在路由DDNS成为可能

貌似电脑通过SLAAC获得的地址无法通过命令提取到,测试命令返回空。只能使用方法二

  • DDNS方法二

直接在win上部署DDNS-GO,设好参数开机运行即可。省去输入命令这一步骤,但多了设置开机计划任务和安装DDNS-GO步骤。

  • 端口转发

通常防火墙规则写个ipv6地址,地址一变就失效了。所以应对前缀会变化的ipv6地址,运用写掩码的方式让端口转发持续有效。

以常见的64位后缀为例,假设win虚拟机的IP地址为 AABB:CCDD:EEFF:1122 (每组前面有0的时候可以省略0,因此某些MAC地址转换后看起来少一位)

那么写防火墙规则的时候,可以使用掩码 ::AABB:CCDD:EEFF:1122/-64 代表后缀是这个IP,前面添加任意64位前缀的ipv6地址。端口转发一定要加IP才能正确工作,LAN区域任意是找不到你的。

使用端口

sunshine需要用到以下六个端口,图为防火墙配置完后的样子

UDP 47998, 47999, 48000

TCP 47984, 47989, 48010

  • 防火墙

一般安装sunshine的时候弹出的windows提示已经打开了sunshine的所有端口,win的防火墙不会造成影响

注意仅单勾选允许使用“公用网络”或“专有网络”时,将来网络属性变成了另一个的时候,可能就又会被防火墙拦下 如果突然出现了被拦,在win里搜索“防火墙”找到 高级安全Windows Defender防火墙 ,重新添加sunshine的入站规则即可。

  1. moonlight端设置

本地的其他电脑可以先试下局域网内串流,moonlight只要打开就可以自动搜到局域网内的host端(即本文的win11虚拟机)。首次对接需要在host提交pin码因此在此之前仍需要接上显示屏和键鼠在host端操作。有第一台电脑能实现串流之后,就可以用串流来帮其他新添加的终端(如手机、平板)填pin码。

手机配对host建议断开wifi,用移动网络来测试远程的连通性。在内网即便是用ipv6域名来访问host,本质也是不通过wan口,也就是不受防火墙影响的。反过来说如果手机在内网能用域名连上,但外网连不上,则说明防火墙不通。

  1. 虚拟显示器分辨率

原版sunshine会自动安装亿个分辨率很低的虚拟显示器,没法改手机平板分辨率。在早些时候会用到 HDMI诱骗器 这类产品来实现某种程度上的自定分辨率以及防止息屏。不过魔改后的sunshine+moonlight组合可以在获取moonlight的分辨率请求之后,通过Nvidia的GFE生成一个虚拟显示器并且按需设置为主屏或拓展屏,满足各种串流场景。经测试可以在手机上以手机分辨率正常使用。设置过程相对PVE算简单的了,如果是之前装过sunshine,则需要借助三方软件彻底清除旧的虚拟显示器驱动,否则新装的虚拟显示器无法正常启动。

  1. 串流码率

目前ipv6的普及度在逐渐提升,公共场所的wifi都能够给到ipv6地址。串流首要担心的并不是ipv6地址,而是速率

综合考虑串流机硬件的能力、网络条件、手机续航。合理的串流分辨率应该就是1080P+60帧。这时推荐的码率去到20mbps。对于目前5G手机环境来说可以轻松达到这一速率,但一般的套餐流量可不一定扛得住。 更糟糕的是,公共场所的wifi、公司wifi使用的路由器往往给不到这么大的速率。带机量上来之后能分给一台设备的速率甚至可能低至2m。这样的速率带游戏画面肯定是满屏马赛克+间歇卡顿的。

建议出门游玩时,码率控制在5-6m。如果此时wifi不会出现卡顿,说明速率可以满足。如果卡顿则直接断开wifi换蜂窝数据网络进行串流,流量的负担也不会太大。