ARTICLE DETAIL

资讯详情

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

Parsec VDD 虚拟显示规格详解:预设分辨率、驱动实现与设备标识全解析

Parsec VDD 虚拟显示规格详解:预设分辨率、驱动实现与设备标识全解析 桌面应用驱动开发【免费下载链接】parsec-vdd✨ Perfect virtual display for game streaming项目地址https://gitcode.com/gh_mirrors/pa/parsec-vdd点击查看免费下载导读本文以 docs/PARSEC_VDD_SPECS.md 为主体系统梳理 Parsec 虚拟显示驱动VDDVirtual Display Driver的完整技术规格从驱动内置的预设显示模式清单到驱动实现形态IddCx 版本与 IOCTL 控制码、适配器与显示器标识、完整 EDID 数据块。读完本文你将掌握如何在 Windows 10 无物理显示器的环境下为游戏串流、云主机与多屏办公场景挑选合适的虚拟显示分辨率并理解仓库中 core/parsec-vdd.h 与 app/Vdd/Core.cs 等源码是如何与这些规格一一对应的。一、预设显示模式Preset display modesParsec VDD 的所有预设显示模式均由驱动默认内置driver default无需额外配置即可在系统中枚举。下表完整列出了驱动内置的 23 种分辨率模式分辨率通用名称宽高比刷新率Hz4096 x 2160DCI 4K1.90:1 (256:135)24/30/60/144/2403840 x 21604K UHD16:924/30/60/144/2403840 x 1600UltraWide24:1024/30/60/144/2403840 x 1080UltraWide32:9 (2x 16:9 FHD)24/30/60/144/2403440 x 144021.5:9 (43:18)24/30/60/144/2403240 x 21603:2603200 x 18003K16:924/30/60/144/2403000 x 20003:2602880 x 18002.8K16:10602880 x 16202.8K16:924/30/60/144/2402736 x 1824602560 x 16002K16:1024/30/60/144/2402560 x 14402K16:924/30/60/144/2402560 x 1080UltraWide21:924/30/60/144/2402496 x 1664602256 x 1504602048 x 115260/144/2401920 x 1200FHD16:1060/144/2401920 x 1080FHD16:924/30/60/144/2401800 x 1200FHD3:2601680 x 1050HD16:1060/144/2401600 x 1200HD4:324/30/60/144/2401600 x 900HD16:960/144/2401440 x 900HD16:1060/144/2401366 x 76860/144/2401280 x 800HD16:1060/144/2401280 x 720HD16:960/144/240模式选择要点默认显示模式为 1920 x 1080 60 Hz这也是串流场景最稳妥的起步配置。所有分辨率均兼容 60 Hz只有部分模式支持 144/240 Hz 高刷新率选择高刷模式前请确认你的分辨率在表中具备对应刷新档位。低端 GPU 注意如 GTX 1650 这类显卡在 DCI 4K4096 x 2160串流时可能出现问题may get bugged对低配主机建议优先选择 4K UHD 或更低的档位。添加更多自定义模式最多 5 个如需添加表中之外的显示模式可通过注册表注入。在连接虚拟显示之前驱动会读取HKLM\SOFTWARE\Parsec\vdd注册表键下的附加预设分辨率当前上限为5 条键值范围 0 到 5每条包含 width / height / hz 三个字段HKLM\SOFTWARE\Parsec\vdd: - key: [0 - 5] value: { width, height, hz }对于个人使用而言5 条自定义模式通常已经足够如需突破该上限理论上需与 HDR 解锁相同——修改驱动 DLL 内嵌的 EDID/模式数据块后重新安装驱动参见下文驱动实现与仓库 README.md 中的说明。更详尽的进阶配置方法可参考 Parsec 官方发布的 VDD Advanced Configuration 指南。二、驱动实现细节Driver implementationParsec VDD 是一套运行在用户态user mode的间接显示驱动Indirect Display DriverIDD基于IddCx 1.4 或 1.5版本实现。IddCxIndirect Display Driver Class Extension是微软为 USB 显示器、虚拟显示器等间接显示设备提供的内核框架Parsec VDD 借助它在系统层面凭空生成一个个可被桌面合成器枚举的显示器。驱动对外暴露了 5 个 IO 控制码IOCTL由上层应用通过DeviceIoControl下发分别对应添加/移除显示器、更新时序、查询版本与设置首选适配器 LUID// add monitor CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800 1, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) // remove monitor CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800 2, METHOD_BUFFERED, FILE_WRITE_ACCESS) // update timing CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800 3, METHOD_BUFFERED, FILE_WRITE_ACCESS) // query version CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) // set preferred adapter LUID CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800 5, METHOD_BUFFERED, FILE_WRITE_ACCESS)IOCTL 与源码的对应关系这些控制码在仓库源码中已被预先计算为最终值并固化为枚举常量可直接对照core/parsec-vdd.hC/C 单头文件 API中的VddCtlCode枚举VDD_IOCTL_ADD 0x0022e004add monitorVDD_IOCTL_REMOVE 0x0022a008remove monitorVDD_IOCTL_UPDATE 0x0022a00cupdate timingVDD_IOCTL_VERSION 0x0022e010query versionVDD_IOCTL_UNKONWN 0x0022a00c驱动 v0.45 新增、与 IOCTL_UPDATE 相关但 Parsec 官方应用未使用的代码C# 侧 app/Vdd/Core.cs 中的IoCtlCode枚举值与之一一对应并额外保留了IOCTL_UNKNOWN1 0x22A014作为对 v0.45 新控制码的注释性占位。底层调用链ping 保活机制理解这套 IOCTL 的关键是保活keep-alive机制调用VddAddDisplay添加显示器后上层必须周期性发送VDD_IOCTL_UPDATE即 update timing / ping否则驱动会在约 1 秒后自动拔除所有已添加的虚拟显示器——这是驱动内置的看门狗用于防止宿主崩溃后残留幽灵显示器。从 core/parsec-vdd.h 的注释可见VddUpdate应在独立线程中每 100ms 以内调用一次core/vdd-demo.cc 给出了最小可运行示例主线程处理按键A 添加 / R 移除最后一个 / Q 退出旁路线程以 100ms 间隔循环VddUpdate退出前逆序移除全部显示器。C# 侧 app/Vdd/Controller.cs 的UpdateLoop同样以Thread.Sleep(100)为周期发送更新。三、适配器信息Adapter info虚拟显示适配器在设备管理器中的标识如下应用正是依靠这些标识完成设备枚举与状态查询见 app/Device.cs 的QueryStatus/OpenHandle以及 core/parsec-vdd.h 中的VDD_ADAPTER_GUID、VDD_CLASS_GUID、VDD_HARDWARE_ID常量属性值名称NameParsec Virtual Display Adapter硬件 IDHardware IDRoot\Parsec\VDA设备类 GUIDClass GUID{4d36e968-e325-11ce-bfc1-08002be10318}适配器 GUIDAdapter GUID{00b41627-04c4-429e-a26e-0265cf50c8fa}实际使用中QueryDeviceStatus(VDD_CLASS_GUID, VDD_HARDWARE_ID)用类 GUID 硬件 ID 检查驱动是否安装、运行正常返回DeviceStatus枚举OpenDeviceHandle(VDD_ADAPTER_GUID)则通过适配器 GUID 找到设备接口路径并CreateFile打开句柄供后续 IOCTL 使用。四、显示器信息Monitor info由 VDD 生成的虚拟显示器拥有固定的标识与 EDID属性值IDPSCCDD0名称ParsecVDAEDID见下方十六进制代码IDPSCCDD0可在注册表HKLM\SYSTEM\CurrentControlSet\Enum\DISPLAY下看到也是 core/parsec-vdd.h 中VDD_DISPLAY_ID与 app/Vdd/Core.cs 中DISPLAY_ID常量的来源应用枚举显示器时正是通过匹配该名称筛选出 VDD 虚拟屏见Core.GetDisplays。名称ParsecVDA显示在系统高级显示设置页签中即VDD_DISPLAY_NAME/DISPLAY_NAME。完整 EDID 数据块00 FF FF FF FF FF FF 00 42 63 D0 CD ED 5F 84 00 11 1E 01 04 A5 35 1E 78 3B 57 E0 A5 54 4F 9D 26 12 50 54 27 CF 00 71 4F 81 80 81 40 81 C0 81 00 95 00 B3 00 01 01 86 6F 80 A0 70 38 40 40 30 20 35 00 E0 0E 11 00 00 1A 00 00 00 FD 00 30 A5 C1 C1 29 01 0A 20 20 20 20 20 20 00 00 00 FC 00 50 61 72 73 65 63 56 44 41 0A 20 20 20 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 C6 02 03 10 00 4B 90 05 04 03 02 01 11 12 13 14 1F 8A 4D 80 A0 70 38 2C 40 30 20 35 00 E0 0E 11 00 00 1A FE 5B 80 A0 70 38 35 40 30 20 35 00 E0 0E 11 00 00 1A FC 7E 80 88 70 38 12 40 18 20 35 00 E0 0E 11 00 00 1E A4 9C 80 A0 70 38 59 40 30 20 35 00 E0 0E 11 00 00 1A 02 3A 80 18 71 38 2D 40 58 2C 45 00 E0 0E 11 00 00 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 A6EDID 的用途与替换你可以把这份 EDID 数据粘贴到在线 EDID 阅读器如 edidreader.com或专业的 EDID 编辑工具如 AW EDID Editor中在线查看与解析。实用技巧该 EDID 可用于替换 HDMI 假负载HDMI dongle的 EDID以获得更理想的显示时序。使用 EDID/DisplayID Writer 工具即可完成替换。注意EDID 同时决定了 HDR 能力的边界——Parsec VDD 的虚拟屏不支持 HDREDID 中未包含 HDR 元数据与 10bit 色深。理论上可以通过修改 EDID 解锁 HDR但虚拟显示器不像物理显示器那样可刷固件也没有注册表开关所有 IDD 的固定 EDID 块都内嵌在驱动 DLLmm.dll中因此必须修改该数据块后用驱动安装工具重装驱动才能生效。五、驱动安装与使用前置条件规格文档假设驱动已正确安装。从仓库 README.md 可知驱动版本与系统的最小匹配关系这也是使用上表分辨率模式的前提版本最低系统IddCx备注parsec-vdd-0.38Windows 10 16071.0已过时可能随机崩溃parsec-vdd-0.41Windows 10 19H21.4稳定parsec-vdd-0.45Windows 10 21H21.5串流色彩更好但部分 Windows 上可能不工作以上版本在 Windows Server 2019 及以上同样可用。安装方式之一是用 7z 解压驱动安装包得到nefconwCLI 与driver/目录含 mm.cat、mm.dll、mm.inf随后以管理员权限执行start /wait .\nefconw.exe --remove-device-node --hardware-id Root\Parsec\VDA --class-guid 4D36E968-E325-11CE-BFC1-08002BE10318 start /wait .\nefconw.exe --create-device-node --class-name Display --class-guid 4D36E968-E325-11CE-BFC1-08002BE10318 --hardware-id Root\Parsec\VDA start /wait .\nefconw.exe --install-driver --inf-path .\driver\mm.inf也可以直接静默运行安装包快速安装.\parsec-vdd-0.45.0.0.exe /S。六、规格之外的注意事项显示器数量每个适配器理论上可创建 16 个虚拟显示器但为规避插拔延迟仓库源码core/parsec-vdd.h 与 app/Vdd/Core.cs将VDD_MAX_DISPLAYS/MAX_DISPLAYS限定为 8。模式切换方式添加后的虚拟显示器没有直接的驱动级操作接口改变其分辨率/刷新率需调用 Win32 Display API 设置显示模式可参考仓库内 ParsecDisplay 应用的实现app/Display.cs、app/MainWindow.xaml.cs。隐私模式冲突若在 Parsec 主机端开启了Privacy Mode请关闭它并清理注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Connectivity下的已连接显示配置否则添加虚拟显示器时主显示会关闭导致远程会话被中断。Windows 10 Connectivity 注册表怪癖Windows 10 按已连接显示器 ID 组合缓存显示布局拔掉中间某台显示器后剩余子集会形成系统从未见过的组合而回退到默认模式。应用通过从右到左按最新驱动索引优先逆序拔除来规避相关处理可见 app/Vdd/Controller.cs 的Suspend方法。延伸阅读docs/PARSEC_VDD_RE.md反向工程得到的完整 IOCTL 参考结构布局、生命周期、状态码。docs/VDD_LIBRARY_USAGE.md单头文件 C/C API 用法与示例。docs/VDD_CLI_USAGE.mdParsecDisplay 命令行vdd的 add/remove/list/set/version 全套用法。core/parsec-vdd.h 与 core/vdd-demo.cc核心 API 定义与最小演示程序。README.md项目总览、驱动安装与使用场景。赞分享桌面应用驱动开发【免费下载链接】parsec-vdd✨ Perfect virtual display for game streaming项目地址https://gitcode.com/gh_mirrors/pa/parsec-vdd点击查看免费下载相关推荐Parsec虚拟显示驱动(VDD)技术规范详解Parsec虚拟显示驱动 VDD 技术规范详解 项目概述 Parsec虚拟显示驱动 Virtual Display Driver简称VDD 是一款高性能的虚拟桌面应用驱动开发Parsec-VDD虚拟显示器异常高分辨率问题解决方案Parsec VDD虚拟显示器异常高分辨率问题解决方案 问题现象分析 在使用Parsec VDD虚拟显示器时用户可能会遇到因误设超高分辨率导致的问题。具体表现桌面应用驱动开发Parsec-VDD 虚拟显示器刷新率限制解析Parsec VDD 虚拟显示器刷新率限制解析 在虚拟显示技术领域Parsec VDD 是一个重要的开源项目它通过创建虚拟显示器来实现远程桌面和屏幕共享功能桌面应用驱动开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表