基于Miracast架构的无线显示器与GeForce Experience+Moonlight横向对比——串流投屏(局域网)个人向体验
由于本人对于硬件、驱动等方面知识的缺乏,本文仅从应用层出发,以博主个人的体验为主。
文章内下达的判断、使用的陈述等并不代表其在任何设备、环境下都能匹配。仅限参考。
环境
源PC主机(试图将其屏幕分享到其他屏幕上的设备):
- 系统版本:Windows 11 专业版 22H2(22621.1413)64位
- 一根华硕的无线网卡WIFI天线,主板的附带硬件,型号、规格未知
- NVIDIA 显卡驱动程序版本:528.49
- NVIDIA GeForce Experience 版本:3.27.0.112
- 显卡:索泰 GTX 1060 6GB
目标平板机(试图在自身控制、查看源PC主机桌面的设备):
- 设备:国行Microsoft Surface GO 8G 128G
- 系统版本:Windows 10 家庭版 22H2(19045.2486)64位
- Moonlight版本:Moonlight PC v4.3.1 Moonlight Game Streaming Project (github.com)
路由器
- 名称:AX1800M WIFI6 路由器
- 型号:JCG Q20
N卡相关的所有信息和Moonlight的版本对无线显示器这种串流方式来说是没有意义的,这里只是将其全部汇总一下。
另外,下文中的所有出现的“PC机”名词均为上述环境中的“源PC主机”,“平板”均为上述的“目标平板机”。
体感出来的结论
首先开门见山直接说结论,不同串流实现带来的差别其实还是比较明显,具体实现方面的流程就放后面,有兴趣的可以慢慢看。
基于 Miracast 协议的 Windows 系统官方提供的无线显示器串流实现普遍的比 GeForce Experience + Moonlight 要弱。
甚至于无线显示器串流在点对点直连的情况下,要比 GeForce Experience + Moonlight 串流经过路由器中转的还要不稳定,肉眼可见的画面撕裂、声音卡顿、控制延迟等,均偶有出现。
当然,无线显示器这种串流实现比“远程桌面”还是强很多的。
总之如果你要无线投屏,有N卡的情况下,认准NVIDIA GeForce Experience + Moonlight 就行了。在直连时(非路由器中转)看视频都看不出什么差异,仅有在打游戏时仔细瞧能瞧到部分画面错位,但基本也没太大的影响。
我没有做什么开秒表录屏然后一帧帧去对比这种测试,纯体感。
不同的人设备不同、驱动不同、系统不同、局域网架构不同,在环境相异时有可能会出现不一样的结果,就算开秒表去测,意义也不是很大。
下面具体说说两种方式,主要是我在过程中尝试过的所有实现,以及其中遇到的一些问题。
有部分疑难杂症我未在任何地方看到解决方法,只能降级实现。
串流实现——无线显示器
Windows 系统官方有一个叫做“投影到此电脑”的屏幕镜像功能,Win10/Win11都有,只不过系统默认不存在相关的驱动,你需要手动的开启相关服务获取它。
这个功能的底层基础架构实现的是 Miracast 协议,主要能做到的就是将屏幕内容无线投影到同一网络中的另一台计算机(或受支持的设备,例如智能电视)上面。
正常情况下,该功能是用来连接无线显示器而不是其他电脑的,但我们也不是不能用。
你可以通过
【设置】>【应用程序】>【应用程序和功能】>【可选功能】
或者
【设置】>【应用】>【可选功能】
进入到Windows的可选功能页面。
然后点击添加可选功能/查看可选功能,我们可以找到一个叫做【无线显示器】的模块,我们安装他后系统就能够支持串流。
目标设备(平板)和源设备(PC机)都要安装这个模块。
在平板上边:
直接进去【设置】>【系统】>【投影/投影到此电脑】,就可以设置作为拓展端/接受端/目标端的配置,主要是安全访问方面。
而在PC机上,要将本机的屏幕串流到平板上也很简单。
在【设置】>【系统】>【屏幕】里面,有个叫【多显示器】的Tab,在那个Tab里有个按钮,叫连接到无线显示器,我们点他就直接开始搜索,然后发现服务后直接连接就是。
在网络配置上,记得将你使用到的WIFI设置为专用。
如果你的多台设备都是连接在同一个WIFI网络上,比如通过你的路由器进行收发。那么互相之间的连接是不会出现什么问题的。
在出现问题时,你或许可以通过微软官方提供的措施来一步步测试你的连接。
Fix connections to wireless displays or docks in Windows – Microsoft Support
在我的操作之中,PC机连接上室内WIFI,平板也是连的相同WIFI。彼此之间都能发现、操控。
但是,这经过一道路由器中转始终是落了下乘,而且我用得那也是真的难受。
所以之后我又尝试直连,如最开始的环境所述,我的PC机是有一根外置天线的硬件的。那我肯定是想通过这条天线来直连,最大化体验。
不过很遗憾的是,尝试失败了,并且,未发现有人遇到和我相同的问题。
我在PC机上开启WIFI热点,使用平板连接上PC机的热点,然后在PC机上试图连接到平板串流。结果是:能够扫描到设备,平板的主机名也出现在了可用显示器的名单中,但是连接失败。
我通过在应用层面去删除设备、修改主机名的方式来验证,确定了是能够扫描到的,并非缓存。
PC机开启WIFI热点,试图点对点串流失败后,遂马上反向测试一波。
既然源主机开热点连接不到目标,那我在目标开热点,用源主机连接上去,然后在点对点串流呢?
我用平板开启WIFI热点,PC机连上后,试图连接到平板,而这回就成功了,不但能扫描到,同时也能连接上。
那么最终的结果就是这样(串流源始终为PC,串流目标始终为平板):
- 两个设备连接到第三方WIFI,局域网中怎么连都能连接上
- PC机上开启WIFI热点,让平板连接到这个热点——PC机可以发现平板,但是不能连接到平板
- 平板开启WIFI热点,PC连接到这个热点——PC机可以发现平板,同时也能连接到平板
好吧,经过一番挣扎,点对点的无线串流总归还是实现了的。
虽说并非是通过PC机的WIFI天线,而是通过平板本身的网卡来实现的,这让我对其速度和稳定性有一定的担忧……
微软官方有提供Surface Hub的无限显示器默认支持,虽然在这个设备上肯定有一些正常主机里并不存在的优化,但我们可以也可以借此参考:
现有无线网络或 LAN 上的 Miracast – Surface Hub | Microsoft Learn
对 Surface Hub 的显示投影进行故障排除 – Surface Hub | Microsoft Learn
由于电脑中存在系统、应用等程序,使用环境十分复杂,可能会导致投影存在问题。这几个官方文档的参考意义还是很大的。
串流介绍——GeForce Experience + Moonlight
在基于Miracast架构的无线显示器串流实现完成后,实际体验下来感觉还是不大行,回到最开始已经写过的结论你就明白,就算是点对点的无线串流也尚且不能称之为好用。
因此,我开始尝试使用英伟达从显卡硬件层面提供支持的投屏方案 —— NVIDIA GeForce Experience GameStream
软件层面我使用的是最新版本(截至2023.03.22)
下载 GeForce Experience | NVIDIA | GeForce
GeForce Experience 的 GameStream 功能(我们串流用到的功能)其实是专门为了给你打游戏用的,NVIDIA官方为了推广自己的设备(Shield TV),在硬件方面做了支持。
N卡的话,只要不是特别老,它都是直接从显卡中编码媒体信息,然后传输给你的其他屏幕,效率相当优秀。
而Moonlight呢,他是一个能对接NVIDIA提供的相关接口的串流客户端工具,需要注意的是,这是个开源软件,Windows/IOS/Android全都支持,估计英伟达官方很看不顺眼。
毕竟,你们都搁这用开源软件投屏了,还买他的设备干嘛。他们的硬件卖不出去,那还不如取消咯,所以……就给你准备取消了。
老黄再引公愤!删掉Shield TV游戏串流功能,逼玩家用云游戏
不过问题不大,道高一尺魔高一丈,我们完全可以用旧版本 + 断更新嘛!
GeForce Experience 绕过登录与禁止自动更新
串流实现——GeForce Experience + Moonlight
介绍完后,我们来具体的实现一下。
电脑端下载GeForce Experience,打开登陆后点击右上角齿轮。进入设置页面
左边菜单中选中SHIELD,将GAMESTREAM的滑块打开,即表示已经开启串流,开启后即可以被发现。
他默认是让你选择游戏的,我们要实现直接操作桌面的话,可以点击添加,输入 C:\Windows\System32\mstsc.exe
这个地址,将 mstsc.exe 添加进去,在串流是选择这个软件,就能实现桌面操控。
而Moonlight端呢,连上相同的WIFI直接扫描就行,如果没有发现设备,可以通过右上角的加号,输入你电脑的IP进行搜索。
成功串流后,要退出的话,直接组合键 Shift+Ctrl+Alt+Q
,就能够退出。
首先我试图直连串流,即PC机 >>> 平板,但是最终结果还是失败。
- PC机连接室内WIFI。
- PC机开启WIFI热点。
- 平板连接上PC机所开启的WIFI热点,实现直连。
结果:通过 Moonlight 无法发现PC主机
遂继续试图通过输入IP的方式
PC机开启热点后,热点使用的网段是137网段,于是我试图直接输入PC机的网关IP—— 192.168.137.1 尝试,发现不了,失败。
后续,我又尝试了给自己的PC机在137网段上设置一个静态IP,试图连接。
但很遗憾的是,还是失败了。嗯,我试了试,果然,和微软官方提供的无限显示器串流技术一样,源主机到目标设备这条道实在是走不通。
我最终使用PC机连接上了平板上开启的WIFI热点,走平板的网卡来串流,成功。
最终目的也算是达到了的,体验优良。
这是直连的情况,如果是通过第三方的一个WIFI设备来中转的话,即两个设备都连上相同的WIFI。那无论怎么都能连接的上。
另外,在串流的目标设备上,你可能通过Moonlight无论如何也扫描不到电脑。
你确定你的网络没有问题的话,那么可能会是被防火墙挡住了。
两种解决方式。
1、直接把防火墙关了,或者,在专用网络上把防火墙关了。
2、设置一下放行规则
在源主机上,打开: 控制面板\系统和安全\Windows Defender 防火墙\允许的应用
寻找下面2条服务
- GameStrean TCP
- GameStrean UDP
如果没有,则可以通过CMD(管理员权限)的方式输入以下的命令
netsh advfirewall firewall add rule name="GameStream UDP" dir=in protocol=udp localport=5353,47998-48010 action=allow netsh advfirewall firewall add rule name="GameStream TCP" dir=in protocol=tcp localport=47984,47989,48010 action=allow
添加成功后再做尝试。
完。