Транслировать видео с ffmpeg на icecast?

Транслировать видео с ffmpeg на icecast?

Есть ли простой способ транслировать видео с ffmpeg в icesast? Исходное видео в video/x-matroskaформате. Сами потоки в разных форматах (mpeg, vorbis, aac и т. д.). Я хочу, чтобы ffmpeg сам определял источник, а затем транскодировал его во что угодно, воспроизводимое браузерами «на лету», сохраняя исходное разрешение и соотношение сторон. video/webmподойдет. Я пробовал сделать это (включая игру с выходными форматами):

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

Но поток не воспроизводится, а соединения приводят к завершению работы ffmpeg со следующей ошибкой:

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

Использование чего-либо помимо ffmpeg допустимо, я просто хочу, чтобы это работало.

решение1

Оказывается, это либо труднодостижимо, либо вообще невозможно. Тем не менее, можно добиться чего-то похожего с помощью комбинации nginxrtmpмодулем) и ffmpeg. В nginxконфигурации (вероятно, расположенной в /etc/nginx/nginx.conf) необходимо добавить следующий раздел, чтобы он работал как rtmpсервер (С полным публичным доступом. Будьте осторожны, поток не зашифрован и любой, кто может получить доступ к вашей сети, может его смотреть):

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

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

Тогда потоковая передача видеофайла так же проста, как вызов ffmpegследующего вида:

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

Наконец, любой желающий посмотреть трансляцию должен подключиться к тому же адресу с помощью своего плеера:

rtmp://host:1935/live

Примечание: hostздесь указано имя хоста сервера, на котором nginxзапущен.

решение2

Короткий ответ: вы не можете этого сделать, потому что Icecast — это система потоковой передачи аудио, а не сервер потокового видео.

решение3

С obs все работает отлично, хотя с ffmpeg не пробовал. И у obs есть преимущество в том, что вы получаете элементы управления проигрывателя для поиска вперед и назад. Я следовал этому руководству, и это очень просто:

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

Связанный контент