Spacedesk在移动设备上扩展显示卡顿的优化方案的优化方案


Spacedesk是什么

不知道各位有没有这样的经历,假期回家或者出差时想工作,却只带了小屏幕笔记本和平板或者手机,这样工作起来远远没有工位或者宿舍架设的大显示屏来的有效率,那该怎么办呢?Spacedesk,这款软件可以通过局域网连接安卓/iOS设备/另一台Windows或其它系统电脑/,作为PC的副屏幕。
屏幕可以用从设备上的鼠标/触摸屏/触控笔控制。
不仅可以投屏,还可两屏合一,甚至多屏合一(Video Wall)使用。
音频可以路由至从设备。
以及免费!!!

主机-从机模式,截至目前,主机服务只能运行在Windows7及以上系统,从机软件可运行在iOS、Android,或者使用Spacedesk Viewer运行在另一台安装Windows系统的电脑上。也可以使用Spacedesk HTML5 VIEWER运行在任何支持HTML5的浏览器上。
Spacedesk在从机上支持触摸、键盘、笔作为输入设备,安卓设备还支持将电脑音频转移至本机播放。转移后的音频如何使用就完全按安卓的一套来了,例如没有蓝牙的电脑可以将音频转移到手机上,然后手机连接蓝牙耳机,and VOILÀ,无线蓝牙音频。当然延迟怎么样就不好说了。

当然也可以利用屏幕复制选项实现在局域网内的共享屏幕和控制、音频路由,适用于例如在没有投影仪的情况下讲解等情形。

甚至,对于有多台吃灰设备的垃圾佬来说,可以使用Spacedesk提供的Videowall Engine,实现拼合多个设备,组成更大显示器的功能。组成Video Wall的各个设备都可以独立调整在拼合显示屏内的位置、分辨率和自身的旋转角度,来组成你自己的超级大屏(延迟另说,至少打游戏别想了,看个电影应该还是不错的)。Videowall功能可以在主机端的Spacedesk Driver Console窗口左侧的CONTROL选项卡下进行开关。

Spacedesk在移动设备上扩展显示卡顿的优化方案的优化方案

一般而言,使用Spacedesk的目的主要还是将平板等设备用作显示器扩展,例如作为副屏显示相对静态的文档、网页,或者播放视频。应用于具备很强交互特性的环境中时,由于Spacedesk的图像传输带来的延迟,与网络环境和带宽、不合理的分辨率、编码方式、图像质量设置造成的卡顿,会给使用带来较大的困扰。

兼容性

Spacedesk对驱动程序的兼容性有一定要求,存在不兼容的驱动时会提醒进行卸载,例如相近功能的TwomonUSB,否则不会启动。另外主机端注意:

N卡需要更新驱动,保证驱动在461.09以上版本,否则可致系统蓝屏

使用

将安装好Spacedesk并且运行了应用的电脑和平板/手机设备连接到同一局域网下,在从机端界面选择要连接的主机IP,不分设备,只要能够正常安装上应用即可。华为平板没有谷歌全家桶,同样能够正常使用。

  • 但是有一点需要注意:

Spacedesk主机端服务只要在运行,任何连接到同一局域网的从机设备都可以进行连接而不需要任何许可!是的,主机上只能查看有哪些从机设备连接并手动删除,但是连接时连确认按钮都不会弹一个!即便主机端已经锁定也可以连接,并且输入控制的选项在从机侧进行控制,主机端无法控制,也就是说从机侧除了主屏幕无法操作外,完全可以获得控制大半个电脑的控制权。
论坛页回复,今后会添加密码设置功能 ("Nevertheless there will be a password option within the next few months."[2021.09.13]),这是链接

从设备应用设置

如果只用到扩展屏幕的功能,主机软件几乎没有需要设置的地方。因此只讨论从设备设置:

  • 从设备分辨率
    建议设定在合理范围,毕竟作为电脑副屏,在10寸左右的屏幕上按原生2K左右的分辨率看文字还是挺难受的。推荐1600x900,不要觉得没用上原生分辨率很可惜,毕竟放着也是吃灰(逃)。总之根据视觉效果和网络连接条件调整。

  • 位深
    建议直接24bit(RGB888),不然图像色彩过渡会有明显条带。

  • 编码方式&图像质量
    根据视觉效果和网络连接条件调整。比较合理的起始值大概是:

Encoding Color Depth:Low color quality, fast speed (YUV 4.2.0)
Image Quality: 大概拉到70%的样子

目前Spacedesk使用的是JPEG编码,需要在CPU上完成,在副屏分辨率1600x900的情况下播放全屏视频,Spacedesk在i5-8300H上典型占用12%左右,CPU占用率和网络传输速率随着扩展屏的数量、分辨率、显示内容非静态部分的尺寸增加而增加。未来可能会支持H.264,使用GPU进行编码工作。

如何通过USB设备连接以降低延迟和减少卡顿?

显然一般的平板设备是没有网口的,可选的接入方式几乎也就只有wifi一种。Spacedesk只提供了通过局域网进行屏幕扩展的功能,并没有自带USB扩展的功能。当然,多种软件对比下,首先Spacedesk进行屏幕扩展免费并且不限数量,其次通过网络的方式有很高的灵活性,接入多台设备也很方便,不会有线缆/接口数量方面的困扰,在实现USB连接的情况下(下面探讨),可以使用混合有线/无线连接的方式,有针对性地对扩展屏幕进行优化。TwomonUSB和Wired XDisplay都需要付费(官网见文末),并且驱动程序和Spacedesk不兼容,因此没有直接选用专门通过USB扩展屏幕的方案。

那么问题来了,Spacedesk在wifi环境下存在明显的延迟,图像质量也受网络环境影响,即便在5G频段的wifi下调低分辨率和图像质量,偶尔的卡顿也是存在的,比较影响使用体验。当然,完全显示静态页面是无所谓的。为了能够流畅播放视频、稍微降低延迟,由于Spacedesk只能通过局域网走,那么我们能不能换一种思路,将移动设备用USB线和主机连接起来,并使用某种方式让网络流量在USB上传输呢?

  • 对于安卓设备,我们可以按照 这个解决办法 ,使用安卓设备提供的RNDIS功能,将安卓设备通过USB接口,虚拟成一个网卡并接入到我们的主机中。在主机中依次点击网络和Internet设置-更改适配器选项,在打开的界面中我们能看到多了一个Remote NDIS based Internet Sharing Device的设备,这便是安卓设备虚拟出的网卡。如果安卓设备中找不到RNDIS,那么有可能某些厂家将其命名为USB网络共享的选项,否则尝试这个链接启用功能。在Win10中,RNDIS驱动会在设备连接时自动安装。
    Spacedesk在移动设备上扩展显示卡顿的优化方案的优化方案

  • 对于iOS设备,可以通过 这个解决办法 ,实现类似安卓下RNDIS的方案。

至此,我们已经完成了从设备和主机之间通过USB实现网络连接的全过程。如果从设备,也就是用来作为扩展屏的Android/iOS设备,同时连接了主机所连接的网络,也就是说,除了USB实现的网络连接之外,主机还通过wifi、有线网络连接等方式处在另一个局域网中,那么在从设备上搜索时会存在两个甚至多个不同IP地址但相同名称的server,也就是主机。为了区分主机通过wifi、有线网络连接和USB实现的扩展服务,需要重复之前提到的:

  • 点击网络和Internet设置-更改适配器选项-双击[从设备通过USB实现的网络适配器]-详细信息-找到[IPv4地址]

不清楚IP地址是什么?没关系,接下来为了确保我们的扩展屏数据通过我们指定的方式传输,在从设备上选择和上一步得到的IP地址相同的IP地址进行连接即可。例如,从设备通过wifi连接至主机连接的网络,同时通过USB网络共享连接至主机,打开从设备上的Spacedesk软件,搜索出两个名为

  • DESKTOP-ABCDEFG(Windows10) Connection:192.168.1.10
  • DESKTOP-ABCDEFG(Windows10) Connection:192.168.52.50

的扩展服务,而在主机上找到的、由从设备所提供网络分配的IP为

  • 192.168.52.50

就是它没跑了对吧?在从设备上点击这一项进行连接,即可通过USB实现较低延迟、无卡顿的扩展屏服务。


The End?

当然不是。写到现在不过是对 这个解决办法 的简单重复。使用这种方法能够实现无卡顿、低延迟的扩展屏功能,但是,如果从设备也连接了具备网络的wifi或者具备数据连接,我们的电脑可能会通过从设备提供的网络适配器进行联网,那么相当于网络连接中多了一层中转,例如你在玩游戏/看B站,可能会面临USB(特别是USB2.0并且扩展屏图像质量设置较高的情况下)同时传输显示数据和一般网络数据造成的卡顿,以及中转带来的额外的延迟。另外:

Windows会默认我们的从设备虚拟出的网卡为普通连接,并不会进行流量限制,而且Windows的网络切换在后台静默运行,不主动查看的话用户是无法感知的。如果你不希望在收藏小姐姐的时候手机流量费用爆炸...

理想情况下,应该是Spacedesk的流量通过从设备提供的网络适配器进行传输,其余流量保持正常方式,即通过电脑本身连接的wifi/有线网络进行传输。

  • 最简单的办法就是关闭从设备的wifi/流量连接,当windows检测到通过从设备提供的网络无法访问互联网时,会自动退回到有网络的连接。

That's it?
Nope.

如果从设备例如手机也需要wifi连接,或者必须保持数据连接呢?
在Win10中,我们不能单独地修改网卡的优先级,因为这项功能被砍掉了。但是可以通过修改网络适配器的跃点数,间接实现优先级的功能。

跃点数

跃点数(Hop count / Interface metric)代表了一包数据从源出发,需要经过多少个中间节点才能到达目的地。一般而言,经过越多的中间节点意味着更高的时延和出错率,Windows默认每个网卡的跃点数自动管理,也可以取消自动管理,并手动给单个网卡分配跃点数。

接口跃点数值越低,代表网卡或网络优先级越高;反之数值越大,优先级越低。

具体设置步骤参考:如何配置网络优先顺序,调整 Windows 10 网卡优先级以及配置网络接口顺序
为了一劳永逸,可以直接将跃点数设置为1000,确保正常应用都不会通过从设备进行网络连接,只有Spacedesk通过指定IP进行传输的数据会经过从设备提供的网络适配器。另外,跃点数似乎是根据网络适配器的GUID进行绑定的,即便断开USB线后重新连接并开启RNDIS或iOS设备同等功能,跃点数也不会恢复自动管理的选项,而是保持我们的手动设定值,免去了重新连接需要再次配置的麻烦

至此,就可以愉快地使用Spacedesk over USB的功能了,同时保留了从设备通过USB向主机提供网络的能力,例如当主机处于没有网络连接的情况下,Windows会自动将网络切换到具备网络连接的网络适配器上——即便我们设定的跃点数是1000。

The End.


期间尝试了多种方法,最终目的是要实现应用程序的数据分流,使非Spacedesk流量从正常途径走,仅Spacedesk流量经过从机提供的网络适配器传输,主要包括:

但是以上方法要么使用付费软件(付费是不可能付费的),要么操作相对复杂(其实是没有成功,猜测只能绑定某一个应用走特定网卡,而不能确保其他应用不走特定网卡),要么仅适用于安卓设备且需要打开USB调试,并且会使安卓设备暂时失去向主机提供数据接入的能力(全家桶手机应用后台安装警告)。既然Spacedesk目前仅在Windows系统上提供主机端,那么如果能够实现针对Windows系统的简洁、优雅、易于实现的解决方案是坠好的,因此也有了这篇Guidance。即便以后推出了其他主机端,应该也可以通过相近的手段解决吧。

另外,关于文章命名为[Spacedesk在移动设备上扩展显示卡顿的优化方案的优化方案],主要参考了[基于spacedesk的扩展屏的优化 - CSDN 魔都五fa肉]的文章,既然有起名困难症那就直接套娃使用吧。

扩展阅读

文中链接:

相似应用:


上一篇:Ubuntu开启SSH端口并且搭建Vulhub环境


下一篇:php-resque 简单的php消息队列