ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

iPad Pro 作为 Windows 扩展屏:Sunshine+Moonlight+Easy Virtual Display 串流方案

iPad Pro 作为 Windows 扩展屏:Sunshine+Moonlight+Easy Virtual Display 串流方案 iPad Pro 作为 Windows 的扩展屏这件事我折腾了差不多两年。最早用的是某款硬件诱骗器加采集卡方案桌面上多一个 U 盘大小的东西还得单独供电线材缠成一团每次开会前都要重新插拔一遍确认识别。后来换成纯软件方案试过几款主流的串流工具要么延迟高到鼠标拖影要么分辨率锁死在 1080piPad 那块素质极好的屏幕完全发挥不出来。直到把 Sunshine、Moonlight 和 Easy Virtual Display 这三个东西串起来用才算真正跑通了一个让我愿意长期用下去的方案——4K 分辨率、60 帧、延迟控制在可接受范围内而且不需要任何额外的硬件。这套方案的核心思路其实不复杂Windows 端用 Easy Virtual Display 创建一块虚拟显示器让系统以为真的接了一块 4K 屏幕Sunshine 负责把这块虚拟屏幕的画面编码推流iPad 端用 Moonlight 客户端接收解码并显示。三个环节各司其职缺一不可。下面我把整个搭建过程、踩过的坑、以及调优的细节完整写一遍尽量让不同基础的人都能照着做出来。1. 为什么硬件诱骗器方案该被淘汰了1.1 诱骗器到底在骗什么先解释一下显示器诱骗器这个东西存在的理由。Windows 有一个特性如果系统检测不到任何显示设备连接显卡驱动就不会输出画面信号远程桌面或者串流软件拿到的就是一片黑屏或者极低的分辨率。诱骗器的本质是一个小小的 HDMI 或 DP 插头里面焊了特定阻值的电阻模拟出一块显示器存在的电气特征让显卡以为有屏幕接着从而正常输出画面。这个方案在几年前是刚需因为 Windows 本身不提供创建虚拟显示器的原生能力。但它的缺点非常明显第一它占用一个物理视频输出接口台式机显卡接口本来就紧张第二它输出的分辨率是固定的取决于诱骗器内部固化的 EDID 信息想换分辨率就得换硬件第三笔记本用户带着走的时候还得记得拔下来不然合盖之后系统行为会很奇怪。1.2 软件虚拟显示器的优势在哪Easy Virtual Display 这类工具做的事情是在驱动层面创建一个虚拟的显示适配器。它不占用任何物理接口分辨率、刷新率都可以在软件里随时调整甚至可以创建多块虚拟屏幕。对于串流场景来说这意味着你可以精确地让虚拟屏幕的分辨率匹配 iPad Pro 的原生分辨率——11 英寸版是 2388×166812.9 英寸版是 2732×2048而 2024 款 M4 iPad Pro 更是达到了 2752×2064 的串联 OLED 面板。注意虚拟显示器的分辨率设置要和 Moonlight 客户端的串流分辨率保持一致否则会出现画面拉伸或者黑边。这一点后面会详细讲。从实际体验来看软件方案还有一个隐藏好处它不依赖显卡的物理输出通道所以即使你的显卡所有接口都插满了显示器依然可以再创建虚拟屏幕。这对多屏工作者来说非常实用。1.3 三个组件各自扮演什么角色把这三个工具的关系理清楚很重要不然配置的时候容易搞混。组件运行位置核心职责关键配置项Easy Virtual DisplayWindows 主机创建虚拟显示器提供画面源分辨率、刷新率、显示器数量SunshineWindows 主机捕获画面、硬件编码、网络推流编码器、码率、分辨率、帧率MoonlightiPad Pro接收流、硬件解码、显示输出分辨率、帧率、码率、解码方式Sunshine 是 GameStream 协议的替代实现原本是配合 Moonlight 使用的开源串流服务端。它支持 NVIDIA、AMD、Intel 三家显卡的硬件编码延迟表现比很多商业方案都要好。Moonlight 则是客户端iOS 版本在 App Store 可以下载到对 iPad Pro 的 ProMotion 自适应刷新率也有一定支持。2. Easy Virtual Display 的安装与虚拟屏幕参数设定2.1 驱动安装过程中最容易卡住的地方Easy Virtual Display 的安装包不大但安装过程有几个地方容易出问题。首先它需要安装一个虚拟显示驱动Windows 会弹出驱动签名验证的提示。在 Windows 10 和 11 上如果系统开启了强制驱动签名安装会直接失败。解决办法是在安装前临时关闭驱动签名强制具体操作是按住 Shift 点击重启进入高级启动选项选择禁用驱动程序强制签名后再安装。安装完成后在设备管理器的显示适配器下面应该能看到多出来一个虚拟显示设备。如果没有出现检查一下是不是被安全软件拦截了驱动安装。我遇到过某款国产安全软件把虚拟显示驱动当成可疑程序直接删掉的情况后来把安装目录加入白名单才解决。提示安装完驱动后建议重启一次系统让虚拟显示适配器完成初始化。不重启的话有时候在显示设置里看不到新建的虚拟屏幕。2.2 分辨率与刷新率的匹配计算虚拟屏幕的分辨率设置是整套方案里最关键的参数之一。设置得太低iPad 上画面模糊设置得太高编码压力大、延迟增加。理想状态是虚拟屏幕分辨率等于 iPad 的物理分辨率这样 Moonlight 端可以做到点对点显示没有任何缩放损失。以 12.9 英寸 iPad Pro 为例物理分辨率是 2732×2048比例是 4:3。但 Windows 上常见的 4K 是 3840×2160比例是 16:9。如果你直接把虚拟屏幕设成 3840×2160iPad 上要么上下留黑边要么画面被拉伸变形。所以更合理的做法是设置一个接近 iPad 物理比例的分辨率。我在实际使用中试过几组参数下面是对比虚拟屏幕分辨率iPad 显示效果编码压力推荐场景2732×2048点对点最清晰中等文字办公、阅读2560×1920轻微缩放肉眼难辨较低日常通用3840×2160有黑边或拉伸高视频观看2048×1536明显偏软低网络较差时刷新率方面iPad Pro 的 ProMotion 屏幕支持 120Hz但 Moonlight 在 iOS 上目前稳定支持的串流帧率是 60fps。所以虚拟屏幕刷新率设成 60Hz 就够了设成 120Hz 反而会增加编码负担而客户端显示不出来。2.3 多虚拟屏幕的创建与管理Easy Virtual Display 支持同时创建多块虚拟屏幕这个功能在某些场景下很有用。比如你可以创建一块 2732×2048 的给 iPad 用再创建一块 1920×1080 的给其他设备串流。每块虚拟屏幕在 Windows 显示设置里都是独立存在的可以单独设置分辨率和缩放比例。管理多块虚拟屏幕的时候要注意Sunshine 在捕获画面时需要指定捕获哪一块显示器。如果你创建了多块虚拟屏幕但没有正确指定Sunshine 可能会捕获到错误的屏幕导致 iPad 上显示的是主显示器的内容而不是虚拟屏幕的内容。这个配置在 Sunshine 的 Web 管理界面里可以调整后面会讲到。3. Sunshine 服务端的编码器选择与推流参数调优3.1 编码器选型NVENC、AMF 还是 QSVSunshine 支持多种硬件编码器选对了编码器延迟和画质都会有明显改善。选择逻辑其实很简单看你的显卡是哪家的。NVIDIA 显卡优先选 NVENC。这是目前串流场景下表现最好的硬件编码器延迟低、画质好、对系统资源占用小。GTX 10 系列及以上的显卡都支持。AMD 显卡选 AMF。AMD 的硬件编码器这几年进步很大RX 5000 系列及以上表现不错但相比 NVENC 在低码率下的画质还是稍逊一筹。Intel 核显选 QSV。如果你用的是带核显的 Intel 处理器QSV 是一个很好的选择尤其是笔记本用户用核显编码可以避免独显满载时的影响。我自己的主机是 NVIDIA 显卡所以一直用 NVENC。实测下来在 50Mbps 码率下NVENC 编码的 2732×2048 60fps 画面延迟可以稳定在 8-12ms 左右这个延迟在局域网内基本感觉不到。注意如果你用的是 NVIDIA 显卡但 Sunshine 里找不到 NVENC 选项检查一下显卡驱动版本。某些较老的驱动可能不支持 Sunshine 调用的 NVENC API 版本更新到最新驱动通常能解决。3.2 码率、分辨率与帧率的三角平衡这三个参数互相制约调优的本质是在画质、延迟和网络带宽之间找平衡点。局域网环境下带宽通常不是瓶颈千兆有线网络或者 Wi-Fi 6 都能轻松跑满 100Mbps 以上。所以码率可以给得比较宽裕。我的推荐配置是这样的分辨率2732×2048匹配 iPad 物理分辨率帧率60fps码率40-60Mbps这个配置下文字边缘清晰锐利视频播放流畅快速拖动窗口也不会有明显的块状模糊。如果你用的是 Wi-Fi 连接建议先测一下实际带宽。iPad 连 5GHz Wi-Fi 的情况下实际吞吐量通常在 300-600Mbps 之间跑 60Mbps 的串流绰绰有余。但如果网络环境不理想比如隔着两堵墙那就需要降低码率或者分辨率。我试过在信号较弱的情况下把码率降到 20Mbps画面会有轻微的压缩痕迹但日常办公使用完全可以接受。3.3 Sunshine Web 界面里那些容易忽略的选项Sunshine 安装完成后通过浏览器访问https://localhost:47990进入管理界面。大部分配置项都有默认值但有几个地方需要手动调整。首先是音频设置。默认情况下 Sunshine 会捕获系统音频并一起推流如果你不需要 iPad 出声可以关掉音频捕获能省一点带宽和处理资源。如果需要音频建议把音频缓冲调小一些否则会出现音画不同步。其次是网络设置里的UPnP选项。局域网使用的话建议关掉 UPnP避免 Sunshine 尝试在路由器上开放端口。局域网直连不需要端口映射关掉更安全也更稳定。还有一个容易被忽略的是编码器预设。NVENC 有几个预设档位从 P1 到 P7数字越大画质越好但延迟略高。串流场景推荐用 P4 或 P5在画质和延迟之间取得比较好的平衡。P7 虽然画质最好但编码延迟会增加 3-5ms对于追求低延迟的场景不太划算。4. iPad 端 Moonlight 客户端的配置与画质调校4.1 添加主机与手动指定 IPMoonlight 在 iPad 上安装后打开会自动搜索局域网内的 Sunshine 主机。如果自动搜索不到可以手动添加 IP 地址。这里有个小技巧建议在 Windows 主机上设置静态 IP 或者 DHCP 保留地址避免 IP 变化后每次都要重新添加。添加主机后Moonlight 会列出 Sunshine 上可用的应用。默认会有一个Desktop选项就是串流整个桌面。如果你只想串流特定的应用程序可以在 Sunshine 的 Web 界面里添加自定义应用指定要捕获的窗口或程序路径。4.2 分辨率与帧率的客户端侧设置Moonlight 客户端的分辨率设置需要和 Sunshine 服务端的虚拟屏幕分辨率匹配。在 Moonlight 的设置里把分辨率手动设为 2732×2048帧率设为 60fps。如果 Moonlight 的列表里没有这个分辨率选项可以选择自定义分辨率手动输入。这里有一个很多人会踩的坑Moonlight 默认可能会选择 1080p 或者 4K 的预设分辨率导致画面比例不对。一定要手动确认分辨率数值和服务端虚拟屏幕一致。帧率方面Moonlight 在 iOS 上支持 30fps、60fps 和 120fps 选项。但前面说过Sunshine 端虚拟屏幕设的是 60Hz所以客户端也选 60fps 最合适。选 120fps 的话Sunshine 端需要把虚拟屏幕刷新率也调到 120Hz同时编码压力会翻倍除非你的显卡性能非常充裕否则不建议。4.3 解码方式与 HDR 的取舍Moonlight 在 iPad 上默认使用硬件解码也就是调用 iPad 的媒体引擎来解码 H.264 或 HEVC 视频流。硬件解码的延迟和功耗都远低于软件解码所以除非遇到兼容性问题否则不要改成软件解码。HDR 方面Sunshine 和 Moonlight 都支持 HDR 串流但需要虚拟屏幕、编码器、客户端三端都正确配置。实际体验下来HDR 串流在 iPad Pro 的屏幕上效果确实惊艳尤其是看 HDR 视频的时候。但 HDR 会增加编码复杂度和带宽消耗而且 Windows 桌面在 HDR 模式下的色彩管理有时候会出问题比如某些应用的颜色会变得很奇怪。所以我的建议是日常办公用 SDR看视频或者玩游戏的时候再开 HDR。5. 延迟优化与常见问题排查5.1 从编码到显示的延迟链路拆解要优化延迟先得知道延迟产生在哪些环节。整个链路大致是这样的Windows 桌面渲染到虚拟屏幕约 1-2msSunshine 捕获画面约 1-3ms硬件编码约 3-8ms取决于编码器和预设网络传输约 1-5ms局域网有线或优质 Wi-FiMoonlight 硬件解码约 2-5msiPad 显示输出约 5-10ms屏幕本身的响应时间加起来理论延迟在 15-30ms 左右。实际使用中我用秒表对着屏幕拍照的方式粗略测量端到端延迟大约在 20-35ms 之间。这个延迟水平对于办公、看视频、甚至轻度游戏都是可以接受的。但如果你玩的是竞技类射击游戏这个延迟还是能感觉到那种场景还是建议直接用物理显示器。5.2 画面卡顿和撕裂的排查思路遇到画面卡顿按下面的顺序排查先看网络。在 iPad 上用测速工具测一下实际带宽和延迟。如果延迟波动大jitter 高说明 Wi-Fi 信号不稳定尝试靠近路由器或者改用有线连接。再看编码器负载。在 Windows 任务管理器里看 GPU 的编码器占用率。如果编码器占用率接近 100%说明编码压力过大需要降低分辨率、帧率或码率。然后看虚拟屏幕刷新率。如果虚拟屏幕刷新率和 Moonlight 帧率不匹配会出现周期性的卡顿。确保两边都是 60Hz/60fps。最后看 iPad 端。关闭 iPad 上的后台应用尤其是那些占用网络或 GPU 的应用。iPad 在低电量模式下可能会限制性能导致解码卡顿。画面撕裂通常是因为垂直同步没有正确工作。Moonlight 客户端有一个帧同步选项打开后可以消除撕裂但会增加一点点延迟。如果撕裂不严重建议关掉帧同步以保持低延迟。5.3 声音不同步和音频延迟的处理音画不同步是串流中比较常见的问题。Sunshine 端有一个音频缓冲设置默认值可能偏大。把缓冲调小到 50ms 左右可以明显改善音画同步。但缓冲太小又可能导致音频断断续续需要根据实际网络情况微调。另外iPad 端 Moonlight 的音频输出也有一个缓冲设置。如果 Sunshine 端调了还是不同步可以试试在 Moonlight 端也调整一下。两边配合着调通常能找到同步良好的平衡点。提示如果只是偶尔出现音画不同步可以尝试在 Moonlight 里断开重连一次有时候是缓冲区累积导致的临时性问题。6. 长期使用中的稳定性维护与场景扩展6.1 开机自启与无人值守配置如果你希望这套方案在 Windows 开机后自动就绪需要配置两个自启项Easy Virtual Display 的虚拟屏幕创建以及 Sunshine 服务。Easy Virtual Display 可以在软件设置里勾选开机自动创建虚拟屏幕Sunshine 则可以在安装时选择作为系统服务运行这样不需要登录桌面就能启动。配置好自启后iPad 端随时打开 Moonlight 就能连上不需要去动 Windows 主机。这个体验很接近随时可用的第二块屏幕对于经常需要扩展工作区的人来说非常方便。6.2 虚拟屏幕在系统休眠后的恢复问题Windows 休眠或者睡眠唤醒后虚拟屏幕有时候会丢失表现为显示设置里看不到虚拟显示器Sunshine 捕获不到画面。这个问题在早期版本的 Easy Virtual Display 上比较常见新版本有所改善但偶尔还是会出现。我的应对方法是在 Windows 的电源设置里把睡眠改为从不只保留屏幕关闭。这样系统不会真正进入睡眠状态虚拟屏幕也就不会丢失。如果必须用睡眠那就在唤醒后手动重新创建一次虚拟屏幕或者在 Easy Virtual Display 里设置一个快捷键来快速重建。6.3 把这套方案扩展到其他设备这套方案不只适用于 iPad Pro。任何能运行 Moonlight 客户端的设备都可以作为 Windows 的扩展屏比如安卓平板、iPhone、甚至另一台电脑。分辨率设置根据设备屏幕调整即可。我还试过用旧款 iPad 作为第三块屏幕配合 Easy Virtual Display 创建第二块虚拟屏幕Sunshine 分别推流到两台 iPad。实际使用下来只要主机显卡的编码器性能足够同时推两路 2K 60fps 的流完全没问题。这个玩法对于需要多屏协作的场景很有价值而且成本比买物理显示器低得多。最后分享一个我在长期使用中总结的小经验虚拟屏幕的分辨率不要追求最高而要追求最匹配。我一开始总想把虚拟屏幕设成 4K 甚至更高觉得分辨率越高越清晰结果发现 iPad 上显示的画面反而因为缩放变得模糊而且编码延迟明显增加。后来老老实实按 iPad 的物理分辨率来设画面锐利了延迟也降下来了。这个道理其实适用于所有串流场景——匹配永远比堆参数重要。
返回列表