1. 为什么我要折腾这套方案
1.1 从一根HDMI线说起
先说说我为什么要搞这套东西。手头有一台iPad Pro,平时出门带着轻便,屏幕素质又极好,P3色域、ProMotion自适应刷新率、峰值亮度也够看。但回到工位上,Windows主机接的是一台27寸2K显示器,写代码、剪片子的时候总觉得副屏不够用。买一台便携屏吧,便宜的色准拉胯,贵的又够再买半台iPad了。于是我就琢磨,能不能把iPad Pro直接当成Windows的第二块屏幕来用。
市面上最常见的做法是“显示器诱骗器”加采集卡那一套:插一个HDMI诱骗器让显卡以为接了显示器,再用采集卡把画面推流到iPad上。这套方案能用,但问题也很明显——诱骗器锁死分辨率,采集卡有延迟,线材一堆,而且画质上限受采集卡限制,4K 60Hz基本别想。我试过一段时间,剪片时拖时间线能明显感觉到拖影,鼠标移动也不跟手,体验说不上好。
后来我换了个思路:既然iPad Pro本身是一台性能过剩的设备,为什么不干脆让Windows把iPad识别成一块真正的虚拟显示器,然后通过局域网把画面串流过去?这样既不需要诱骗器,也不需要采集卡,分辨率、刷新率都能按需配置,延迟也能压到可接受的范围。这套方案的核心就是三个东西:Sunshine、Moonlight、Easy Virtual Display。Sunshine跑在Windows主机上负责编码推流,Moonlight跑在iPad上负责解码显示,Easy Virtual Display负责在Windows里凭空造出一块虚拟显示器,让系统以为真的多了一块屏。
1.2 这套方案到底解决了什么问题
说白了,它解决的是“我想用iPad当副屏,但不想买硬件诱骗器和采集卡”这个需求。具体来说有这几个好处:
- 零额外硬件成本:除了iPad本身,不需要再买任何东西,纯软件方案。
- 真·扩展屏而非镜像:Windows会把它当成一块独立的显示器,你可以把窗口拖过去,可以设置不同的缩放比例,可以设成主屏或副屏。
- 分辨率刷新率可调:虚拟显示器的分辨率、刷新率都能在系统里改,4K 60Hz甚至更高都能跑,前提是你的网络和编码器扛得住。
- 延迟可控:在千兆局域网或者Wi-Fi 6环境下,延迟可以压到10ms以内,日常办公、写代码、看视频完全够用,轻度剪辑也能接受。
- 跨平台通用:Moonlight客户端几乎覆盖所有主流平台,iPad、安卓平板、电视盒子、甚至另一台电脑都能当接收端。
适合谁来参考?我觉得三类人最合适:一是手里有iPad Pro或iPad Air,想拿它当副屏的Windows用户;二是经常需要多屏协作但工位空间有限的开发者或设计师;三是喜欢折腾串流、对画质和延迟有一定要求的技术爱好者。如果你只是偶尔想投个屏看视频,那直接用系统自带的投屏功能就够了,没必要上这套。
1.3 整体架构长什么样
在动手之前,先把整个数据流理清楚,后面配置的时候才不会晕。
Windows主机这边,Easy Virtual Display负责创建一块虚拟显示器,Sunshine负责捕获这块虚拟显示器的画面并进行硬件编码(NVENC、AMF或QSV),然后把编码后的视频流通过局域网推出去。iPad这边,Moonlight作为客户端接收视频流,利用iPad的硬件解码器解码并显示,同时把触摸操作、虚拟手柄或键鼠事件回传给Sunshine。
整个链路里,编码器和网络是两个关键瓶颈。编码器决定了画质和延迟的下限,网络决定了稳定性和上限。我后面会详细讲怎么选编码器、怎么调参数。
注意:这套方案依赖局域网,公网串流虽然也能做,但延迟和稳定性会差很多,本文只讨论局域网场景。
2. 动手前的准备工作
2.1 硬件与系统要求
先说硬性条件,不满足的话后面会卡住。
Windows主机这边,显卡最好是NVIDIA的,因为NVENC编码器成熟度高、延迟低、对Sunshine的支持也最好。AMD的AMF和Intel的QSV也能用,但实测下来NVENC在同等码率下画质更稳。CPU方面,近几年的主流型号都够用,因为编码主要靠显卡。内存建议16GB起步,毕竟多开一块4K虚拟显示器会占一些资源。
iPad这边,建议iPad Pro 2018及以后的型号,或者iPad Air 4及以后。原因有两个:一是这些型号支持Wi-Fi 6,网络带宽更充裕;二是它们的硬件解码器支持HEVC和AV1(部分型号),解码4K 60Hz毫无压力。老款iPad虽然也能用,但Wi-Fi 5的带宽在4K高码率下可能会吃力。
网络方面,强烈建议Windows主机走有线千兆网口,iPad走Wi-Fi 6的5GHz频段。如果主机也只能走Wi-Fi,那至少保证两者在同一个5GHz频段下,且信号强度良好。2.4GHz频段基本不用考虑,带宽和稳定性都不够。
| 项目 | 最低要求 | 推荐配置 |
|---|---|---|
| Windows显卡 | 支持NVENC/AMF/QSV | NVIDIA RTX 20系及以上 |
| Windows内存 | 8GB | 16GB及以上 |
| iPad型号 | iPad Pro 2018 | iPad Pro M1/M2 |
| 网络 | 千兆有线+Wi-Fi 5 | 千兆有线+Wi-Fi 6 |
| 系统版本 | Windows 10 21H2 | Windows 11 23H2 |
2.2 软件清单与下载渠道
需要准备的软件不多,但每个都要从靠谱的渠道拿。
Sunshine:这是跑在Windows上的串流服务端,开源项目,直接在GitHub的LizardByte/Sunshine仓库下载最新的安装包。建议下载.exe安装版,省得手动配服务。安装过程中会提示安装ViGEmBus驱动,这个是用来模拟手柄的,建议装上,后面如果要用iPad当手柄玩PC游戏会用到。
Moonlight:iPad端直接在App Store搜索“Moonlight Game Streaming”下载即可,免费。注意认准开发者是“Moonlight Stream”的那个,别下错了。
Easy Virtual Display:这是一个Windows下的虚拟显示器驱动工具,用来创建和管理虚拟显示器。它的原理是基于IddSampleDriver(微软的间接显示驱动示例)做的封装,安装后会多出一个虚拟显示适配器。下载渠道建议从它的GitHub仓库或者官方发布页获取,安装时需要签名驱动,Windows可能会弹安全提示,允许即可。
ViGEmBus:如果Sunshine安装时没自动装,可以单独去GitHub下载安装,用于手柄模拟。
音频驱动:Sunshine默认会捕获系统音频并串流,但如果想让iPad出声而主机静音,需要额外配置虚拟音频设备。这个后面细说。
2.3 安装顺序与注意事项
安装顺序有讲究,建议按这个来:
- 先装ViGEmBus,因为Sunshine依赖它。
- 再装Easy Virtual Display,装完重启一次,让虚拟显示适配器生效。
- 然后装Sunshine,安装过程中如果提示装ViGEmBus就跳过(已经装过了)。
- 最后在iPad上装Moonlight。
注意:Easy Virtual Display安装后,设备管理器里会出现一个“IddSampleDriver”之类的显示适配器。如果没出现,说明驱动没装成功,检查一下Windows的驱动签名策略,或者重启一次。
安装完成后,先在Windows的“显示设置”里确认能看到多出来的虚拟显示器。如果看不到,右键桌面进“显示设置”,点“检测”试试。正常情况下,Easy Virtual Display会创建一个默认分辨率的虚拟屏,你可以在它的配置工具里改分辨率和刷新率。
3. 核心配置:让Windows认出虚拟显示器
3.1 Easy Virtual Display的参数怎么设
Easy Virtual Display的核心作用就是“骗”过Windows,让它以为接了一块真实的显示器。它的配置项不多,但每个都影响后面的体验。
打开Easy Virtual Display的配置界面,你会看到几个关键参数:
- 分辨率:建议直接设成iPad Pro的原生分辨率。11寸iPad Pro是2388×1668,12.9寸是2732×2048。但注意,Windows下的虚拟显示器分辨率最好设成标准值,比如2560×1440或3840×2160,因为Moonlight客户端会按比例缩放。我实测下来,设成2560×1440在11寸iPad上显示效果最舒服,字不会太小,也不会糊。
- 刷新率:60Hz起步,如果你的iPad支持ProMotion且网络够好,可以试120Hz。但120Hz对编码器和网络的压力翻倍,建议先跑通60Hz再往上调。
- 显示器数量:一般设1块就够了,除非你想同时虚拟出多块屏。
- EDID模拟:有些版本支持自定义EDID,这个高级功能可以模拟特定显示器的色彩和时序,普通用户不用动。
设好之后点应用,Windows的显示设置里应该就能看到这块虚拟屏了。把它设成“扩展这些显示器”,然后调整它的相对位置,让鼠标能从主屏自然滑过去。
3.2 显示缩放与排列的坑
这里有个很容易踩的坑:缩放比例。Windows主屏如果是2K 27寸,通常缩放是100%或125%。虚拟屏设成2560×1440后,如果缩放还是100%,iPad上的字会非常小,因为iPad的物理尺寸只有11寸左右,像素密度远高于桌面显示器。
我的做法是,把虚拟屏的缩放单独设成150%或175%,这样在iPad上看文字大小刚好。但要注意,不同缩放比例下,跨屏拖动窗口时可能会有轻微的尺寸跳变,这是Windows的已知行为,习惯就好。
排列方面,建议把虚拟屏放在主屏的右侧或下方,和你的物理摆放一致。比如iPad用支架放在显示器右边,那虚拟屏就排在主屏右边,这样鼠标移动方向和视觉一致,不会晕。
提示:如果你发现虚拟屏在显示设置里是灰色的、无法调整,检查一下是不是被设成了“仅在1上显示”或者“复制这些显示器”。必须是“扩展”模式才能独立配置。
3.3 验证虚拟显示器是否真正可用
配置完别急着开Sunshine,先在Windows里验证一下虚拟屏是不是真的能用。
最简单的办法:打开一个窗口,拖到虚拟屏上,看看能不能正常显示。然后打开任务管理器,看看GPU占用有没有异常。如果虚拟屏是黑的或者窗口拖过去就消失,说明驱动有问题,重装Easy Virtual Display或者换个版本试试。
另一个验证方法是跑一个全屏应用,比如浏览器按F11,然后拖到虚拟屏上,看看能不能全屏。如果能,说明虚拟屏的时序是正常的。这一步很重要,因为有些虚拟显示器驱动在特定分辨率下会有时序问题,导致画面撕裂或黑屏。
我遇到过一种情况:虚拟屏设成4K 60Hz后,Windows能识别,但画面一直是黑的。后来发现是刷新率设太高,驱动带宽不够。降到30Hz就正常了。所以如果你也遇到黑屏,先降刷新率试试。
4. Sunshine服务端的深度调优
4.1 首次启动与基础配置
Sunshine装好后,它会自动在后台跑一个Web管理界面,默认地址是https://localhost:47990。第一次访问会让你设用户名和密码,这个密码后面Moonlight配对时要用,记牢。
进去之后,先看“Configuration”标签页。这里有几个关键项:
- Encoder:选你显卡对应的编码器。N卡选
nvenc,A卡选amf,Intel核显选qsv。如果有多块显卡,可以指定用哪块。 - Adapter Name:如果有多块显卡,这里要选对输出虚拟显示器的那个适配器。选错了会捕获到黑屏。
- Output Name:选Easy Virtual Display创建的那块虚拟屏。名字通常是“\.\DISPLAY2”之类的,具体看你的设备管理器。
- Resolution and FPS:这里设的是串流输出的分辨率和帧率,建议和虚拟屏保持一致,比如2560×1440@60。
- Bitrate:码率,这是画质和延迟的核心参数。1080p 60Hz建议20-30Mbps,1440p 60Hz建议40-60Mbps,4K 60Hz建议80-120Mbps。局域网千兆环境下,100Mbps左右很稳。
- Video Codec:优先选HEVC(H.265),同码率下画质比H.264好。如果iPad不支持HEVC再退回H.264。部分新设备支持AV1,但Sunshine对AV1的支持还在完善中,建议先用HEVC。
4.2 编码器参数与画质延迟的平衡
编码器这块值得单独拎出来讲,因为它直接决定了你看到的画面质量和操作延迟。
以NVENC为例,Sunshine里可以调几个高级参数:
- Preset:编码预设,从P1到P7,P1最快但画质最差,P7最慢但画质最好。串流场景建议用P4或P5,平衡画质和延迟。
- Tune:调优模式,选
llhq(低延迟高质量)或ull(超低延迟)。ull延迟最低但画质略差,llhq画质更好但延迟稍高。我一般用llhq,实测延迟差异在2-3ms以内,画质提升明显。 - Rate Control:码率控制方式,选
cbr(固定码率)最稳,vbr(可变码率)在静态画面下画质更好但码率波动大。局域网建议cbr。 - Look-ahead:前瞻,关掉,会增加延迟。
- B-frames:B帧,关掉或设1,多了会增加延迟。
这些参数在Sunshine的Web界面里不一定全暴露,有些需要改配置文件。配置文件在C:\Program Files\Sunshine\config\sunshine.conf,改完重启服务生效。
注意:不同显卡的编码器参数名不一样,A卡和Intel的选项少一些,但核心逻辑相同——优先保证低延迟,其次才是画质。
4.3 音频捕获与虚拟声卡配置
默认情况下,Sunshine会捕获系统默认音频输出设备的聲音,然后串流到iPad。但这样有个问题:主机音箱和iPad会同时出声,而且你没法单独控制iPad的音量。
我的做法是装一个虚拟声卡,比如VB-Audio Virtual Cable,然后把Sunshine的音频捕获设备设成这个虚拟声卡。这样系统音频会先送到虚拟声卡,再由Sunshine串流出去,主机音箱不受影响。具体步骤:
- 装好VB-Audio Virtual Cable,重启。
- 在Windows声音设置里,把虚拟声卡设成默认播放设备。
- 在Sunshine的Audio配置里,选这个虚拟声卡作为捕获源。
- 如果想让主机也出声,可以在声音设置里开“侦听此设备”,把虚拟声卡的输出转发到真实音箱。
这样配置后,iPad和主机可以独立控制音量,互不干扰。
4.4 网络与防火墙设置
Sunshine默认监听几个端口:47984、47989、47990、48010等。Windows防火墙可能会拦,第一次启动时记得允许。如果Moonlight搜不到主机,多半是防火墙的问题。
另外,建议在路由器里给Windows主机设一个静态IP,或者DHCP保留,这样Moonlight配对后不会因为IP变化而失联。
网络质量方面,如果走Wi-Fi,建议把iPad和主机都连到5GHz频段,并且尽量靠近路由器。有条件的话,主机走有线,iPad走5GHz Wi-Fi 6,这样带宽和稳定性都有保障。实测在Wi-Fi 6环境下,1440p 60Hz 50Mbps的串流延迟可以稳定在8-12ms,肉眼基本感觉不到。
5. Moonlight客户端的配置与优化
5.1 iPad端配对与连接
iPad上打开Moonlight,它会自动搜索局域网里的Sunshine主机。如果搜不到,可以手动添加IP地址。搜到后点击主机,会弹出一个四位数的配对码,同时Sunshine的Web界面也会弹出配对请求,输入同样的码即可完成配对。
配对成功后,你会看到Sunshine里配置的应用列表。默认有一个“Desktop”,就是整个桌面串流。点进去就能看到Windows桌面出现在iPad上了。
第一次连接可能会提示你选分辨率和帧率,建议和Sunshine里设的一致。如果iPad提示“不支持的视频格式”,说明编码器或编码格式不兼容,回Sunshine里换成H.264试试。
5.2 画质与延迟的客户端调参
Moonlight客户端里有一堆设置项,调好了体验提升很大。
- 分辨率:选和Sunshine输出一致的值,不要选“Native”,因为Native会按iPad屏幕分辨率来,可能导致缩放模糊。
- 帧率:60FPS起步,网络好可以试120FPS。
- 码率:这是客户端侧的上限,设成和Sunshine里一样或略高。比如Sunshine设了50Mbps,客户端也设50Mbps。
- 视频解码器:优先选硬件解码,iPad上通常是“Hardware”或“Auto”。软件解码会吃CPU,延迟高、发热大。
- HDR:如果iPad和主机都支持HDR,可以开。但HDR串流对带宽要求更高,且色彩映射可能不准,建议先不开,跑通SDR再说。
- Vsync:开,防止画面撕裂。但会增加一点点延迟,如果追求极致低延迟可以关。
- Frame Pacing:开,让帧输出更平滑,减少抖动。
- 显示模式:选“Stretch”或“Aspect Ratio”,看个人喜好。我一般用Aspect Ratio,保持比例不变形。
5.3 触控、键鼠与手柄的映射
Moonlight支持多种输入方式,iPad上主要是触控和虚拟手柄。
触控方面,默认是直接映射成鼠标,单指点击是左键,双指是右键,长按是拖拽。但说实话,触控操作Windows桌面体验一般,适合轻度使用。如果要精细操作,建议配一个蓝牙键鼠,iPad连上后Moonlight会自动把键鼠事件透传给Windows,体验和本地几乎一样。
手柄方面,如果iPad连了蓝牙手柄(比如Xbox或PS手柄),Moonlight会把它识别成虚拟手柄,通过ViGEmBus在Windows里模拟成Xbox 360手柄。这样玩PC游戏时,手柄操作是无缝的。
提示:如果触控延迟明显,检查一下Moonlight里的“Optimize Game Settings”有没有开,开了会降低一些画质换延迟。另外,iPad的“引导式访问”模式可以减少系统干扰,提升串流稳定性。
5.4 实测延迟与画质表现
我在自己的环境里做了一组实测,供参考。
| 场景 | 分辨率 | 帧率 | 码率 | 平均延迟 | 画质评价 |
|---|---|---|---|---|---|
| 办公写代码 | 2560×1440 | 60 | 40Mbps | 9ms | 文字清晰,无拖影 |
| 看B站4K | 2560×1440 | 60 | 60Mbps | 11ms | 色彩准确,无明显压缩 |
| 轻度剪辑 | 2560×1440 | 60 | 80Mbps | 13ms | 时间线拖动跟手 |
| 游戏 | 1920×1080 | 120 | 50Mbps | 7ms | 操作跟手,偶有微卡 |
延迟是用高速摄像机拍屏幕和iPad对比测的,有一定误差,但相对值可信。整体来说,这套方案在千兆有线+Wi-Fi 6环境下,日常使用完全没问题。
6. 常见问题与排查技巧实录
6.1 连接类问题
Moonlight搜不到主机:九成是防火墙。检查Windows防火墙有没有放行Sunshine,或者临时关掉防火墙测试。另外确认iPad和主机在同一个子网,没有AP隔离。
配对失败:配对码输错,或者Sunshine的Web界面没弹窗。刷新一下Web界面,重新配对。如果一直失败,删掉Sunshine配置目录下的state.json里的配对信息,重启服务再试。
连接后黑屏:多半是Sunshine捕获错了显示器。检查Output Name是不是虚拟屏,Adapter Name是不是输出虚拟屏的那块显卡。如果虚拟屏本身是黑的,回Easy Virtual Display里降刷新率或换分辨率。
6.2 画质与延迟类问题
画面模糊:检查分辨率和缩放。Sunshine输出分辨率、Moonlight客户端分辨率、Windows虚拟屏分辨率三者要匹配。另外码率太低也会糊,适当调高。
画面卡顿:网络带宽不够或Wi-Fi信号差。用有线连接主机,iPad靠近路由器。降低码率或分辨率试试。也可能是编码器过载,换个Preset或降帧率。
延迟高:关掉Moonlight的Vsync,Sunshine里用ull模式,关掉Look-ahead和B-frames。检查是不是走了2.4GHz Wi-Fi,换5GHz。
颜色发灰:可能是色彩空间不匹配。Sunshine里检查Color Space设成Rec.709,Moonlight里关掉HDR试试。
6.3 音频类问题
iPad没声音:检查Sunshine的Audio配置,捕获设备选对了吗。Windows声音设置里,虚拟声卡的采样率设成48kHz,和串流一致。
声音延迟:音频延迟通常比视频高,Moonlight里有音频缓冲设置,调小一点。但太小会爆音,自己权衡。
主机和iPad同时出声:说明虚拟声卡的“侦听”没配对,或者Sunshine捕获的是真实声卡。回声音设置里改。
6.4 虚拟显示器类问题
虚拟屏分辨率改不了:Easy Virtual Display的配置工具里改,改完点应用。如果Windows显示设置里还是灰的,重启一次。
虚拟屏刷新率上不去:驱动带宽限制,降分辨率或降刷新率。4K 120Hz对虚拟显示器驱动压力很大,很多驱动跑不稳。
虚拟屏导致主屏闪烁:显卡驱动和虚拟显示器驱动冲突。更新显卡驱动,或者换一个版本的Easy Virtual Display。
我踩过最坑的一个问题:Easy Virtual Display装完后,主屏的刷新率被强制降到了60Hz。后来发现是虚拟显示器的EDID覆盖了主屏的时序。解决办法是在显卡控制面板里手动锁定主屏刷新率,或者在Easy Virtual Display里关掉EDID模拟。
7. 进阶玩法与扩展思路
7.1 多虚拟显示器与多iPad串联
Easy Virtual Display支持创建多块虚拟显示器,理论上你可以虚拟出两三块屏,然后用多台iPad分别串流。但这对主机显卡和网络的压力很大,编码器可能扛不住。如果真要这么玩,建议降低每块屏的分辨率和帧率,比如都设成1080p 60Hz。
7.2 开机自启与无人值守
如果想让这套方案变成常驻副屏,可以把Sunshine和Easy Virtual Display都设成开机自启。Sunshine安装时默认会注册服务,Easy Virtual Display可以在任务计划程序里加一个开机启动项。这样主机一开机,虚拟屏和串流服务就自动就绪,iPad上点一下Moonlight就能连。
7.3 外网串流的可行性探讨
虽然本文聚焦局域网,但外网串流也不是不能做。核心思路是通过端口转发或内网穿透,把Sunshine的端口暴露到公网。但延迟和稳定性会大打折扣,且安全性需要额外考虑。如果只是偶尔远程看看桌面,可以试试;如果追求体验,还是局域网最靠谱。
7.4 替代方案对比
这套方案不是唯一的。市面上还有Parsec、Steam Link、AMD Link等。Parsec画质和延迟都不错,但免费版限制多;Steam Link主打游戏,桌面串流体验一般;AMD Link只支持A卡。相比之下,Sunshine+Moonlight+Easy Virtual Display的组合胜在开源、免费、可定制,且虚拟显示器这块是独一份的。
| 方案 | 虚拟显示器 | 画质 | 延迟 | 成本 | 灵活性 |
|---|---|---|---|---|---|
| Sunshine+Moonlight+EVD | 支持 | 高 | 低 | 免费 | 高 |
| Parsec | 不支持 | 高 | 低 | 免费+付费 | 中 |
| Steam Link | 不支持 | 中 | 中 | 免费 | 低 |
| 硬件诱骗器+采集卡 | 支持 | 中 | 高 | 高 | 低 |
最后再分享一个小技巧:如果你觉得iPad上的鼠标指针太小,可以在Windows的辅助功能里把指针调大,或者装一个自定义光标方案。这个细节不影响功能,但用起来舒服很多。我在实际使用中发现,把iPad的亮度调到70%左右,和主屏的亮度匹配最好,长时间看不会累眼。