Aceleración por hardware

El video de la cámara y de la pantalla compartida se codifica en la GPU siempre que el hardware y el driver lo aguanten. Cuando no, GameVox pasa a software y sigue funcionando. Esta página explica cómo se toma esa decisión, qué puede hacer tu GPU y dónde mirar cuando el resultado no es el que esperabas.

¿La imagen se ve borrosa o entrecortada?

La codificación por hardware es solo una de las cosas que deciden cómo se ve tu video. Hay otras dos que influyen más a menudo: el límite de bitrate que tiene tu grupo en ese servidor y la reducción automática de calidad que se activa cuando tu conexión no puede con la transmisión. Ambas se explican en por qué la imagen todavía puede verse mal.

Cómo ver qué estás usando

Ajustes → Audio y vídeo → Calidad de transmisión es la forma más rápida. El menú Códec de vídeo marca cada opción como Hardware Accelerated, Software Encoding o Unsupported, y atenúa las que tu equipo no puede usar en absoluto. Justo debajo, la tarjeta Aceleración por hardware muestra el backend de codificación que detectó la app de escritorio al iniciar (NVENC, AMF, QSV, VAAPI o VideoToolbox), los códecs que ofrece y el backend de decodificación que lo acompaña. Esa detección se ejecuta en segundo plano al abrir la app, así que la tarjeta normalmente ya está completa cuando abres Ajustes.

Para una llamada que ya está en curso, el registro de actividad del canal de voz es mejor. Cuando alguien enciende la cámara o comparte pantalla, una línea secundaria atenuada debajo de esa entrada indica el códec, el nombre del codificador y si es hardware o software, algo como AV1 · AV1 (FFmpeg-NVENC) · hardware. Los cambios de codificador a mitad de la transmisión tienen su propia entrada, así que puedes ver cuándo se rindió una ruta por hardware y qué la reemplazó.

Registro de actividad de un canal de voz de GameVox, con una entrada de pantalla compartida que muestra AV1 · AV1 (FFmpeg-NVENC) · hardware debajo

El archivo de log de la app de escritorio tiene el resto. Está en %LOCALAPPDATA%\GameVox\logs\ en Windows, ~/Library/Application Support/GameVox/logs/ en macOS y ~/.gamevox/logs/ en Linux. Líneas que vale la pena buscar:

  • [HWEnc] Detected: el backend de codificación y qué códecs dice soportar
  • [NVENC] Function table loaded successfully (API X.Y) la versión de la API de NVENC que expone tu driver de NVIDIA
  • Selected encoder: lo que eligió la escalera para esta transmisión
  • [FFmpegHW] Created el codificador se abrió, con resolución y bitrate
  • [EncSelect] ... trial failed un codificador por hardware rechazó la solicitud y la escalera pasó al siguiente
  • [ScreenShare-Win] Capture backend: WGC, DXGI o BitBlt, el método de captura de Windows en uso

Cómo se elige un códec

GameVox negocia AV1, VP9, H.264 y VP8. HEVC no está en ese conjunto, así que las tablas de abajo no lo incluyen aunque la mayoría de estas GPU puedan codificarlo.

Quien envía recorre una escalera de arriba abajo y se detiene en el primer peldaño que el servidor ofreció y que la GPU realmente puede abrir. Esa segunda parte no es una suposición: el cliente crea un codificador de prueba con la resolución y el bitrate exactos que va a usar, porque muchos drivers funcionan en 1080p y fallan en 4K.

Windows

  1. AV1 en la GPU: av1_nvenc, av1_amf o av1_qsv
  2. VP9 en la GPU: solo vp9_qsv. NVIDIA y AMD nunca sacaron silicio de codificación VP9, así que esos sistemas se saltan este peldaño por completo
  3. H.264 en la GPU: h264_nvenc, h264_amf o h264_qsv
  4. VP9 por software (libvpx), luego VP8, luego AV1 mediante libaom

Linux

  1. VAAPI AV1, una vez que la prueba VAAPI en un proceso aparte confirmó que funciona
  2. NVENC AV1, para equipos NVIDIA sin el puente nvidia-vaapi-driver
  3. VAAPI VP9
  4. VAAPI H.264, solo para cámara y video del DJ
  5. NVENC H.264
  6. libaom AV1, luego libvpx VP9, luego VP8

Compartir pantalla se salta a propósito el peldaño VAAPI H.264. La calidad de los drivers con contenido de pantalla ha sido tan mala en Intel y AMD, con muchos bloques en escenas de mucho movimiento, que VP9 por software da mejor imagen. NVENC H.264 sigue activo para compartir pantalla, así que un equipo NVIDIA en Linux todavía obtiene H.264 por hardware en lugar de caer hasta un codificador por software.

VAAPI AV1 es el único peldaño que no se usa a ciegas. El radeonsi de Mesa de serie tiene historial de colgarse en el primer intento de AV1, así que el cliente se salta AV1 hasta que un proceso de prueba aparte lo haya abierto con éxito al menos una vez. En el primer arranque eso puede significar NVENC o AV1 por software en la primera transmisión y VAAPI AV1 a partir de entonces.

macOS

La versión de macOS no incluye los codificadores por hardware de FFmpeg. La codificación y la decodificación pasan por VideoToolbox dentro de la pila WebRTC de WebKit, lo que te da H.264 acelerado pero no AV1: Apple nunca ha puesto un codificador AV1 en ningún chip.

Cambiar la elección

El menú Códec de vídeo pone tu elección al principio de la escalera en lugar de forzarla. Si eliges AV1 en una GTX 1080, no hay codificador AV1 que abrir, así que la escalera vuelve a su orden normal en lugar de hacer fallar la transmisión. Automático es casi siempre la mejor opción.

Rutas por plataforma

SOCodificaciónDecodificaciónFabricantes
Windows 10/11NVENC, AMF, Quick SyncD3D11VANVIDIA, AMD, Intel
LinuxVAAPI, NVENCVAAPI, luego NVDECAMD (Mesa), Intel (iHD), NVIDIA
macOSVideoToolbox mediante WebKitVideoToolbox mediante WebKitApple Silicon, Mac con Intel

En Linux, el decodificador prueba primero VAAPI y, si no puede, pasa a NVDEC, así que una tarjeta NVIDIA decodifica por hardware sin tener instalado el puente nvidia-vaapi-driver. Los fotogramas decodificados por hardware vuelven como NV12 y se convierten a RGBA en la CPU, lo que cuesta más o menos lo mismo que el paso de conversión del propio decodificador por software.

Codificación por GPU

Envío de video: cámara y pantalla compartida.

Familia de GPUH.264VP9AV1
NVIDIA, mediante NVENC
RTX 40 / 50 (Ada Lovelace, Blackwell)SíNoSí
RTX 20 / 30, GTX 16 (Turing, Ampere)SíNoNo
De GTX 600 a GTX 10 (de Kepler a Pascal)SíNoNo
AMD, mediante AMF en Windows y VAAPI en Linux
RX 7000 / 9000, APU Phoenix (RDNA 3, RDNA 4)SíNoSí
De RX 400 a RX 6000 (de Polaris a RDNA 2)SíNoNo
Intel, mediante Quick Sync en Windows y VAAPI en Linux
Arc serie A/B, Core Ultra (Alchemist, Battlemage, Meteor / Lunar / Arrow Lake)SíSíSí
Core de 7.ª a 14.ª generación (de Kaby Lake a Raptor Lake)SíSíNo
Core de 4.ª a 6.ª generación (de Haswell a Skylake)SíNoNo
Apple, mediante VideoToolbox
Apple Silicon y Mac Intel con T2SíNoNo

Intel es el único fabricante que ha puesto un codificador VP9 en chips de consumo, a partir de Kaby Lake. La codificación AV1 llegó con Arc y las iGPU Core Ultra en Intel, con RDNA 3 en AMD y con Ada Lovelace en NVIDIA. Todo lo anterior codifica H.264 por hardware y el resto por software.

Decodificación por GPU

Recepción del video de todos los demás en el canal.

Familia de GPUH.264VP9AV1
NVIDIA, mediante NVDEC (D3D11VA en Windows, CUDA en Linux)
RTX 30 y posteriores (Ampere en adelante)SíSíSí
GTX 10 / RTX 20 (Pascal, Turing)SíSíNo
GTX 900 (Maxwell 2)SíSolo 8 bitsNo
GTX 600 / 700 (Kepler)SíNoNo
AMD, mediante VCN (D3D11VA en Windows, VAAPI en Linux)
RX 6000 y posteriores (RDNA 2 en adelante)SíSíSí
RX Vega, RX 5000 (RDNA 1)SíSíNo
RX 400 / 500 (Polaris)SíNoNo
Intel, mediante Quick Sync (D3D11VA en Windows, VAAPI en Linux)
Arc, Core Ultra, 11.ª generación y posteriores (Tiger Lake en adelante)SíSíSí
Core de 7.ª a 10.ª generación (de Kaby Lake a Comet Lake)SíSíNo
Core de 6.ª generación (Skylake)SíSolo 8 bitsNo
Core de 4.ª / 5.ª generación (Haswell, Broadwell)SíNoNo
Apple, mediante VideoToolbox
Apple Silicon, M3 y posterioresSíSíSí
Apple Silicon, M1 y M2SíSíNo
Mac Intel con chip T2 (2018 en adelante)SíNoNo

Estas columnas describen el silicio. Una GPU que puede decodificar un códec igual necesita un driver que lo exponga, y un equipo Linux sin libva-drm decodifica por software sin importar lo que soporte el hardware. GameVox intenta primero la decodificación por hardware y pasa a software ya en el primer fotograma si el acelerador no se inicializa.

Por qué la imagen todavía puede verse mal

Un codificador por hardware en una GPU capaz todavía puede producir una transmisión borrosa o entrecortada, porque la resolución y el códec no son lo único que influye. Las dos causas más comunes no tienen nada que ver con las tablas de arriba.

Tu grupo puede limitar el bitrate

Los dueños de servidores pueden poner un límite de bitrate a un grupo, por separado para pantalla compartida, cámara y micrófono. El límite con el que realmente codificas es el menor entre el del nivel del servidor y el de tu grupo, así que un servidor Diamond igual puede dejar a un grupo en 2.5 Mbps de pantalla compartida. Los límites de pantalla compartida van de 2.5 a 25 Mbps, los de cámara de 0.8 a 10 Mbps y los de micrófono de 48 a 256 kbps.

Estás en exactamente un grupo por servidor, así que solo se aplica el límite de ese grupo: si pasas a otro grupo, su límite reemplaza al anterior. Un grupo sin límite definido te deja sin tope. Los dueños de servidores no están sujetos a sus propios límites. Si se aplicó un límite a una transmisión, el registro de actividad del canal lo indica en la misma línea atenuada que muestra el códec y el codificador, así que ese registro es la forma más rápida de distinguir un límite de grupo de un problema del codificador.

Baja la calidad por sí solo cuando falta ancho de banda

La calidad que eliges es un techo, no una promesa. Cuando quienes ven tu transmisión empiezan a perder paquetes, el servidor lo mide y le dice a tu cliente que baje el ritmo; tu codificador se reconstruye con el bitrate más bajo en más o menos un segundo. Cuando se despeja la congestión, el servidor quita el límite y tu preset elegido vuelve solo. No hace falta reiniciar nada.

Lo que se sacrifica primero depende de lo que envías. Por defecto, compartir pantalla protege la resolución, así que el texto y la interfaz se mantienen nítidos y lo que baja es la tasa de fotogramas. Cambiar la pantalla compartida al modo que prioriza los fotogramas invierte eso, lo que le va mejor a un gameplay que a una hoja de cálculo. El video de la cámara siempre protege la tasa de fotogramas y deja bajar la resolución, porque una cara fluida se ve mejor que una nítida y entrecortada.

Esto lo dispara tu capacidad real de subida en ese momento, así que una casa que satura la subida, un Wi-Fi congestionado o una VPN pueden provocarlo mientras tu GPU está casi sin hacer nada. Una transmisión que se ve bien y empeora a los pocos minutos casi siempre es esto y no una falla del codificador.

Cuando pasa a software

No se rompe nada cuando no hay aceleración por hardware. VP9 por software maneja 1080p30 sin problemas en cualquier CPU reciente y, en equipos más viejos, bajar la pantalla compartida a 720p suele alcanzar. Estos son los motivos más comunes.

Un driver de NVIDIA demasiado viejo. NVENC tiene una API con versiones, y un driver más antiguo de lo que espera la versión del cliente se rechaza directamente. Cuando pasa, la tarjeta de Ajustes lo indica y te dice la rama mínima de driver que necesitas, desde 522.25 para la API 12.0 de NVENC hasta 610 para la 13.1, en lugar de dejarte en software sin avisar.

Faltan drivers VA-API en Linux. Si no aparece ningún codificador, la tarjeta de Ajustes te dice el paquete para tu CPU: intel-media-va-driver en Intel Broadwell y posteriores, i965-va-driver en Haswell y anteriores, y mesa-va-drivers en AMD.

Un códec que el silicio no tiene. La detección es optimista en Intel, donde toda GPU dice al principio que soporta VP9 y AV1, así que la respuesta real solo aparece al abrir el codificador de prueba. Un peldaño que falla por un motivo que no puede cambiar mientras la app está abierta, como que el driver informe que falta el bloque de codificación, se descarta por el resto de la sesión en lugar de reintentarse en cada transmisión. Reinicia GameVox para volver a detectar después de actualizar el driver.

Estás en el cliente web. Los navegadores codifican y decodifican con WebCodecs, y si eso usa la GPU o no depende de Chrome, Edge o Firefox. Todo lo anterior se refiere a la app de escritorio.