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モジュール付き)と の組み合わせで同様のことを実現することは可能ですffmpegnginx設定(おそらく にあります)に次のセクションを追加して、サーバー/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

関連情報