私はしばらくの間、YouTube ライブストリームを実行しており、ブラウザを介してストリームをリモートで実行できるソリューションを開発しています。私の計画は、バックグラウンド サービスを実行する ASP.net コア Web API プロジェクトを用意し、ストリーミング情報を送信すると、FFMpeg が起動して USB Web カメラをストリーミングすることです。また、ボタンを押してストリームを「ミュート」し、テキスト オーバーレイ (「技術的な問題」など) 付きの空のビデオを表示できるようにする必要があります。
これまでの私の解決策は、FFMpeg のインスタンスを 2 つ使用することです。モードを切り替えるときは、1 つのプロセスを終了し、もう 1 つを開始します。ある程度は機能するようになりましたが、「ミュート モード」と「ストリーミング モード」を切り替えると、YouTube はストリームの変更で停止するようです。ミュート モードからストリーミング モードに戻ったときに、YouTube がミュート モードが終了したことを認識しないためだと思います。また、ミュート モードではテキストが希望どおりに表示されますが、YouTube プレーヤーが「ライブ」でなくなるため、通常のストリームを再開する場合、ユーザーは最新の状態にするために「ライブ」ボタンをクリックする必要があります。
両方のモードのコマンド ラインは次のとおりです。
ストリームモード:
ffmpeg.exe -f dshow -i video="<webcam name>" -f dshow -i audio="<microphone name>" -vcodec libx264 -pix_fmt yuv420p -preset veryfast -r 30 -g 60 -b:v 3500k -f flv rtmp://a.rtmp.youtube.com/live2/<stream key>
ミュート モード (blank.mp4 は 3 秒間の空白ビデオです):
ffmpeg.exe -stream_loop -1 -i ./FFMpeg/blankvid.mp4 -vf "drawtext=fontfile=C\\:/Windows/Fonts/Arial.ttf:text='Technical Difficulties':fontcolor=white:fontsize=60:box=1:[email protected]:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2" -vcodec libx264 -pix_fmt yuv420p -preset veryfast -r 30 -g 60 -b:v 3500k -f flv -flvflags no_duration_filesize rtmp://a.rtmp.youtube.com/live2/<stream key>
最後に注意: blankvid.mp4 を使用するのではなく、カラー フィルターを使用して黒いビデオを作成する方法があるかもしれないことは知っています。そのためのパラメーターを取得する方法も知っていれば、非常に役立ちます。
答え1
それで、さらに検索と試行錯誤を重ねた結果、今はうまく機能しているようです。すべてのパラメータが必要かどうかはわかりませんが、問題は「ミュート」コマンドにありました。また、空のビデオの代わりにカラーフィルターを使用する方法もわかりました。最終的に、次のように変更しました。
ffmpeg -re -stream_loop -1 -f lavfi -i "color=black:s=1280x720" -f lavfi -i anullsrc -vcodec libx264 -pix_fmt yuv420p -preset veryfast -r 30 -g 60 -b:v 3500k -vf "drawtext=fontfile=C\\:/Windows/Fonts/Arial.ttf:text='Technical Difficulties':fontcolor=white:fontsize=60:x=(w-text_w)/2:y=(h-text_h)/2" -f flv rtmp://a.rtmp.youtube.com/live2/<stream key>