はじめに

前回の記事では FFmpeg で生成したマルチビットレートの RTMP ライブストリーム (マルチストリーム) をアップロードして、 Wowza Streaming Engine 経由でストリーミング配信を行うための設定を紹介しました。

この記事では、RTMP のシングルビットレートのライブソースを Wowza Streaming Engine に入力し、 Wowza Streaming Engine のトランスコーディング機能を使ってマルチビットレートのライブストリームを生成して、 アダプティブストリーミングのライブストリーミング配信を行うための方法を紹介します。

ライブソースのオリジンからマルチビットレートのストリームを Wowza Streaming Engine へ入力する際に十分なネットワーク帯域が確保できない場合、 一番画質のよいライブソースのみを Wowza Streaming Engine へ入力し、Wowza Streaming Engine でマルチビットレートの生成を行って、 アダプティブストリーミングのライブストリーミング配信を実現することができます。

作業の手順は、以下の通りです。

  1. ライブソースストリームの入力セキュリティの設定 (省略)
  2. FFmpeg によるビデオファイルを使った RTMP ライブソースの入力 (省略)
  3. ライブトランスコーダーの設定
  4. ライブストリーミング再生のテスト

Big Buck Bunny サイト のビデオコンテンツをサンプルとして使うストリーミングコンテンツとします。

配信で利用する ビデオファイル はこちらを利用しました。

手順1: ライブソースの入力セキュリティの設定 (省略)

前回の記事で作成した設定を利用するため、ここでは省略します。

手順の詳細は、前回の記事を参照します。

手順2: ライブトランスコーダーの設定

Wowza Streaming Engine のライブトランスコーダーを設定すると、入力したライブソースのトランスコードを行うことができます。

ライブトランスコーダーを設定するには、以下の手順で行います。

ここでは既存のトランスコーダーテンプレートを利用します。

  1. Wowza Streaming Engine Manager 管理 UI にログインし、上部メニューバーの [Application] をクリックします。

  2. 左のメニューから [live] アプリケーションをクリックし、[Transcoder] をクリックします。

  3. [Edit] ボタンを押します。

  4. 以下のパラメーター情報を入力して、[Save] ボタンをクリックします。

    パラメーター
    Template Directory既定のテンプレートを利用するため、既定値のままとします
    Transcoder Optionsチェックボックスを有効にしたままにします (Match source stream name to template name)
    Fallback TemplateTransrate (Default)” (既定値) を選択します
  5. トランスコーダーの “Status” が “Not Enabled” の場合、[Enable Transcoder] をクリックします。

  6. 画面上部の情報バーの [Restart Now] ボタンをクリックします。

  7. アプリケーションの再起動が完了したら、準備完了です。

また、[Transcoder] 画面では、トランスコーダーのテンプレートをクリックすると、 トランスコーダーで生成するストリームの詳細を表示することができます。

トランスコーダーの生成するストリームごとに有効・無効の設定が異なる場合がありますが、 トランスコーダーのテンプレートの詳細画面から、プリセット名 (Preset) をクリックすると、そのストリームを有効・無効を変更することができます。

ここでは、以下の通り、160p, 360p, source を有効にします (既定値のとおり)。

注意: トランスコーダーを動作させる際には、Wowza Streaming Engine が動作している環境の CPU スペックが トランスコード処理の合計に対して十分なキャパシティがあるかを確認してください。

Live Transcoder Encoding Presets

手順3: FFmpeg によるビデオファイルを使ったライブソースの入力

前回の記事と同様に以下の FFmpeg コマンドで、ビデオファイルから生成したライブソースを Wowza Streaming Engine に入力します。

ffmpeg -threads 4 -re -stream_loop -1 \
  -i ~/videos/bbb_sunflower_1080p_30fps_normal.mp4 \
  -rtmp_live live -pix_fmt yuv420p -r 30 \
  -map 0✌️0 -c:v libx264 -preset veryfast -tune animation \
    -b:v 1500k -profile:v high -s:v 1280x720 -minrate:v 1500k -maxrate:v 1500k -bufsize:v 3000k \
    -flags:v +cgop -g 60 -x264opts keyint=60:keyint_min=60:no-scenecut \
    -sc_threshold 0 -crf 23 -vsync 1 \
  -map 0:1 -c:a aac -b:a 64k -ac 2 \
    -af:a aresample=async=1:min_hard_comp=0.100000:first_pts=0 \
  -f flv rtmp://[username]:[password]@[wowza_hostname]:1935/live/livestream1

この FFmpeg コマンドでは前回利用したビデオフィルターによるビットレートや時刻情報の埋め込みは行いません

ライブソースストリームの入力が開始したら、上部メニューバーの [Applications] をクリックし、 左のメニューから既定のライブアプリケーション (live) をクリックします。 次に、左のメニューから [Incoming Streams] をクリックすると、livestream1 という名前の入力ストリームと トランスコーダーで生成したライブストリームが入力ストリームとして表示されていることが確認できます。

Live Transcoder Incoming Streams

[View by Group] をクリックすると、複数のストリームをまとめたストリームグループが表示されます。

これらのグループは、トランスコーダーテンプレートで定義されたグループで、以下の例では、livestream1_alllivestream1_mobile の 2 つのグループが表示されています。

Live Transcoder Incoming Streams (NGRP)

ストリームグループは、トランスコーダーテンプレートで自由にグループを定義できるため、必要に応じて、トランスコーダーのテンプレートを新しく作成したり、既存のテンプレートを変更したりします。

手順4: ライブストリーミング再生のテスト

手順3でライブストリームの入力が完了したら、ライブストリームの配信ができる状態になります。

ライブストリームの再生 URL は以下のように構成されます。

ngrp というプレフィックス名を使うことでストリームグループにアクセスすることができます。

ストリーミング形式URL
HLShttps://[WowzaStreamingEngineのドメイン名]/[アプリケーション名]/ngrp:[入力ストリーム名]/playlist.m3u8
DASHhttps://[WowzaStreamingEngineのドメイン名]/[アプリケーション名]/ngrp:[入力ストリーム名]/manifest.mpd

[アプリケーション名] は、この例では live となります。

[入力ストリーム名] は、この例では livestream1_all または livestream1_mobile となります。

Web プレイヤーを使って、再生のテストを行います。

まとめ

この記事では、FFmpeg で生成したシングルビットレートの RTMP ライブストリームをアップロードし、 Wowza Streaming Engine 経由でマルチビットレートのトランスコードを行って、 アダプティブストリーミング配信を行うための設定を紹介しました。

ライブソースのオリジンからマルチビットレートのストリームを Wowza Streaming Engine へ入力する際に十分なネットワーク帯域が確保できない場合、 一番画質のよいライブソースのみを Wowza Streaming Engine へ入力し、Wowza Streaming Engine でマルチビットレートの生成を行って、 アダプティブストリーミングのライブストリーミング配信を実現することができます。

Wowza Streaming Engine を利用することで、RTMP, RTSP, SRT 等のライブストリームを Apple HLS, MPEG-DASH などの ストリーミング形式に変換することができるようになります。 また、CDN と組み合わせを行うことで大規模なアダプティブストリーミング配信を実現することも可能となります。