reconnect_delay_max example bufsize ffmpeg streaming

example - reconnect_delay_max ffmpeg



¿Cómo podemos transcodificar el flujo rtmp en vivo al flujo hls en vivo usando ffmpeg? (3)

Como actualización de esta pregunta, he logrado completar la transcodificación en vivo de RTMP a HLS sin el uso de ffmpeg, ¿cómo?

Bueno, simplemente utilizando exactamente el mismo archivo de configuración nginx compartido por el usuario 3069376 y teniendo mucho cuidado con las rutas que está generando el manifiesto .m3uh, la opción hls dentro del módulo RTMP debería encargarse de ello.

En cuanto al reproductor de video, el Video.Js funcionó a la perfección.

Estoy tratando de convertir un flujo rtmp en vivo a un flujo hls en tiempo real.

Tengo una idea después de leer

http://sonnati.wordpress.com/2011/08/30/ffmpeg-%E2%80%93-the-swiss-army-knife-of-internet-streaming-%E2%80%93-part-iv/

soy capaz de convertir el flujo rtmp en vivo a hls pero no en tiempo de ejecución. cuando ejecuto el comando y pruebo cualquier archivo hsl (.m3u8 y .ts) no puedo verlo, pero cuando interrumpo el comando y verifico, obtengo los archivos hls según sea necesario.

Busqué en Google una solución pero no pude obtener la respuesta adecuada.

¿Alguien puede ayudarme?

Gracias por adelantado...


Esta es una breve guía para la transmisión de HLS con cualquier archivo de entrada o secuencia:

Estoy siguiendo el enfoque del usuario 1390208, por lo que uso FFMPEG solo para producir la secuencia rtmp que mi servidor recibe para proporcionar HLS. En lugar de Unreal / Wowza / Adobe, uso el servidor gratuito nginx con el módulo rtmp, que es bastante fácil de configurar. Así es como lo hago en pocas palabras: Any input file or stream -> ffmpeg -> rtmp -> nginx server -> HLS -> Client o más detallado:

entrada de archivo de video o flujo (http, rtmp, lo que sea) -> ffmpeg transcodifica en vivo a x.264 + aac, genera salidas a rtmp -> nginx toma el rtmp y entrega un HLS al usuario (cliente). Así que en el lado del cliente puede usar VLC o lo que sea y conectarse al archivo .m3u8 que proporciona nginx.

  • Seguí this guía de configuración para nginx.
  • This es mi archivo de configuración nginx.
  • Así es como uso ffmpeg para transcodificar mi archivo de entrada a rtmp:

    ffmpeg -re -i mydirectory/myfile.mkv -c:v libx264 -b:v 5M -pix_fmt yuv420p -c:a:0 libfdk_aac -b:a:0 480k -f flv rtmp://localhost:12345/hls/mystream;

    (.mkv es 1080p con sonido 5.1, dependiendo de su entrada, ¡debería usar tasas de bits más bajas!)

¿De dónde sacas la secuencia rtmp?

  • ¿Un archivo? Entonces puedes usar exactamente mi enfoque.
  • Cualquier servidor X con un flujo Y? Luego tienes que cambiar el comando ffmpeg a:

    ffmpeg -re -i rtmp://theServerX/yourStreamY -c:v libx264 -b:v 5M -pix_fmt yuv420p -c:a:0 libfdk_aac -b:a:0 480k -f flv rtmp://localhost:12345/hls/mystream;

    o si su flujo rtmp ya está codificado en h.264 / aac, podría intentar usar la opción de copy en ffmpeg para transmitir el contenido directamente a nginx.

Como se ve en mi archivo de configuración nginx:

  • Mi servidor rtmp tiene una "aplicación" llamada "hls". Esa es la parte que describe donde nginx escucha la transmisión rtmp de ffmpeg y por eso ffmpeg transmite a rtmp://localhost:12345/hls/mystream;
  • Mi servidor http tiene la location /hls . Esto significa que en VLC puedo conectarme a http://myServer:80/hls/mystream.m3u8 para acceder a la transmisión HLS.

¿Está todo claro? ¡Feliz transmisión!


Pruebe esta configuración de línea de comandos de RTMP a HLS:

ffmpeg -v verbose -i rtmp://<host>:<port>/<stream> -c:v libx264 -c:a aac -ac 1 -strict -2 -crf 18 -profile:v baseline -maxrate 400k -bufsize 1835k -pix_fmt yuv420p -flags -global_header -hls_time 10 -hls_list_size 6 -hls_wrap 10 -start_number 1 <pathToFolderYouWantTo>/<streamName>.m3u8

Puede haber algún retraso en la alimentación HLS. Sin embargo, funcionará.