LensLink
IdiomaES

Latencia y rendimiento

Unos 60 ms de la cámara a OBS por USB, a 1080p o 4K; por Wi-Fi es más alta y más variable. La cifra se mide de forma continua, no se estima, y se muestra en el campo Estado, en la barra de estado y en el registro.

De dónde viene el retraso#

FaseAproximadamenteNotas
Captura y exposiciónUn fotogramaLas escenas más luminosas se exponen más rápido, y se nota aquí.
Codificación por hardwareUnos pocos msVideoToolbox. No hay nada que ajustar.
El enlaceUSB: pequeño y estable. Wi-Fi: variableLa fase que separa una buena configuración de una frustrante.
DecodificaciónUnos pocos msEn la GPU de forma predeterminada, con paso automático a software.
Hasta tu escenaMenos de un milisegundo con el pipeline en GPUSi no, una copia fuera de la memoria de la GPU y de vuelta.

Cómo reducirlo#

  1. Usa USB. Es lo más constante, no le afecta la congestión del Wi-Fi y carga el teléfono.
  2. Ilumina la escena. Una habitación oscura alarga la exposición, y eso se suma directamente a la latencia.
  3. Deja activados los valores predeterminados. El modo de baja latencia y la decodificación por hardware vienen activados.
  4. No pidas más de lo necesario. Si la toma es una persona hablando que ocupa 1000 px de ancho en tu escena, 1080p no es ningún sacrificio.
  5. Usa el teleobjetivo en lugar de mucho zoom digital. El video ampliado y con ruido se comprime mal, y eso se traduce en picos de tasa de bits y de latencia.

La congestión se descarta, no se acumula. Cuando el enlace se atasca, LensLink descarta fotogramas y baja la calidad un momento en lugar de acumular retraso, así que la latencia se mantiene estable en vez de ir subiendo a lo largo de la transmisión.

Seguir las cifras#

La cifra es real: una vez por segundo se hace un intercambio de desfase de reloj al estilo NTP, que también es lo que hace posible la sincronía labial automática.

El pipeline de decodificación en GPU (beta)#

Normalmente, cada fotograma decodificado se descarga de la GPU a la memoria del sistema, se entrega a OBS y se vuelve a subir enseguida para la composición: unos 2 GB/s de píxeles a 4K60, para nada. El pipeline beta entrega el fotograma a OBS como textura y se ahorra ese viaje de ida y vuelta.

Herramientas → Ajustes de LensLink. Todas las fuentes cambian a la vez, tras reiniciar OBS.

Resultados medidos#

Doce configuraciones, unos 25 s de video en vivo cada una, con el mismo PC y el mismo teléfono por Wi-Fi. Las copias de píxeles marcaron 0,00 MB/s en todas las pruebas con el pipeline en GPU.

ConfiguraciónCoste por fotograma (ms)Copias de píxeles (MB/s)CPU de OBS
720p 60 HEVC0,81 → 0,09163 → 02,2 % → 1,4 %
1080p 60 H.2642,11 → 0,10370 → 02,3 % → 1,6 %
1080p 60 HEVC1,42 → 0,09373 → 02,6 % → 1,4 %
4K 30 HEVC4,96 → 0,14721 → 02,9 % → 1,5 %
4K 60 H.2647,54 → 0,101221 → 04,1 % → 1,8 %
4K 60 HEVC4,75 → 0,101439 → 04,1 % → 1,6 %

El coste por fotograma baja entre un 89 y un 99 %, y la ganancia crece con la resolución: a 4K60 HEVC, el pipeline estándar movía unos 1,4 GB/s por la memoria del sistema, que esto elimina por completo, y el uso de CPU del proceso de OBS se reduce aproximadamente a la mitad. La latencia y la velocidad de fotogramas no mostraron ninguna diferencia sistemática: las determinan la red y el codificador del teléfono, no la vía de renderizado.

Notas por plataforma#

WindowsCualquier sistema compatible con OBS 32 (Windows 10 1909 o posterior), con texturas D3D11 compartidas.
macOSCualquier sistema compatible con OBS 32 (macOS 13 o posterior), mediante IOSurface. Las transmisiones de 10 bits son la excepción: VideoToolbox las convierte a 8 bits por su cuenta, así que HDR y Apple Log se renderizan por el pipeline estándar y no por este.
LinuxRequiere OBS sobre EGL (la opción predeterminada en Wayland y en las versiones actuales para X11) y un controlador VAAPI: viene integrado en Mesa para Intel y AMD; NVIDIA necesita nvidia-vaapi-driver.
Varias GPUSi la decodificación y el renderizado se hacen en GPU distintas, no se pueden compartir texturas; la fuente vuelve automáticamente al método estándar.

La vuelta al método estándar es automática y por fuente: en el peor caso tienes exactamente el pipeline estándar, con una línea en el registro que explica por qué.

¿Importa la marca de la GPU?#

Menos que el sistema operativo. La decodificación es un bloque de función fija en todas las GPU modernas, y el plugin la solicita a la API propia de la plataforma, no a nada específico de un fabricante.

WindowsIndependiente del fabricante. D3D11VA en cualquier GPU actual, con DXVA2 como alternativa.
macOSVideoToolbox, tanto en Mac con Apple silicon como con Intel.
Linux, Intel o AMDVAAPI ya viene en Mesa: no hay nada que instalar.
Linux, NVIDIARequiere nvidia-vaapi-driver; VDPAU es la alternativa. Es el único caso en que la marca decide si el pipeline en GPU llega a activarse.
Portátiles con dos GPUSi la decodificación se hace en una y OBS renderiza en la otra, no se pueden compartir texturas y la fuente vuelve por sí sola al método estándar.
GPU antiguasUna GPU sin decodificador HEVC Main10 pasa a software para las transmisiones de 10 bits; las de 8 bits no se ven afectadas.

Varios teléfonos a la vez es una carga de decodificación, no de codificación. El límite de NVIDIA de sesiones NVENC simultáneas no se aplica: aquí no se codifica nada en la computadora. Lo que te limita es el rendimiento de decodificación y el ancho de banda de memoria, que es justamente lo que ahorra el pipeline en GPU.

Las mediciones anteriores proceden de un único equipo Windows con una tarjeta NVIDIA. El pipeline está en beta en parte porque las demás combinaciones (IOSurface en macOS, VAAPI de Mesa, nvidia-vaapi-driver y la vuelta al método estándar con varias GPU) necesitan más informes de uso real que más código.

Medirlo tú mismo#

Herramientas → Ajustes de LensLink → Registrar métricas de rendimiento del pipeline escribe una fila CSV por segundo en la carpeta de configuración del plugin (la ruta aparece en el registro), además de un resumen cada cinco segundos. Transmite diez segundos con cada configuración y luego compara una pareja:

python3 tools/bench-report.py BEFORE.csv AFTER.csv

Se espera que cualquier cambio de rendimiento que se proponga para LensLink cite una de estas comparaciones.