はじめに

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

この記事では、アダプティブストリーミングのライブストリーミング配信を行うための方法を紹介します。

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

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

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

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

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

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

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

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

以下のコマンドを実行し、ビデオファイルとスクリプトファイルをダウンロードします。 スクリプトファイルは Gist で公開しているシェルスクリプト を利用します。

cd ~/
mkdir videos
cd videos
curl -O https://download.blender.org/demo/movies/BBB/bbb_sunflower_1080p_30fps_normal.mp4
curl -LO https://gist.github.com/liveinstantly/7969cc44d14e96c98434cf4e8744a15f/raw/88d2a83c77e01ff32262db04f739e5755efbd6a5/ffmpeg_filelive_abr_transcode.sh
chmod +x ffmpeg_filelive_abr_transcode.sh
curl -O https://wowzademostorage1.blob.core.windows.net/transcoding/liveencode_spec_sample.txt

以下のコマンドを実行して、ビデオのトランスコードとライブソースの入力を行います。

このスクリプトでは、ビデオファイルから複数のビットレートのライブストリームを生成し、Wowza Streaming Engine に入力します。 生成する複数のライブストリームの詳細は liveencode_spec_sample.txt ファイルで定義します。

./ffmpeg_filelive_abr_transcode.sh -f ~/videos/bbb_sunflower_1080p_30fps_normal.mp4 -s ./liveencode_spec_sample.txt -h **[WowzaStreamingEngineのドメイン名]** -a **live** -u **[username]** -p "**[password]**"

liveencode_spec_sample.txt ファイルは、コンマ区切りのファイルになっていて、以下の情報が含まれています。

ストリーム名解像度(幅)解像度(高さ)ビットレートプロファイル
livestream112807201500high
livestream2960540800baseline
livestream3640360500baseline

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

Live Incoming Stream

手順3: SMIL ファイルの作成

アダプティブストリーミング配信のために SMIL ファイルを作成します。

以下の SMIL ファイル (XML ファイル) を作成し /usr/local/WowzaStreamingEngine/content ディレクトリに追加します。

liveencode_spec_sample.txt ファイルの詳細情報に従って、以下のように SMIL ファイルを定義します。

<?xml version="1.0" encoding="UTF-8"?>
<smil title="Sample SMIL file for Live Adaptive Streaming">
  <body>
    <switch>
      <video height="720" src="livestream1" systemLanguage="eng" width="1280">
        <param name="videoBitrate" value="1500000" valuetype="data"></param>
        <param name="audioBitrate" value="128000" valuetype="data"></param>
      </video>
      <video height="540" src="livestream2" systemLanguage="eng" width="960">
        <param name="videoBitrate" value="800000" valuetype="data"></param>
        <param name="audioBitrate" value="64000" valuetype="data"></param>
      </video>
      <video height="360" src="livestream3" systemLanguage="eng" width="640">
        <param name="videoBitrate" value="500000" valuetype="data"></param>
        <param name="audioBitrate" value="64000" valuetype="data"></param>
      </video>
    </switch>
  </body>
</smil>

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

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

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

ストリーミング形式URL
HLShttps://[WowzaStreamingEngineのドメイン名]/[アプリケーション名]/smil:[SMILファイル名]/playlist.m3u8
DASHhttps://[WowzaStreamingEngineのドメイン名]/[アプリケーション名]/smil:[SMILファイル名]/manifest.mpd

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

[SMILファイル名] は、この例では adaptivelivestream となります。

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

ライブストリーム再生テスト

まとめ

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

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