6、sunshine moonlight串流win11 - mugencomic/PVE_NAS GitHub Wiki
前面第二章讲过ipv6的基础部署。下文部署ipv6访问内网串流需要基于目前网络已经跑通ipv6。目前国内有民间推出的 皎月连 已经可以较低成本实现内网穿透,年费36元几乎赶上买域名的钱;此外还有网易Game Viewer这样的串流服务暂时还未收费。但参考Todesk,未来都将难逃收费命运。结合自身折腾的水平,考虑是否使用这些收费的服务。(收费也不代表完全不用折腾,甚至有的不兼容个别设备)
考虑到会有手机串流的需求,这就会涉及虚拟分辨率的问题。sunshine原版不支持,国内有基地版sunshine能够满足,因此建议部署之前了解下 国内版本 ,直接安装,省去卸载普通版本的麻烦。
同时配套的还有加强的 Moonlight ,监控面板更加迷你,多一些好用的功能,也能单独使用,强烈推荐
通过长时间的折腾,我总结出一个串流win较为靠谱的设置流程,参考 知乎这篇文章
- 网络设置
- 让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的入站规则即可。
- moonlight端设置
本地的其他电脑可以先试下局域网内串流,moonlight只要打开就可以自动搜到局域网内的host端(即本文的win11虚拟机)。首次对接需要在host提交pin码因此在此之前仍需要接上显示屏和键鼠在host端操作。有第一台电脑能实现串流之后,就可以用串流来帮其他新添加的终端(如手机、平板)填pin码。
手机配对host建议断开wifi,用移动网络来测试远程的连通性。在内网即便是用ipv6域名来访问host,本质也是不通过wan口,也就是不受防火墙影响的。反过来说如果手机在内网能用域名连上,但外网连不上,则说明防火墙不通。
- 虚拟显示器分辨率
原版sunshine会自动安装亿个分辨率很低的虚拟显示器,没法改手机平板分辨率。在早些时候会用到 HDMI诱骗器 这类产品来实现某种程度上的自定分辨率以及防止息屏。不过魔改后的sunshine+moonlight组合可以在获取moonlight的分辨率请求之后,通过Nvidia的GFE生成一个虚拟显示器并且按需设置为主屏或拓展屏,满足各种串流场景。经测试可以在手机上以手机分辨率正常使用。设置过程相对PVE算简单的了,如果是之前装过sunshine,则需要借助三方软件彻底清除旧的虚拟显示器驱动,否则新装的虚拟显示器无法正常启动。
- 串流码率
目前ipv6的普及度在逐渐提升,公共场所的wifi都能够给到ipv6地址。串流首要担心的并不是ipv6地址,而是速率
综合考虑串流机硬件的能力、网络条件、手机续航。合理的串流分辨率应该就是1080P+60帧。这时推荐的码率去到20mbps。对于目前5G手机环境来说可以轻松达到这一速率,但一般的套餐流量可不一定扛得住。 更糟糕的是,公共场所的wifi、公司wifi使用的路由器往往给不到这么大的速率。带机量上来之后能分给一台设备的速率甚至可能低至2m。这样的速率带游戏画面肯定是满屏马赛克+间歇卡顿的。
建议出门游玩时,码率控制在5-6m。如果此时wifi不会出现卡顿,说明速率可以满足。如果卡顿则直接断开wifi换蜂窝数据网络进行串流,流量的负担也不会太大。