Streaming
La consola de Hyper-V solo muestra la pantalla básica de Hyper-V, no lo que dibuja la GPU. Para ver la VM con la GPU, GpuVM instala un servidor de streaming dentro de la VM y la abre con un cliente en el host.
Componentes
Sección titulada «Componentes»| Componente | Dónde | Función | Versión fijada |
|---|---|---|---|
| Sunshine | VM | Captura la pantalla virtual y codifica con NVENC. | v2026.914.233613 |
| Virtual Display Driver | VM | Un monitor que dibuja la GPU. | 25.7.23 |
| nefcon | VM | Instalador de drivers por línea de comandos; crea el dispositivo de la pantalla virtual. | v1.14.0 |
| usbip-win2 | VM | Conecta el altavoz USB de GpuVM, que captura Sunshine. | 0.9.8.0 |
| Moonlight | Host | Muestra la VM. | Se instala aparte |
Los instaladores se descargan en el host al crear la VM, se verifican con el SHA-256 fijado en streaming/components.json y se copian al disco de la VM. El invitado no descarga nada. Se guardan en una carpeta cache (dentro de %ProgramData%\GpuVM con la app instalada).
nefcon está fijado en v1.14.0, la versión que usa el script oficial de instalación del VDD, aunque ya existe la v1.21.0.
Sunshine
Sección titulada «Sunshine»Sunshine corre dentro de la VM. Su usuario y contraseña se generan al crear la VM; en el host quedan cifrados con DPAPI. La contraseña viaja en texto plano al invitado solo para la instalación y después se borra.
Cada vez que haces Encender y abrir, GpuVM lee la lista de pantallas de Sunshine por su API, pone output_name en la pantalla virtual y reinicia Sunshine si eso cambió, para que nunca capture por error la pantalla de Hyper-V. Si GpuVM ya apagó la pantalla de Hyper-V, además pone dd_configuration_option en disabled: si Sunshine cambia la pantalla en cada sesión, vuelve a probar todos sus codificadores y el primer cuadro tarda 22 a 27 s en vez de unos 2 s (laboratorio 008). Cambiar la resolución o los FPS todavía cuesta 10 a 15 s, porque Sunshine ve que la pantalla cambió. Si no, usa ensure_only_display.
Modos de captura
Sección titulada «Modos de captura»Sunshine puede capturar la pantalla virtual de dos formas, que se eligen por VM en Opciones → Captura o con Set-GpuVMCapture -Name <vm> -Mode ddx|wgc:
| Modo | En la app | Cómo corre Sunshine | Muestra | No muestra |
|---|---|---|---|---|
ddx (desktop duplication) |
Estándar (la predeterminada) | Como servicio de Windows (SYSTEM). | Todo, incluidos los avisos de administrador de Windows. | Programas en pantalla completa exclusiva: negro. |
wgc (Windows.Graphics.Capture) |
Pantalla completa exclusiva | En la sesión del usuario que inició sesión, con una tarea al iniciar sesión (conhost --headless, sin ventana de consola); el servicio queda en manual. |
Programas en pantalla completa exclusiva, a cualquier resolución. | Los avisos de administrador (se dibujan en el escritorio seguro). |
Con ddx, desktop duplication no recibe cuadros nuevos de la pantalla virtual mientras un programa está en pantalla completa exclusiva, así que el stream queda en negro; el programa solo se ve cuando pierde el foco (laboratorio 009). El modo se aplica en el momento si la VM está encendida y se revisa en cada Encender y abrir; si ya está así, Sunshine no se reinicia. Aplicarlo necesita la contraseña del invitado.
Pantalla virtual
Sección titulada «Pantalla virtual»El Virtual Display Driver agrega un monitor que dibuja la GPU. Se instala con nefcon y solo se confía en el certificado que firmó el driver.
- Después del primer inicio la VM se reinicia una vez sola para dejar la pantalla virtual como única pantalla.
- Si la pantalla virtual funciona, se desactiva la pantalla de Hyper-V para que Windows y Sunshine usen la virtual (
disableHyperVVideoen el perfil). - En cada Encender y abrir, con la contraseña del invitado guardada, la pantalla virtual queda como la única y principal de la VM. Las VMs con GPU-P reciben una salida oculta extra de 1024×768 de la GPU compartida; si quedara como principal, las ventanas nuevas (Steam, instaladores) se abrirían donde el stream no las muestra. Si ya está así, no se toca nada, para que Sunshine no vuelva a probar sus codificadores.
- Si algo falla, la VM sigue accesible por Escritorio remoto.
Moonlight
Sección titulada «Moonlight»Moonlight en el host muestra la VM. El emparejamiento es automático: Moonlight genera el PIN y GpuVM se lo entrega a Sunshine por su API. El cliente emparejado lleva el nombre de este equipo.
- Para volver a emparejar: Volver a emparejar Moonlight en el menú de la app, o
./gpuvm.ps1 connect -Name <vm> -Pair. - La resolución y los FPS se eligen en las Opciones de la app, o en cada conexión:
./gpuvm.ps1 connect -Name win11 -Resolution 2560x1440 -Fps 120 -BitrateKbps 40000 -Codec HEVCCodecs: auto, H.264, HEVC, AV1. Por defecto Moonlight abre la app Desktop de Sunshine.
Las VMs de generación 2 de Hyper-V no tienen tarjeta de sonido. GpuVM le da a la VM su propio altavoz USB: un pequeño servidor dentro de la VM (GpuVMAudio.exe) se presenta como un dispositivo de audio USB (48 kHz, estéreo), usbip-win2 lo conecta y Windows lo maneja con su propio driver de audio USB, como si fuera hardware real. Aparece como Altavoces (GpuVM Audio) y Sunshine lo captura (virtual_sink).
- Nada sale de la VM: el servidor solo escucha en
127.0.0.1, corre comoLOCAL SERVICEy su programa vive enC:\Program Files\GpuVM\Audio, donde solo los administradores pueden escribir. - usbip-win2 instala solo su cliente, en silencio. Sus drivers están firmados por Microsoft: sin modo de prueba ni certificados propios. GpuVM comprueba ambas cosas y lo desinstala si alguna falla.
- El altavoz es persistente: usbip-win2 lo vuelve a conectar cada vez que Windows arranca, sin reinicios ni inicio de sesión. Encender y abrir lo revisa cada vez, lo reconecta si se perdió y actualiza el servidor cuando GpuVM trae uno nuevo.
- Las VMs creadas con VB-CABLE pasan al altavoz la próxima vez que se abren. Dentro de una VM, la salida de VB-CABLE le llega muda a Sunshine; el sonido de antes venía de Steam Streaming Speakers (laboratorios 011 y 012).
Ajustes del perfil
Sección titulada «Ajustes del perfil»La sección streaming del perfil define los valores por defecto:
"streaming": { "provider": "sunshine", // o "none" para crear la VM sin streaming "virtualDisplay": true, "disableHyperVVideo": true, "audio": "usb", // o "none" para no instalar audio "sunshine": { }, // claves extra para sunshine.conf "client": { "app": "Desktop", "resolution": "1920x1080", "fps": 60, "bitrateKbps": 0, "codec": "auto" }}client también acepta vsync, framePacing, performanceOverlay (true/false) y displayMode (fullscreen, windowed, borderless). Solo se le pasan a Moonlight si el perfil los define. captureSystemKeys (never, fullscreen, always; fullscreen si no se define) decide cuándo Alt+F4, Alt+Tab y la tecla Windows van a la VM; Ctrl+Alt+Shift+Q siempre sale del stream.
Moonlight se abre como el usuario que inició sesión, sin permisos de administrador, aunque GpuVM corra elevada: habla con un servidor que controla la VM.
Actualizar componentes
Sección titulada «Actualizar componentes»./gpuvm.ps1 components-update -WhatIf # ver si hay versiones nuevasBusca la última versión publicada en GitHub de cada componente y actualiza versión, URL y SHA-256 en streaming/components.json. usbip-win2 se mantiene en 0.9.8.0 (hold en el archivo) hasta que un laboratorio pruebe una versión nueva. Una versión nueva no está probada: valídala en un laboratorio antes de crear VMs con ella. La app no puede ejecutar este comando.