Transmisión en vivo de Dash

después de mucho buscar en Google y después de leer toneladas de foros, todavía no puedo hacer una transmisión en vivo usando mi cámara a otro dispositivo. Mi sistema está compuesto por un servidor (una laptop con Windows), que captura la escena y transmite el video adquirido, hasta ahora intenté usar ffmpeg, MP4Box y DashCast obviamente sin resultados, y por un cliente (algún dispositivo) que debería ser capaz de leer el flujo de video usando una página html5 simple equipada con dash.js.

Al principio, para entender cómo funciona el tablero, intenté transmitir un video "estático" y todo funcionó perfectamente gracias a este tutorial . Los problemas surgen cuando traté de transmitir video en vivo y seguí este tutorial , porque ffmpeg falló cuando intentaba crear un archivo .mpd, pero se puede dividir en dos subproblemas:

  1. Cuando trato de manejar audio y video juntos, el sistema dice que el canal de audio no contiene ninguna transmisión. A continuación enumero el comando insertado:

    ffmpeg -f dshow -i video="USB2.0 VGA UVC WebCam":audio="Microfono /
    (Realtek   High Definition Audio)" -map 0:0 -pix_fmt yuv420p /
    -c:v libvpx -b:v 3000k -keyint_min 30 -g 30 -speed 6 /
    -tile-columns 4 -frame-parallel 1 -threads 8 -static-thresh 0 /
    -max-intra-rate 300 -deadline realtime -lag-in-frames 0 /
    -error-resilient 1 -f webm_chunk -header live.hdr /
    -chunk_start_index 1 live_%d.chk -map 0:1 -c:a libvorbis -b:a 128k /
    -ar 44100 -f webm_chunk -audio_chunk_duration 2000 -header /
    live_audio.hdr -chunk_start_index 1 live_audio_%d.chk
    

    Las filas anteriores llaman al hardware de audio y video y guardan las secuencias multimedia en fragmentos.

    ffmpeg -f webm_dash_manifest -live 1 -i live.hdr -f webm_dash_manifest /
    -live 1 live_audio.hdr -c copy -map 0 -map 1 -f webm_dash_manifest /
    -live 1 -adaptation_sets "id=0,streams=0 id=1,streams=1" /
    -chunk_start_index 1 -chunk_duration_ms 2000 /
    -time_shift_buffer_depth 7200 -minimum_update_period 7200 manifest.mpd
    

    Este último comando no pudo adjuntar la transmisión de audio en el archivo .mpd y en la consola apareció "El archivo de salida #0 no contiene ninguna transmisión" como error.

  2. Así que solo intento con video usando esencialmente las mismas opciones, pero cuando traté de crear el manifiesto, aparece un error de este tipo "No se pudo escribir el encabezado para el archivo de salida # 0 (¿parámetros de códec incorrectos?): Se encontraron datos no válidos al procesar la entrada". , así que tengo curiosidad por saber qué tipo de parámetros están mal.

En este punto, cambié completamente mi estrategia, así que creé una versión fragmentada de la transmisión en vivo e intenté usar MP4Box para crear un archivo .mpd, pero parece que MP4Box solo funciona con video de tiempo finito, o al menos no puedo. usarlo en vivo.

Y finalmente usé Dashcast y pude ver un marco de mi página de cliente, pero simplemente no funciona. El último comando que inserté es el siguiente:

DashCast -vf dshow -vfr 15 -v video="USB2.0 VGA UVC WebCam" /
-live -seg-dur 500 -frag-dur 100 -time-shift 10

En realidad jugué un poco con los parámetros, etc... pero el resultado sigue siendo el mismo, simplemente no puedo ver mi cara en el navegador. En este caso, el error es "¡Búfer en tiempo real lleno al 101 %! ¡Frame caído!" o "¡Búfer en tiempo real lleno al 80%! ¡Frame caído!".

Entonces, mi pregunta es ¿qué pasa con mis comandos FFmpeg?

¿Cómo puedo usar MP4Box para fines en vivo (con ejemplos porque no encuentro un solo ejemplo en toda la red)?

Y finalmente, ¿por qué DashCast es tan lento?

Obviamente, se aceptan todas las sugerencias sobre métodos alternativos para realizar una transmisión en vivo con alguna otra herramienta.

Lo siento, no te vi enlazar eso antes. Su línea Ffmpeg parece mucho más compleja que la del ejemplo dado allí, ¿por qué?
Y solo por curiosidad, ¿investigó si VLC puede hacer lo que necesita?
Hola @HansMeiser, gracias por los comentarios, de todos modos mi cadena se ve más compleja porque usé la variable ${VP9_DASH_PARAMS} en versión de texto sin formato -velocidad 6 -columnas de mosaico 4 -marco-paralelo 1 -hilos 8 -umbral estático 0 - max-intra-rate 300 -deadline realtime -lag-in-frames 0 -error-resilient 1 , que son los parámetros para la transmisión en vivo. En realidad son los parámetros para el codificador VP9, ​​pero usé VP8, porque VP9 me da algunos problemas. Finalmente no, no investigué sobre VLC, ahora echaré un vistazo a las cosas de VLC
Tengo un problema similar al tuyo y parece que Windows ffmpeg está roto. Los mismos comandos que me dan errores en Windows funcionan en Linux.

Respuestas (1)

Estoy en una posición similar a la tuya y sospecho que parte del problema es que mi CPU no puede transcodificar la transmisión lo suficientemente rápido, especialmente cuando se ejecuta un reproductor en la misma máquina.

Verifique el uso de su CPU, si está al máximo, esa es probablemente la razón por la cual se cae el marco.

Aparentemente, mp4box se puede usar para transmitir DASH en vivo (tiene una opción -dash-live), pero tampoco he logrado que esto funcione. Este enlace es bastante antiguo, pero parece tener un ejemplo de trabajo:

http://www.slideshare.net/cconcolato/live-streaming-of-video-and-subtitles-with-mpegdash