Moonlight + NVIDIA SHEILD 局域网内高效串流方案

Posted by 橙叶 on Thu, Aug 20, 2020

之前写过一篇让RDP硬件加速并且跑到60帧,当时环境是Windows Server 2019,确实可以到60帧。但是换成最新的Windows 10系统后,修改注册表无济于事,而且还有各种报错……遂寻找其他局域网内串流的方式。

后来发现了Moonlight,这个软件利用NVIDIA SHEILD串流(本来是需要专门的SHEILD设备),有安卓、linux、windows等各种版本。NVIDIA SHIELD是Geforce Experience的一个功能,……只有n卡支持。实际效果相当不错,1080p 60帧很稳,画面效果也不错(没有RDP那么容易糊),最大可以设置150Mbps码率。

Moonlight项目地址: moonlight:https://github.com/moonlight-stream

首先需要在电脑端设置SHIELD,安装NVIDIA Experience,在设置中打开SHEILD,添加你想要串流的程序。如果要串流桌面,点击“添加”后选择C:/Windows/System32/mstsc.exe

然后在Moonlight中自动搜索出局域网下开启SHIELD的机器,经过口令校验即可连接。

在Moonlight的设置中可以设置帧率、分辨率(只是在客户机上显示的分辨率,不影响被控机)、码率。

快捷键:

  • Ctrl + Alt + Shift + Q 退出串流(应用保持运行)
  • Ctrl + Alt + Shift + Z 捕获鼠标箭头
  • Ctrl + Alt + Shift + X 切换全屏/窗口
  • Ctrl + ALt + Shift + S 左上角显示连接状态

视频效果可以说非常好,高码率设置下一点不糊(默认码率也没观察到明显的糊),颜色饱满,同时还能保持稳定的60帧传输,可以说是原生的体验(比Steam串流好得多)。毕竟是N卡的硬件级支持。

移动鼠标时还是会感到有延迟,这个延迟可以通过设置 高帧率(比如90帧120帧)来压低,90帧下鼠标的延迟就几乎感觉不到了。设置高帧率需要在设置中打开“Unlock unsupport FPS options”,然后设置60帧以上的帧率。注意帧率太高会引起画面撕裂。

但是Moonlight不能算得上真正的远程桌面,主要有以下几个问题:

  1. 无法在锁屏情况下连接(有时候可以,不知为何)
  2. 没有USB重定向
  3. 对客户机键盘的捕获有限,Win徽标键和Alt+Tab这样的按键都会被客户机捕获。

于是我又搭配了noMachine使用,这个是个功能相当齐全的远程桌面软件,支持USB重定向(可以把整个键盘接到远程电脑上),可以在锁屏的情况下连接。noMachine也有60帧的设置,但是实测效果不佳,所以仅仅是搭配使用。

注:NoMachine和Moonlight都无法实现RDP那样保持物理显示器那端是锁屏状态,而且要求有显示器负载,否则会出现严重的显示BUG。可以用假负载/显卡欺骗器来代替,HDMI转VGA的转换器也有同样功效,反正显卡上要插点东西就对了。



comments powered by Disqus