¿Transmitir video con ffmpeg a icecast?

¿Transmitir video con ffmpeg a icecast?

¿Existe una forma sencilla de transmitir vídeo con ffmpeg a icesast? El vídeo fuente está en video/x-matroskaformato. Las transmisiones en sí están en varios formatos (mpeg, vorbis, aac, etc.). Quiero que ffmpeg adivine la fuente por sí solo y luego la transcodifique en cualquier cosa que los navegadores puedan reproducir "sobre la marcha", manteniendo la resolución de la fuente y la relación de aspecto. video/webmservirá. Intenté hacer esto (incluido jugar con formatos de salida):

ffmpeg -i source.mkv -vcodec libvpx -cpu-used -5 -deadline realtime -content_type video/webm\
    icecast://source:hackme@localhost:8000/vstream.webm

Pero la transmisión no se puede reproducir y las conexiones hacen que ffmpeg finalice con el siguiente error:

av_interleaved_write_frame(): Connection reset by peer
Error writing trailer of icecast://source:hackme@localhost:8000/vstream.webm: Connection reset by peer

Involucrar cualquier cosa además de ffmpeg está bien, solo quiero que funcione.

Respuesta1

Resulta que es difícil de lograr o no es posible en absoluto. Sin embargo, es posible lograr algo similar con la combinación de nginx(con rtmpmódulo) y ffmpeg. En nginxla configuración (probablemente ubicada en /etc/nginx/nginx.conf), se debe agregar la siguiente sección para que funcione como rtmpservidor (Con pleno acceso público. Tenga cuidado, la transmisión no está cifrada y cualquiera que pueda acceder a su red puede verla.):

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            record off;
            allow play all;
        }
    }
}

Entonces transmitir un archivo de vídeo es tan fácil como invocarlo ffmpegasí:

ffmpeg -re -i video_file.mkv -c:v libx264 -f flv rtmp://host:1935/live

Finalmente, cualquiera que quiera ver la transmisión debe conectarse a la misma dirección con el reproductor de su elección:

rtmp://host:1935/live

Nota: hostaquí está el nombre de host del servidor donde nginxse inicia.

Respuesta2

Respuesta corta: no puedes, porque Icecast es un sistema de transmisión de audio, no un servidor de transmisión de video.

Respuesta3

Con obs funciona bien, aunque no lo he probado con ffmpeg. Y obs tiene la ventaja de que los controles del jugador pueden buscar hacia adelante y hacia atrás. Seguí esta guía y es muy fácil:

https://www.braillealphabetsoup.com/icecast-video-streaming-with-obs.html

información relacionada