Azure Media Services の RTMP サポートとライブ エンコーダー
このポストは、9 月 18 日に投稿された Azure Media Services RTMP Support and Live Encoders の翻訳です。
先日、ライブ ストリーミングのパブリック プレビューの提供が開始されました。ライブ ストリーミングでサポートされている取り込みプロトコルの 1 つが RTMP です。RTMP は、ライブ ストリーミングなどのリッチ メディアの取り込みおよび配信に一般的に使用されるプロトコルです。Azure Media Services では RTMP を使用したライブ フィードの取り込みがサポートされています。また、ライブ ストリームの動的な再多重化には Dynamic Packaging を使用し、MPEG-DASH、Microsoft Smooth Streaming、Apple HLS、Adobe HDS の各形式で配信することができます。このため、入力には広く普及している RTMP プロトコルを使用し、出力には複数のプロトコルを使用することで複数のデバイスやエンドポイントに対応することができます。同時に、従来のプレーヤーや形式との互換性を維持することができます。Azure Media アカウントにライブ チャネルおよびストリーミング エンドポイントをセットアップする方法の詳細については、Jason Suess によるブログ記事「Azure 管理ポータルを使用したライブ ストリーミングの開始」をご覧ください。
今回の記事では、Azure Media Services で有効になった RTMP の取り込み機能と、Wirecast、Flash Media Live Encoder (FMLE)、FFmpeg エンコーダーを使用してマルチビットレートのライブ フィードを Azure Media Services チャネルに供給する方法についてご説明します。
アーキテクチャと一般情報
大まかに見ると、ライブ ストリーミング アーキテクチャはチャネル/プログラム、ストレージ、ストリーミング エンドポイントという 3 つの主要なコンポーネントから構成されています。
- チャネル / プログラム - チャネルはライブ ストリーミングを可能にします。チャネルには、ライブ エンコーダーの取り込みポイントが含まれています。現時点では、取り込みプロトコルとして RTMP と Fragmented MP4 (Smooth Streaming) がサポートされています。プログラムとは、チャネル内の論理コンポーネントのことです。プログラムによって、ストリーミング用の受信データの公開や、オンデマンド変換およびライブ プレゼンテーション ウィンドウ (DVR) 用のコンテンツのアーカイブが行われます。
- ストリーミングエンドポイントとストリーミングユニット - ストリーミング エンドポイントで提供される URL からライブ アセットや VOD アセットを取得することができます。また、Dynamic Packaging 機能を提供したり、ストリームの配信のセキュリティを確保したりもします。
- ストレージ - プログラムでは、ライブ アーカイブの格納に Azure Storage を使用します。また、オンデマンド ストリーミングやエンコーディング サービスでも Azure Storage を使用します。
チャネルの RTMP サポート
Azure Media Services のチャネルでは、RTMP プッシュ モデルがサポートされています。シングル ビットレート入力およびマルチビットレート入力の両方がサポートされていますが、アダプティブ ビットレート ストリーミングのメリットを活用するために、マルチビットレート入力を使用することを強くお勧めします。将来的には、シングル ビットレート入力をマルチビットレート出力に変換するライブ トランスコーダー サービスを Azure Media Services で提供する予定です。RTMP 取り込みを使用するための要件は次のとおりです。
- RTMP 出力をサポートするエンコーダー
- H.264 ビデオと AAC オーディオ コーデック出力
- 異なるビデオ品質間でのキー フレームまたは GOP (画像グループ) の一致
- 2 秒間のキー フレーム間隔 (最大 6 秒を指定できますが、特別な設定が必要です。下記の「高度な設定」のセクションをご覧ください)
- 各品質に対する一意のストリーム名
- ネットワーク接続 (ビデオ + オーディオの合計ビットレートに対応する帯域幅)
- 厳格な CBR エンコーディング (最適なアダプティブ ビットレート パフォーマンスを実現するために推奨されます)
この記事では、出力および Azure Media Services チャネルへの取り込みに 3 種類のビデオ品質を使用します。複数のビデオ品質を使用することができますが、オリジナルの品質はマシンのエンコーディング機能とチャネル取り込みへのネットワーク接続によって制限されることに留意してください。帯域幅を超える場合や、ネットワーク接続不良の場合には、品質の数値やエンコーディング設定を調整して、解像度やビットレートを下げる必要があります。複数のビデオ品質を使用する場合には、すべての品質の合計ビットレートに注意する必要があります。
注: エンコーダー設定を変更した場合や、チャネルからエンコーダーを切断してから再接続した場合は、毎回チャネルをリセットする必要があります。
Wirecast の設定
Wirecast は広く使用されている RTMP エンコーダーです。Wirecast では、ブロードキャスト用のライブ ストリームのキャプチャ、ライブ環境への移行、エンコーディングを実行することができます。詳細情報と試用版のダウンロードについては、Telestream の Web サイト (英語) をご覧ください。現時点では、Azure Media Services で Wirecast バージョン 5 がサポートおよびテストされています。
入力の設定
- [+] にカーソルを合わせます。
- 提示されるソースのオプションを選択します。Wirecast には複数のオプションが含まれます。この記事では、搭載されたビデオ カメラを使用することにします。
- 新しい小さなウィンドウにカメラのキャプチャが表示されます。クリックすると、カメラのキャプチャが [Preview] ウィンドウに表示されます。
出力の設定
- メイン メニューから、[Output]、[Output Settings] の順に選択します。
- [Select an Output Destination] ダイアログ ボックスで [RTMP Server] を選択します。
[Output Settings] ダイアログ ボックスが表示されます。
- 最初の出力 (品質) に名前を付けます (例: Azure Media Services Quality1)。
- [Address] フィールドにチャネルの取り込み URL を入力します。チャネル取り込み URL を取得する方法の詳細については、「Azure 管理ポータルを使用したライブ ストリーミングの開始」をご覧ください。
- 一意のストリーム名を入力します (例: myStream1)。複数の品質を使用する場合は、各品質に一意のストリーム名を付ける必要があります。
- 最初の品質用に新しいエンコーディング プリセットを作成します。
- [Output Settings] ダイアログ ボックスで [New Preset] を選択します。
- [Enter New Preset Name] テキスト ボックスに新しいプリセットの名前を入力します (例: MyQuality1)。
- プリセットに適切な値を指定します。
独自のエンコーディング プリセットを作成する場合は、[Frames per second] と [Key frame every] に各品質と同じ値を設定する必要があります。各品質には同じオーディオ エンコーディング設定を使用し、それぞれの設定で [Keyframe Aligned] チェック ボックスをオンにする必要があります。このように設定しない場合、ストリームが機能しなかったり、チャネルに取り込まれなかったりします。適切なアダプティブ ビットレート ストリーミングを実行するために、これらは品質間で同じ設定にする必要があります。
- 最初の出力の設定が完了すると、出力設定は次のようになります。
- 他の品質レベルを追加するには、[Add] をクリックして上記の手順を繰り返します。先ほども述べたとおり、[Frames per second] と [Key frame every] には同じ値を設定する必要があることに注意してください。また、[Keyframe Aligned] チェック ボックスをオンにして、ストリームに一意の名前を付けてください。
- 3 種類の出力の設定がすべて完了すると、出力設定は次のようになります。
エンコーディングとチャネル取り込みへのデータのプッシュの開始
- 矢印をクリックして、エンコーディングを開始します。
- ライブ エンコード データのプッシュを開始するには、[Stream] をクリックします。ストリーミングが開始されると、インジケーターが赤く点灯します。
ストリームのプレビュー
Azure 管理ポータルを使用して、ストリームをプレビューすることができます。また、Azure ポータルではストリームを公開することもできます。公開およびプレビューする方法の詳細については、「Azure 管理ポータルを使用したライブ ストリーミングの開始」をご覧ください。
別の方法として、https://amsplayer.azurewebsites.net/ (英語) を使用して複数のプレーヤー オプションの設定やプレビューを行うこともできます。
Flash Media Live Encoder (FMLE) の設定
Flash Media Live Encoder (FMLE) は Adobe が提供する無償ソフトウェアです。詳細情報とエンコーダーのダウンロードについては、https://www.adobe.com/jp/products/flash-media-encoder.html をご覧ください。既定では、FMLE では MP3 オーディオ出力がサポートされています。現時点では、Azure Media Services ではライブ トランスコーディング サービスが提供されていないため、ソース ストリームから MPEG-DASH、Smooth Streaming、HLS などの複数の形式への動的パッケージングには AAC オーディオ コーデックを使用する必要があります。Azure Media Services で FMLE を使用するには、AAC プラグインが必要です。この記事では、Main Concept が提供するプラグインを使用します。詳細情報と試用版のダウンロードについては、https://www.mainconcept.com/jp/products/plug-ins/plug-ins-for-adobe/aac-encoder-fmle.html (英語) をご覧ください。
FMLE の設定
- 最初に、FMLE で RTMP タイムスタンプに NTP タイム ソース (絶対時間) を使用するように設定する必要があります。そのためには、以下の手順を実行します。
- エンコーダーを閉じます。
- テキスト エディターで FMLE config.xml ファイルを開きます。Windows の既定のインストール場所は C:\Program Files\Adobe\Flash Media Live Encoder 3.2\ です (x64 の場合は、C:\Program Files (x86)\Adobe\Flash Media Live Encoder 3.2\)。
Mac OS の既定のインストール場所は Macintosh HD:Applications:Adobe:Flash Media Live Encoder 3.2 です。- streamsynchronization/enable を true に設定します。
<streamsynchronization>
< !– 「true」にすると機能が有効になり、「false」にすると無効になります。–>
<enable>true</enable>- ファイルを保存して、再度エンコーダーを起動します。
- デバイス リストからソース デバイスを選択します。この記事では、[Integrated Camera] を使用することにします。
- プリセット メニューからエンコーディング プリセットを選択するか、独自のプリセットを作成します。独自のプリセットを作成する場合は、「チャネルの RTMP サポート」のセクションの要件を確認してください。ここでは、3 種類の品質が作成される [Multi Bitrate – 3 streams (1500) Kbps – H.264] を使用します。
- アイコンをクリックして H.264 の詳細設定を構成し、[Keyframe Frequency] を 2 秒間に設定します。注: この操作により、プリセット名が [Custom] に変わります。
- フレーム レートを 30 fps に設定します。
- オーディオ デバイスを選択します。
- オーディオ出力形式を AAC に設定します。注: 既定では、AAC と HE-AAC を選択することはできません。既定では、FMLE では MP3 オーディオのみがサポートされています。AAC コーデックを有効にするには、プラグインが必要です。
- 適切なオーディオの帯域幅を設定します。この記事では、96 Kbps、サンプリング レート 44100 Hz を使用することにします。
- [Stream to Flash Media Server] を選択します。
- [FMS URL] にチャネル取り込み URL を入力します (例: rtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940)。チャネル取り込み URL を取得する方法の詳細については、「Azure 管理ポータルを使用したライブ ストリーミングの開始」をご覧ください。
- ストリーム名に「stream%i」と入力します。この設定により、各品質に一意のストリーム名が付けられます。
初期の設定は次のようになります。
エンコーディングとチャネル取り込みへのデータのプッシュの開始
- [Connect] をクリックします。これにより、エンコーダーがチャネル取り込み URL に接続されます。
- [Start] をクリックして、エンコーディングを開始します。
注: FMLE はコマンドライン モードで使用することもできます。詳細については、「Flash Media Live Encoder をコマンドライン モードで開始する (英語)」をご覧ください。
ストリームのプレビュー
Azure 管理ポータルを使用して、ストリームをプレビューすることができます。また、Azure ポータルではストリームを公開することもできます。公開およびプレビューする方法の詳細については、「Azure 管理ポータルを使用したライブ ストリーミングの開始」をご覧ください。
別の方法として、https://amsplayer.azurewebsites.net/ (英語) を使用して複数のプレーヤー オプションの設定やプレビューを行うこともできます。
Azure Media Services チャネル取り込みへの FFmpeg の使用
FFmpeg は広く使用されているオープン ソース ソフトウェアで、さまざまなメディア形式のエンコードや作成を行うことができます。RTMP はサポートされているプロトコルの 1 つです。詳細情報と FFmpeg のダウンロードについては、公式 Web サイト (英語) をご覧ください。
この記事では、FFmpeg コマンドやその用途などの詳細については触れず、ローカル ファイルをストリーミングしてライブ ストリームのシミュレーションを行うサンプル コマンドを提示します。FFmpeg を使用することで、ローカルのカメラ、デスクトップ キャプチャ、その他のデバイスなど、複数のソース/デバイスからデータをキャプチャすることができます。詳細については、公式 Web サイト (英語) をご覧ください。
サンプル コマンド
今回は、Windows ビルドの FFmpeg を使用しますが、ご利用のプラットフォームに合った FFmpeg のバージョンを使用してください。
シングル ビットレート:
C:\tools\ffmpeg\bin\ffmpeg.exe -v verbose -i MysampleVideo.mp4 -strict -2 -c:a aac -b:a 128k -ar 44100 -r 30 -g 60 -keyint_min 60 -b:v 400000 -c:v libx264 -preset medium -bufsize 400k -maxrate 400k -f flv rtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940/mystream1
マルチビットレート (500 、 300 、 150 Kbps の 3 種類のビットレート ):
C:\tools\ffmpeg\bin\ffmpeg.exe -threads 15 -re -i MysampleVideo.mp4 -strict experimental -acodec aac -ab 128k -ac 2 -ar 44100 -vcodec libx264 -s svga -b:v 500k -minrate 500k -maxrate 500k -bufsize 500k -r 30 -g 60 -keyint_min 60 -sc_threshold 0 -f flv rtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940/Streams_500 -strict experimental -acodec aac -ab 128k -ac 2 -ar 44100 -vcodec libx264 -s vga -b:v 300k -minrate 300k -maxrate 300k -bufsize 300k -r 30 -g 60 -keyint_min 60 -sc_threshold 0 -f flv rtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940/Streams_300 -strict experimental -acodec aac -ab 128k -ac 2 -ar 44100 -vcodec libx264 -s qvga -b:v 150k -minrate 150k -maxrate 150k -bufsize 150k -r 30 -g 60 -keyint_min 60 -sc_threshold 0 -f flv rtmp://channel001-streamingtest.channel.media.windows.net:1935/live/a9bcd589da4b424099364f7ad5bd4940/Streams_150
マルチビットレート コマンドでは、キー フレーム間隔が 2 秒間に設定された 3 種類の品質 (500、300、150 Kbps) のビデオが作成され、出力が Azure Media Services のチャネル取り込みに送信されます。チャネル取り込み URL を取得する方法の詳細については、「Azure 管理ポータルを使用したライブ ストリーミングの開始」をご覧ください。
ストリームのプレビュー
Azure 管理ポータルを使用して、ストリームをプレビューすることができます。また、Azure ポータルではストリームを公開することもできます。チャネルとプログラムを公開およびプレビューする方法の詳細については、「Azure 管理ポータルを使用したライブ ストリーミングの開始」をご覧ください。
別の方法として、https://amsplayer.azurewebsites.net/ (英語) を使用して複数のプレーヤー オプションの設定やプレビューを行うこともできます。
高度な設定
既定では、Azure Media Services チャネルは 2 秒間のキー フレーム間隔のデータまたは GOP (KeyFrameInterval) を取り込むように設定されています。また、Dynamic Packaging では HLS 出力に 3:1 のマッピング設定を使用します。つまり、2 秒間のキー フレーム間隔が設定されたデータを取り込んだ場合、HLS 出力セグメントは 6 秒 (3 × 2 秒) になります。
2 秒間のキー フレーム間隔以外のデータを取り込む場合は、この値を調整する必要があります。この値を調整してチャネルを作成するには、SDK を使用する必要があります。これらの高度な設定はポータルを使用して変更することはできません。SDK を使用してチャネルを作成する方法の詳細については、「Media Services SDK for .NET を使用してライブ ストリーミング アプリケーションを作成する (英語)」を参照してください。
これらのパラメーターを設定するには、以下のページを参照してください。
まとめと次のステップ
今回の記事をご覧になって、RTMP ライブ エンコーダーを Azure Media Services と連携させ、基本的なストリーミングを設定するのがいかに簡単であるかをご理解いただけたら幸いです。Azure Media Services のライブ ストリーミングをはじめとする多数の機能でさまざまなことを実現できます。ライブ ストリーミングと SDK サポートの詳細については、「Azure Media Services のライブ ストリーミングの使用 (英語)」でもご確認いただけます。また、Azure Media Services に関する全般的な情報については、Azure Media Services 公式サイトをご覧ください。
RTMP 取り込みサポートが追加された新しいライブ ストリーミング サービスをお試しいただき、ご意見がございましたらぜひお知らせください。
ライブ ストリーミングが皆様のお役に立つことを願っています。