星夜的蓝天

基于sunshine的串流扩展屏幕解决方案
起因 手头有一台ipad,想要作为win10的扩展屏幕,但因为市面上的扩展屏幕解决方案都不是很令人满意,duet需...
扫描右侧二维码阅读全文
11
2021/10

基于sunshine的串流扩展屏幕解决方案

起因

手头有一台ipad,想要作为win10的扩展屏幕,但因为市面上的扩展屏幕解决方案都不是很令人满意,duet需要使用有线,不太方便,spacedesk可以使用无线,但是延迟又令人不太满意,在没有发现符合自己要求的方案的情况下,我选择自力更生,因此有了这篇教程。

需求

其实我的需求很简单,家里千兆内网,能够支持无线,同时延迟低就是我最简单的需求,甚至对于能否在ipad上进行触摸反馈我都无所谓。因此,与我这个想法最符合的,其实是串流软件,但基于NVIDIA GeForcemoonlight的解决方案,只能够对当前主屏幕进行串流,而不支持多屏幕(后续有可能优化),所以转念一想,如果可以模拟一个虚拟显示器,然后对副屏进行串流,那么就可以实现我们的需求了。

想让win10能够识别一个显示器出来,一般有如下几个操作:

  • 外接显示器
  • HDMI诱骗器
  • 基于驱动的虚拟现实器

本着不要钱的想法,我果断选择了第三项,感谢@蚊子的方案,我们可以从巨硬给出的Indirect Display Sample里找到显示器驱动,而我们可以从IDD驱动下手,clone到本地后,我们在driver.cpp里可以看到官方已经给了我们两个预设的显示器配置,我只要一个,因此我删掉了一个,然后添加上自己需要的显示模式(其实我只要1920*1080-60fps)就够了,但各位可以根据自己需要去配置可用的虚拟显示器

修改完后,就需要编译了,但在编译前,确保安装了对应的编译环境(windows driver kit和Windows 11 SDK (22000.1)以上),可以参考(https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk)。

接着选择你要的目标架构,笔者这里是x64架构,因此选择release-x64,编译即可

编译后,在项目最外面,可以看到x64\release文件夹。

image-20211011192453156

安装对应的设备驱动(.inf),如果遇到签名问题,重启关闭windows的签名验证即可,然后以管理员模式运行iddSampleApp.exe,表示插入了显示器,接下来可以打开设备管理器,查看监视器选项和显示适配器,多出来了一个正常运行的设备(iddSampleDriver)

image-20211011190657840

现在,基础工作已经做好了,接下来要解决串流的问题,但NVIDIA的串流只能串流主屏幕,但是这样做就不是我们想要的结果了,因此我在寻找NVIDIA串流server的替代产品,结果我发现了一个宝藏项目sunshine,根据官网配置,他可以支持多显示器中选择指定的显示器进行串流,这完美符合了我们的要求,通过项目里\tools\dxgi-info.exe的输出,我们可以找到我们的虚拟显示器

image-20211011191108461

然后把配置文件里的

adapter_name = NVIDIA GeForce RTX 2070
output_name  = \\.\DISPLAY31

替换为对应的设备名和输出名即可

最后在"投影"里把显示模式改成扩展,接下来就可以按照官网操作运行server服务了

常见问题

由于我本身的ipad air 2设备太老旧,对HEVC支持不好,因此一开始连接时发生了正常连接但是没有画面的情况,这时候在配置文件里把hevc_mode = 0配置即可

贴一张成品图

image-20211011191712428

最后修改:2021 年 10 月 11 日 07 : 27 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论

召唤看板娘