Transmitir una pantalla con ffmpeg a través de http

Transmitir una pantalla con ffmpeg a través de http

Estos días de cuarentena iba a compartir mi escritorio con amigos para explicarles qué es git en una práctica. Los problemas son:

  • Yo uso FreeBSD.
  • Estamos detrás de las NAT. Pero tengo un VPS con VPN (Wireguard) configurado para estos fines.
  • Quiero utilizar software gratuito y sencillo ("inútil").

Lo que decidí usar es compartir mi escritorio ffmpeg -f x11graby transmitir la salida a cualquier puerto. Como podemos estar en una red virtual, los amigos podrían ver esta transmisión sin problemas usando cualquier VLC, MPV o navegador web. El problema surgió cuando entendí que ffmpeg no puede generar salida directamente a http. Probé muchas soluciones, como enviar a través de rtmp a YouTube Live Streaming (servicio general y no gratuito) y dividir y compartir con el protocolo HLS y el servidor HTTP y me detuve en HLS.

Mi lanzamiento de ffmpeg:

ffmpeg -f x11grab -video_size 1920x1080 -i :0 -c:v h264 -f hls -hls_time 1 -g 15 stream.m3u8

Y mpv con el que estoy probando:

mpv --no-cache --no-resume-playback stream.m3u8

Veo que hay una latencia de unos 10-15 segundos. Incluso si configuro la tasa de bits de video en medio megabyte, hay una latencia similar (y mala calidad, por supuesto), lo que puede significar que el problema no está en el ancho de banda [y ni siquiera comencé a transmitirlo a algún lugar más allá de mi local ¡ORDENADOR PERSONAL!].

Encontre unPues contestadonde un usuario dice que HLS es un protocolo incorrecto para baja latencia. Leo muchos blogs, artículos de Wikipedia y Wikipedia ffmpeg (Guía de transmisión) pero no pude encontrar una solución. ¿Cómo puedo reducir la latencia o qué software puedo usar (es preferible ffmpeg) para permitir que mis amigos vean mi escritorio con una latencia equivalente a unos pocos segundos como lo hacen Discord y Skype? Vale la pena decir: no necesito una buena calidad y las caídas están bien porque voy a compartir una ventana de terminal.

información relacionada