Transmitir vídeo com ffmpeg para icecast?

Transmitir vídeo com ffmpeg para icecast?

Existe uma maneira simples de transmitir vídeo com ffmpeg para o iceast? O vídeo de origem está no video/x-matroskaformato. Os próprios fluxos estão em vários formatos (mpeg, vorbis, aac, etc.). Quero que o ffmpeg adivinhe a fonte por conta própria e depois transcodifique-a em qualquer coisa que possa ser reproduzida pelos navegadores "on the fly", mantendo a resolução e a proporção da fonte. video/webmvai fazer. Eu tentei fazer isso (incluindo brincar com formatos de saída):

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

Mas o stream não pode ser reproduzido e as conexões fazem com que o ffmpeg seja encerrado com o seguinte erro:

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

Envolver qualquer coisa além do ffmpeg é bom, só quero que funcione.

Responder1

Acontece que é difícil de conseguir ou nem é possível. No entanto, é possível conseguir algo semelhante com a combinação de nginx(com rtmpmódulo) e ffmpeg. Na nginxconfiguração (provavelmente localizado em /etc/nginx/nginx.conf) a seção a seguir deve ser anexada para fazê-lo funcionar como rtmpservidor (Com total acesso público. Tenha cuidado, a transmissão não é criptografada e qualquer pessoa capaz de acessar sua rede pode assisti-la):

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

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

Então, o streaming do arquivo de vídeo é tão fácil quanto invocar ffmpegassim:

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

Por fim, quem quiser assistir à transmissão deve se conectar ao mesmo endereço do player de sua preferência:

rtmp://host:1935/live

Nota: hostaqui está o nome do host do servidor onde nginxé lançado.

Responder2

resposta curta, você não pode, porque o icecast é um sistema de streaming de áudio, não um servidor de streaming de vídeo.

Responder3

Com obs funciona muito bem, mas ainda não tentei com o ffmpeg. E obs tem a vantagem de você fazer com que os controles do jogador busquem para frente e para trás. Eu segui este guia e é muito fácil:

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

informação relacionada