ffmpeg: transmisión en vivo en una etiqueta de video del navegador (solo localhost)

Estoy creando una aplicación, que es básicamente un chat de video, donde un usuario se conecta usando WebRTC con el navegador de otro usuario (operador), y debería poder hablar con una tercera persona. La parte de WebRTC ya está hecha y funciona correctamente. La otra parte, la problemática, es que la tercera persona será grabada por algún equipo de video y se me transmitirá una transmisión usando ffmpeg. Entonces, de alguna manera necesito transmitir esto en un navegador (y luego transmitirlo usando WebRTC, esa parte la tengo cubierta).

Dado que la transmisión se manejará para mí usando ffmpeg, sería mejor usar ffmpeg para transmitir a un navegador, pero esta es la parte donde se complica. Por lo que entiendo, el único protocolo que puedo usar es HTTP (ya que los navegadores no son compatibles con UDP ni casi nada y usar Flash Player no es una opción), pero no está claro cómo.

Una forma era usar ffserver, pero quedó obsoleto a principios de este año y prefiero evitar usar software obsoleto. Otra opción es usar algún otro servidor de transmisión de medios, pero prefiero evitar instalar cualquier cosa.

Por lo que he leído, ffmpeg debería ser compatible con lo que necesito, pero no estoy seguro de cómo configurarlo. Por ahora tengo esto:

ffmpeg -f video4linux2 -s 640x480 -r 30 -i /dev/video0 -thread_queue_size 512 -ac 1 -f alsa -i pulse -f webm -listen 1 -seekable 0 -multiple_requests 1 http://localhost:8090

...y una etiqueta de video HTML para mostrar esto.

<video src="http://localhost:8090"></video>

... que casi funciona con ffmpeg version 2.8.15-0ubuntu0.16.04.1. Hago que el navegador reproduzca mi video, pero solo después de que se detiene la grabación. Parece que el navegador ve mi salida ffmpeg como un archivo e intenta descargarlo antes de que comience a reproducirse.

Este mismo comando, ejecutar con ffmpeg version 4.1me da errores:

[vp8_v4l2m2m @ 0x3dede80] driver 'uvcvideo' on card 'ASUS USB2.0 WebCam'
[vp8_v4l2m2m @ 0x3dede80] Could not find a valid device
[vp8_v4l2m2m @ 0x3dede80] can't configure encoder
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

¿Cómo transmito en vivo desde ffmpeg a un navegador usando http? Si necesito algún tipo de multiplexor de segmentos, ¿cómo lo uso?

Notas:

  • Uso mi cámara web como entrada, ya que parece estar cerca de lo que puedo esperar en producción.
  • este es un entorno Linux (Ubuntu)
  • toda esta configuración se instalará en el hardware de nuestros clientes y, después de eso, ya no tendré acceso a ella. Por lo tanto, quiero evitar usar cualquier otra cosa que no sea ffmpeg (que ya usan), ya que no estoy seguro de si podrán manejar esto a largo plazo.

Respuestas (1)

Creo que el problema es la etiqueta de video. La etiqueta de video no admite la transmisión en vivo directamente, consulte esta pregunta en SO . Específicamente:

A. Esta respuesta para una descripción técnica de lo que desea implementar

B. Esta respuesta para un ejemplo de código