起因
手头有一台ipad,想要作为win10的扩展屏幕,但因为市面上的扩展屏幕解决方案都不是很令人满意,duet
需要使用有线,不太方便,spacedesk
可以使用无线,但是延迟又令人不太满意,在没有发现符合自己要求的方案的情况下,我选择自力更生,因此有了这篇教程。
需求
其实我的需求很简单,家里千兆内网,能够支持无线,同时延迟低就是我最简单的需求,甚至对于能否在ipad上进行触摸反馈我都无所谓。因此,与我这个想法最符合的,其实是串流软件,但基于NVIDIA GeForce
和moonlight
的解决方案,只能够对当前主屏幕进行串流,而不支持多屏幕(后续有可能优化),所以转念一想,如果可以模拟一个虚拟显示器,然后对副屏进行串流,那么就可以实现我们的需求了。
想让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文件夹。
安装对应的设备驱动(.inf),如果遇到签名问题,重启关闭windows的签名验证即可,然后以管理员模式运行iddSampleApp.exe
,表示插入了显示器,接下来可以打开设备管理器,查看监视器选项和显示适配器,多出来了一个正常运行的设备(iddSampleDriver
)
现在,基础工作已经做好了,接下来要解决串流的问题,但NVIDIA的串流只能串流主屏幕,但是这样做就不是我们想要的结果了,因此我在寻找NVIDIA串流server的替代产品,结果我发现了一个宝藏项目sunshine,根据官网配置,他可以支持多显示器中选择指定的显示器进行串流,这完美符合了我们的要求,通过项目里\tools\dxgi-info.exe
的输出,我们可以找到我们的虚拟显示器
然后把配置文件里的
adapter_name = NVIDIA GeForce RTX 2070
output_name = \\.\DISPLAY31
替换为对应的设备名和输出名即可
最后在"投影"里把显示模式改成扩展,接下来就可以按照官网操作运行server服务了
常见问题
由于我本身的ipad air 2设备太老旧,对HEVC支持不好,因此一开始连接时发生了正常连接但是没有画面的情况,这时候在配置文件里把hevc_mode = 0
配置即可
贴一张成品图
版权声明:本文为原创文章,版权归星夜的蓝天所有。
本文链接:http://poi.ac/archives/53/
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。转载时须注明出处及本声明