はじめに

この記事では、Wowza Streaming Engine で VOD (ビデオ・オンデマンド) でストリーミング コンテンツの配信を行うためのセットアップを行います。

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

  1. アダプティブストリーミング用の VOD ファイルの作成
  2. SMIL ファイルの作成
  3. ビデオファイルのアップロード
  4. Wowza Streaming Engine のセットアップ
  5. アダプティブストリーミング再生のテスト

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

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

手順1: アダプティブストリーミング用の VOD ファイルの作成

アダプティブストリーミング方式でのストリーミング再生では、プレイヤーのネットワーク接続の帯域幅に合わせて複数のビットレートと解像度のビデオを切り替えながら、ストリーミングビデオを再生します。まず、FFmpeg ツール を使って、オリジナルのビデオファイルから、複数のビットレートの MP4 ファイルを作成します。

Ubuntu Linux への FFmpeg のインストールは以下のコマンドを実行します。

sudo apt install ffmpeg

参考までに、利用した FFmpeg のバージョンは以下になります。

$ ffmpeg -version
ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers

FFmpeg を使った複数ビットレートの MP4 のトランスコードにあたり、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/adfdcdeb8ab2a4ecb7fe2b3844ef5cac/raw/a2b0272dd06f9676a02cc6f0ff812123e0490742/ffmpeg_abr_transcode.sh
curl -O https://wowzademostorage1.blob.core.windows.net/transcoding/encode_spec_sample.txt
chmod +x ffmpeg_abr_transcode.sh
./ffmpeg_abr_transcode.sh bbb_sunflower_1080p_30fps_normal.mp4 BigBuckBunny-h264-1080p-30fps encode_spec_sample.txt
mkdir bigbuckbunny-1080p-30fps-h264
mv BigBuckBunny-h264-1080p-30fps*.mp4 bigbuckbunny-1080p-30fps-h264/

生成された MP4 ビデオファイルは以下の通りです。

BigBuckBunny-h264-1080p-30fps_0400_320x180.mp4
BigBuckBunny-h264-1080p-30fps_0650_640x360.mp4
BigBuckBunny-h264-1080p-30fps_1000_640x360.mp4
BigBuckBunny-h264-1080p-30fps_1500_960x540.mp4
BigBuckBunny-h264-1080p-30fps_2250_960x540.mp4
BigBuckBunny-h264-1080p-30fps_3400_1280x720.mp4
BigBuckBunny-h264-1080p-30fps_4700_1920x1080.mp4
BigBuckBunny-h264-1080p-30fps_6000_1920x1080.mp4

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

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

下記の XML (SMIL) ファイルを ~/videos/bbb_h264_1080p_30fps.smil に保存します。

<?xml version="1.0" encoding="UTF-8"?>
<smil title="Big Buck Bunny H264 1080p 30fps Adaptive Bitrate sample content">
    <body>
        <switch>
            <!-- BigBuckBunny-h264-1080p-30fps_0400_320x180.mp4 -->
            <video width="320" height="180" src="bigbuckbunny-1080p-30fps-h264/BigBuckBunny-h264-1080p-30fps_0400_320x180.mp4" systemLanguage="eng">
                <param name="videoBitrate" value="400000" valuetype="data"></param>
                <param name="audioBitrate"  value="64000" valuetype="data"></param>
            </video>
            <!-- BigBuckBunny-h264-1080p-30fps_0650_640x360.mp4 -->
            <video width="640" height="360" src="bigbuckbunny-1080p-30fps-h264/BigBuckBunny-h264-1080p-30fps_0650_640x360.mp4" systemLanguage="eng">
                <param name="videoBitrate" value="650000" valuetype="data"></param>
                <param name="audioBitrate"  value="64000" valuetype="data"></param>
            </video>
            <!-- BigBuckBunny-h264-1080p-30fps_1000_640x360.mp4 -->
            <video width="640" height="360" src="bigbuckbunny-1080p-30fps-h264/BigBuckBunny-h264-1080p-30fps_1000_640x360.mp4" systemLanguage="eng">
                <param name="videoBitrate" value="1000000" valuetype="data"></param>
                <param name="audioBitrate"   value="64000" valuetype="data"></param>
            </video>
            <!-- BigBuckBunny-h264-1080p-30fps_1500_960x540.mp4 -->
            <video width="960" height="540" src="bigbuckbunny-1080p-30fps-h264/BigBuckBunny-h264-1080p-30fps_1500_960x540.mp4" systemLanguage="eng">
                <param name="videoBitrate" value="1500000" valuetype="data"></param>
                <param name="audioBitrate"   value="64000" valuetype="data"></param>
            </video>
            <!-- BigBuckBunny-h264-1080p-30fps_2250_960x540.mp4 -->
            <video width="960" height="540" src="bigbuckbunny-1080p-30fps-h264/BigBuckBunny-h264-1080p-30fps_2250_960x540.mp4" systemLanguage="eng">
                <param name="videoBitrate" value="2250000" valuetype="data"></param>
                <param name="audioBitrate"   value="64000" valuetype="data"></param>
            </video>
            <!-- BigBuckBunny-h264-1080p-30fps_3400_1280x720.mp4 -->
            <video width="1280" height="720" src="bigbuckbunny-1080p-30fps-h264/BigBuckBunny-h264-1080p-30fps_3400_1280x720.mp4" systemLanguage="eng">
                <param name="videoBitrate" value="3400000" valuetype="data"></param>
                <param name="audioBitrate"   value="128000" valuetype="data"></param>
            </video>
            <!-- BigBuckBunny-h264-1080p-30fps_4700_1920x1080.mp4 -->
            <video width="1920" height="1080" src="bigbuckbunny-1080p-30fps-h264/BigBuckBunny-h264-1080p-30fps_4700_1920x1080.mp4" systemLanguage="eng">
                <param name="videoBitrate" value="4700000" valuetype="data"></param>
                <param name="audioBitrate"   value="128000" valuetype="data"></param>
            </video>
            <!-- BigBuckBunny-h264-1080p-30fps_6000_1920x1080.mp4 -->
            <video width="1920" height="1080" src="bigbuckbunny-1080p-30fps-h264/BigBuckBunny-h264-1080p-30fps_6000_1920x1080.mp4" systemLanguage="eng">
                <param name="videoBitrate" value="6000000" valuetype="data"></param>
                <param name="audioBitrate"   value="128000" valuetype="data"></param>
            </video>
        </switch>
    </body>
</smil>

注意: SMIL ファイルは階層化されたディレクトリには配置できないため、ソースファイルを階層化する場合は src 属性を相対パスで記載します。

手順3: ビデオファイルのアップロード

Wowza Streaming Engine では VOD 配信用に以下の3つのアプリケーションのタイプがあります。

タイプ説明
VOD単一サーバー向けのアプリケーション (VOD ファイルを読み込み、プレーヤーにストリーミングするために使用します)
VOD Edgeメディア キャッシュ ソースから VOD ファイルを取り込み、VOD ファイルをプレーヤーにストリーミングするために使用します
VOD HTTP Originビデオ・オンデマンド ファイルのオリジンとして動作し、HTTP ストリーミング プロトコル (MPEG-DASH および Apple HLS) を使用して HTTP キャッシング インフラストラクチャに配信するために使用します

Wowza Streaming Engine のインストール後の既定のセットアップでは、"VOD" タイプのアプリケーションが自動的にセットアップされていて、既定では [インストール先のディレクトリ]\content フォルダから VOD ファイルを読み込みます。

手順1と手順2で作成したファイルを content フォルダにコピーしても構いません。

この記事では、メディアキャッシュ機能を使って外部のクラウドストレージにアップロードした VOD ファイルを配信するよう設定します。

外部のクラウドストレージとして、Azure Storage を使ってみます。Azure CLI の手順を以下に説明しますので、「Azure CLI をインストールする方法」を参考に Azure CLI をインストールしてください。

export AZ_LOCATION=japanwest
export AZ_RESOURCE_GROUP=YourResourceGroup
export AZ_STORAGE_ACCOUNT=wowzavodstorage
az group create --resource-group ${AZ_RESOURCE_GROUP} --location ${AZ_LOCATION}
az storage account create --name ${AZ_STORAGE_ACCOUNT} --resource-group ${AZ_RESOURCE_GROUP} --location ${AZ_LOCATION} --sku Standard_LRS
AZ_STORAGE_KEY=$(az storage account keys list --account-name ${AZ_STORAGE_ACCOUNT} --resource-group ${AZ_RESOURCE_GROUP} | jq -r .[0].value)
az storage container create --name vod --account-name ${AZ_STORAGE_ACCOUNT} --account-key "${AZ_STORAGE_KEY}"
cd ~/videos/
az storage copy -s bigbuckbunny-1080p-30fps-h264 --destination-container vod --account-name ${AZ_STORAGE_ACCOUNT} --account-key ${AZ_STORAGE_KEY} --recursive

手順4: Wowza Streaming Engine のセットアップ

コンテンツのアップロードが完了したら、以下の手順で Wowza Streaming Engine のセットアップを行います。

メディアキャッシュの有効化

メディアキャッシュ機能を有効にするには、以下の手順で行います。

  1. Wowza Streaming Engine Manager 管理 UI にログインし、上部メニューバーの [Server] をクリックします。
  2. 左のメニューから [Media Cache] をクリックします。
  3. Status: Enabled” と表示されている場合は、すでに有効になっているため、以降のステップは必要はありません。
  4. [Enable Media Cache] ボタンを押します。
  5. 画面上部に [Media Cache enabled. You must restart the server for changes to take effect.] と表示されたら、[Restart Now] ボタンをクリックします。

メディアキャッシュ ソースの追加

メディアキャッシュソースとして、Azure Blob Storage を追加するには、以下の手順で行います。

  1. Wowza Streaming Engine Manager 管理 UI にログインし、上部メニューバーの [Server] をクリックします。
  2. 左のメニューから [Media Cache] をクリックします。
  3. [Source] タブをクリックし、[+Add Media Cache Source] ボタンを押します。
  4. 以下のパラメーター情報を入力して、[+Add] ボタンをクリックします。
    パラメーター
    Source NameAzure Blob Storage のメディアソースキャッシュの任意の名前: 例: Azure:wowzavodstorage
    DescriptionAzure Blob Storage のメディアソースキャッシュの説明 (任意)
    Source Typeメディアキャッシュソースのタイプ: Azure
    Prefixメディアキャッシュソースのプレフィックス: azblob/
    Blob Storage Account NameAzure Blob Storage アカウントの名前: wowzavodstorage
    Blob Storage Account Access KeyAzure Blob Storage アカウント鍵: ${AZ_STORAGE_KEY} の値

VOD Edge アプリケーションの作成

VOD Edge アプリケーションの作成は、以下の手順で行います。

  1. Wowza Streaming Engine Manager 管理 UI にログインし、上部メニューバーの [Applications] の ▼ をクリックし、[Add Application] をクリックします。
  2. VOD Edge のボタンをクリックし、[Enter a name for your new application] のテキストボックスに “vodedge” と入力し、[+Add] ボタンをクリックします。
  3. [Playback Types] では、配信に必要となる方式の項目をチェックします (ここではすべての項目をチェックします)。
  4. [Media Cache Source] では、[All Media Cache Sources are available] を選択します。
  5. [Closed Caption Sources] では、配信に必要となる字幕形式の項目をチェックします (ここではすべての項目をチェックします)。
  6. [Save] ボタンをクリックし、VOD Edge アプリケーション設定を保存します。

手順5: アダプティブストリーミング再生のテスト

手順3でコンテンツのアップロードと手順4が完了したら、VOD ファイルの配信ができる状態になります。

SMIL ファイルのメディアキャッシュソースの再生 URL は以下のように構成されます。

http(s)://[Wowza Streaming Engine のドメイン名]/[VOD Edgeアプリケーション名]/_definst_/smil:[Media Cache Source Prefix][Media Source の Path]/[Manifest]

[Manifest] は playlist.m3u8 または manifest.mpd

VOD コンテンツの再生 URL は、以下の通りです。

ストリーミング形式URL
HLShttps://[WowzaStreamingEngineのドメイン名]/vodedge/_definst_/smil:azblob/bbb_h264_1080p_30fps.smil/playlist.m3u8
DASHhttps://[WowzaStreamingEngineのドメイン名]/vodedge/_definst_/smil:azblob/bbb_h264_1080p_30fps.smil/manifest.mpd

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

VOD再生テスト

メディアキャッシュ ソース上の MP4 ファイルに対して、RTMP や RTSP での配信も可能です。

再生 URL の中の “smil:” の代わりに “mp4:” を使います。

まとめ

この記事では、VOD ファイルをクラウドストレージにアップロードして、Wowza Streaming Engine 経由で ストリーミング配信を行うための設定を紹介しました。

Wowza Streaming Engine を利用することで、マルチビットレートの MP4 ファイルを Apple HLS, MPEG-DASH などの ストリーミング形式に変換することができるようになります。

複数の Wowza Streaming Engine サーバーを導入することでスケーラビリティ高い配信を実現することもできます。 また、さらに CDN と組み合わせを行うことで大規模な HTTP ベースのアダプティブストリーミング配信を実現することも可能となります。