paint-brush
ヘッドレス モードでの Amazon IVS ライブ ストリームへのブロードキャストに FFMPEG を使用する@amazonivs
2,448 測定値
2,448 測定値

ヘッドレス モードでの Amazon IVS ライブ ストリームへのブロードキャストに FFMPEG を使用する

長すぎる; 読むには

ライブ ストリームにブロードキャストする場合、おそらく何らかのデスクトップ ストリーミング ソフトウェアを使用するでしょう。この投稿では、FFMPEG を使用してコマンド ライン経由でヘッドレス (IE: ユーザー インターフェイスなし) をブロードキャストする別のオプションについて説明します。以下のコマンドはすべて MacOS でテストされているため、別の OS を使用している場合は変更が必要になる場合があります。
featured image - ヘッドレス モードでの Amazon IVS ライブ ストリームへのブロードキャストに FFMPEG を使用する
Amazon Interactive Video Service (IVS)  HackerNoon profile picture
0-item

ライブ ストリームにブロードキャストするときは、OBS、Streamlabs、または以前にこのブログで説明したように、タスクに利用できるその他の優れたプログラムなど、ある種のデスクトップ ストリーミング ソフトウェアを使用することになるでしょう。ここで検討したもう 1 つのオプションは、Amazon Interactive Video Service (Amazon IVS) Web Broadcast SDK を使用してブラウザからブロードキャストすることです。ブロードキャストのこれら 2 つのオプションは、ほとんどのユース ケースをカバーしますが、私たちが利用できる唯一のオプションではありません。この投稿では、FFMPEG を使用してコマンド ライン経由でヘッドレス (IE: ユーザー インターフェイスなし) をブロードキャストする別のオプションについて説明します。


このトピックはAmazon IVS ユーザー ガイド で詳しく説明されていますが、もう少し深く掘り下げて、特定のユース ケースに対してソリューションを拡張する方法について説明したいと思います。ユーザー インターフェイスによって提供される視覚的なフィードバックがすぐに得られずに、何かをライブ ストリームしたい場合があります。たとえば、私たちのチャンネルで録画済みのビデオを放送する必要があるとしますか?または、 RTSPなどのプロトコルや、Amazon IVS が必要とする RTMP 形式ではない可能性があるその他の形式を利用するネットワーク上の IP カメラから再ストリーミングするのはどうですか?いくつかのユースケースがあるので、それらのいくつかを掘り下げてみましょう.

注:各ステートメントを細分化して各引数の機能について説明することを避けるため、以下の埋め込みスニペットにはコメントが付けられています。これはおそらくコピー/貼り付けの使用には適していないため、各スニペットには GitHub のコメントされていないバージョンのコマンドへのリンクがあります。

家で一緒に遊ぶには、 FFMPEG がインストールされていることを確認してください。以下のコマンドはすべて MacOS でテストされているため、別の OS を使用している場合は変更が必要になる場合があります。最後に、私は FFMPEG の専門家ではありませんが、バージョン5.1.2でのこの投稿の最初の発行日時点で、すべてのコマンドを完全にテストしたことを言及する必要があります。

もう 1 つ:コマンドをコピーして貼り付けたくなる気持ちはわかりますが、時間をかけてコメントを読み、FFMPEG ドキュメントを参照して、環境との互換性を確保してください。たとえば、以下のコマンドの多くはターゲット ビットレートに6000kを使用していますが、 BASICチャネル タイプを使用している場合、これはチャネルに対して機能しない可能性があります。

チャンネル情報の収集

取り込みエンドポイントストリーム キーが必要になるため、Amazon IVS コンソールを介してチャネルからそれらを収集します。

エンドポイントとストリーム キーの取り込み

私のデモ チャネルでは、これらの値を環境変数DEMO_STREAM_INGEST_ENDPOINTおよびDEMO_STREAM_KEYに設定しました。

オーディオおよびビデオ デバイスの一覧表示

次に、FFMPEG を使用してオーディオ デバイスとビデオ デバイスを一覧表示します。

 $ ffmpeg -list_devices true -f avfoundation -i dummy


Windows を使用している場合は、代わりに-f dshow使用する必要があります。

私のマシンでは、このコマンドは次の出力を生成しました。

 [AVFoundation indev @ 0x11d605c80] AVFoundation video devices: [AVFoundation indev @ 0x11d605c80] [0] OBS Virtual Camera [AVFoundation indev @ 0x11d605c80] [1] ManyCam Virtual Webcam [AVFoundation indev @ 0x11d605c80] [2] FaceTime HD Camera [AVFoundation indev @ 0x11d605c80] [3] Capture screen 0 [AVFoundation indev @ 0x11d605c80] AVFoundation audio devices: [AVFoundation indev @ 0x11d605c80] [0] ManyCam Virtual Microphone [AVFoundation indev @ 0x11d605c80] [1] BlackHole 2ch [AVFoundation indev @ 0x11d605c80] [2] External Microphone


以下のコマンドでは、デバイスをインデックスで参照します (例: "FaceTime HD Camera" の場合は2 )。

ウェブカメラとマイクのストリーミング

最も単純な使用例は、単純なカメラとマイクのストリームです。

 $ ffmpeg \ -f avfoundation \ # force the format -video_size 1920x1080 \ # video size -framerate 30 \ # FPS -i "2:2" \ # input device (video:audio) -c:v libx264 \ # codec - libx264 is an advanced encoding library for creating H. 264 (MPEG-4 AVC) video streams -b:v 6000K \ # target bitrate -maxrate 6000K \ # max bitrate -pix_fmt yuv420p \ # pixel format -s 1920x1080 \ # video size -profile:v main \ # the H.264 profile (https://trac.ffmpeg.org/wiki/Encode/H.264#Profile) -preset veryfast \ # encoder quality setting -g 120 \ # group of picture (GOP) size -x264opts "nal-hrd=cbr:no-scenecut" \ -acodec aac \ # audio codec -ab 160k \ # audio bitrate -ar 44100 \ # audio sample rate -f flv \ # output video format $DEMO_STREAM_INGEST_ENDPOINT/$DEMO_STREAM_KEY


コメント解除されたコマンド

上記のコマンドを使用すると、次のライブ ストリームが生成されます。

ウェブカメラとマイクビデオ オーバーレイとマイクを使用して画面共有をストリーミングする

もう 1 つの一般的な使用例は、特定の位置にオーバーレイされたビデオを使用して画面共有をストリーミングすることです。このコマンドは少しトリッキーですが、コメントで何が起こっているかを説明する必要があります。

 $ ffmpeg \ -f avfoundation \ # force format for input 0 -framerate 30 \ # input 0 framerate -video_size 1920x1080 \ # input 0 size -i "3:" \ # first (index 0) input (screenshare) -f avfoundation \ # force format for input 1 -framerate 30 \ # input 1 framerate -video_size 640x480 \ # input 1 size -i "2:" \ # second (index 1) input (camera) -f avfoundation \ # force format for input 2 -i ":2" \ # third (index 2) input (mic) -filter_complex "[0:v][1:v] overlay=main_w-overlay_w-5:main_h-overlay_h-5" \ # overlay video on screenshare in the bottom right -map 0:v:0 \ # use the video from input 0 -map 1:v:0 \ # use the video from input 1 -map 2:a:0 \ # use the video from input 2 -c:v libx264 \ # codec - libx264 is an advanced encoding library for creating H. 264 (MPEG-4 AVC) video streams -b:v 6000K \ # target bitrate -maxrate 6000K \ # max bitrate -pix_fmt yuv420p \ # pixel format -s 1920x1080 \ # video size -profile:v main \ # the H.264 profile (https://trac.ffmpeg.org/wiki/Encode/H.264#Profile) -preset veryfast \ # encoder quality setting -g 120 \ # group of picture (GOP) size -x264opts "nal-hrd=cbr:no-scenecut" \ -acodec aac \ # audio codec -ab 160k \ # audio bitrate -ar 44100 \ # audio sample rate -f flv \ # output video format $DEMO_STREAM_INGEST_ENDPOINT/$DEMO_STREAM_KEY


コメント解除されたコマンド

このコマンドは、次のような出力を生成します。

ビデオで画面共有録画済みビデオのストリーミング

事前に記録されたアセットの場合、カメラ入力をローカル ファイル システム上の既存のビデオ ファイルへのパスに置き換えることができます。

 $ ffmpeg \ -re \ -i /path/to/video.mp4 \ #input video -c:v libx264 \ # codec - libx264 is an advanced encoding library for creating H. 264 (MPEG-4 AVC) video streams -b:v 6000K \ # target (average) bitrate for the encoder -maxrate 6000K \ # max bitrate -pix_fmt yuv420p \ # pixel format -s 1920x1080 \ # size -profile:v main \ # the H.264 profile (https://trac.ffmpeg.org/wiki/Encode/H.264#Profile) -preset veryfast \ # encoder quality setting -force_key_frames "expr:gte(t,n_forced*2)" \ # keyframe interval -x264opts "nal-hrd=cbr:no-scenecut" \ -acodec aac \ # audio codec -ab 160k \ # audio bitrate -ar 44100 \ # audio sample rate -f flv \ # output video format $DEMO_STREAM_INGEST_ENDPOINT/$DEMO_STREAM_KEY

コメント解除されたコマンド

ここでの出力はウェブカメラ出力に似ていますが、オーディオが埋め込まれた事前に記録されたビデオ コンテンツが含まれています。

録画済みビデオ個別のオーディオ トラックを使用して事前に録画されたビデオをストリーミングする

事前に録画されたビデオにオーディオが含まれていない場合がありますが、別のオーディオ トラックを含めたい場合があります。これは、アニメーション ビデオと別のオーディオ トラックを使用する「lofi ラジオ」ストリームのようなエクスペリエンスを作成するのに役立ちます。このストリームはビデオとオーディオを無限にループすることに注意してください。そのため、ライブ ストリームの再生時間は連続 48 時間に制限されていることに注意してください。

 $ ffmpeg \ -re \ -stream_loop -1 \ # loop video infinitely -i /path/to/video.mp4 \ # input (video) -stream_loop -1 \ # loop audio infinitely -i /path/to/audio.mp3 \ # input (audio) -map 0:v:0 \ # map the first video stream from the first video file -map 1:a:0 \ # map the first audio stream from the second file -c:v libx264 \ # codec - libx264 is an advanced encoding library for creating H. 264 (MPEG-4 AVC) video streams -b:v 6000K \ # target (average) bitrate for the encoder -maxrate 6000K \ # max bitrate -pix_fmt yuv420p \ # pixel format -s 1920x1080 \ # size -profile:v main \ # the H.264 profile (https://trac.ffmpeg.org/wiki/Encode/H.264#Profile) -preset veryfast \ # encoder quality setting -force_key_frames "expr:gte(t,n_forced*2)" \ # keyframe interval -x264opts "nal-hrd=cbr:no-scenecut" \ -acodec aac \ # audio codec -ab 160k \ # audio bitrate -ar 44100 \ # audio sample rate -f flv \ # output video format $DEMO_STREAM_INGEST_ENDPOINT/$DEMO_STREAM_KEY


コメント解除されたコマンド

IP カメラの再ストリーミング

カバーする最後の例は、再ストリームの使用例です。 RTMP 出力を生成しない入力ソースを使用すると便利です。特定の IP カメラやその他のデバイスは RTSP で出力を生成します。FFMPEG を使用すると、これらのデバイスからの入力を Amazon IVS ライブ ストリームにリダイレクトできます。

 $ ffmpeg \ -rtsp_transport \ tcp \ -i rtsp://user:[email protected]:554 \ # IP camera URI -preset ultrafast \ # encoder quality setting -vcodec libx264 \ # codec -ar 44100 \ # audio bitrate -f flv \ # output video format $DEMO_STREAM_INGEST_ENDPOINT/$DEMO_STREAM_KEY


コメント解除されたコマンド

このコマンドは、次のような出力を生成します。

Amazon IVS にストリーミングされた IP カメラまとめ

この投稿では、FFMPEG を使用してヘッドレスで Amazon IVS ライブ ストリームにストリーミングする方法について説明しました。この投稿でカバーされていないユースケースがある場合は、 Twitterで私に連絡してください。