Wowza Streaming Engine を使った VOD ストリーミングのセットアップ
はじめに
この記事では、Wowza Streaming Engine で VOD (ビデオ・オンデマンド) でストリーミング コンテンツの配信を行うためのセットアップを行います。
作業の手順は、以下の通りです。
- アダプティブストリーミング用の VOD ファイルの作成
- SMIL ファイルの作成
- ビデオファイルのアップロード
- Wowza Streaming Engine のセットアップ
- アダプティブストリーミング再生のテスト
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 のセットアップを行います。
メディアキャッシュの有効化
メディアキャッシュ機能を有効にするには、以下の手順で行います。
- Wowza Streaming Engine Manager 管理 UI にログインし、上部メニューバーの [Server] をクリックします。
- 左のメニューから [Media Cache] をクリックします。
- “Status: Enabled” と表示されている場合は、すでに有効になっているため、以降のステップは必要はありません。
- [Enable Media Cache] ボタンを押します。
- 画面上部に [Media Cache enabled. You must restart the server for changes to take effect.] と表示されたら、[Restart Now] ボタンをクリックします。
メディアキャッシュ ソースの追加
メディアキャッシュソースとして、Azure Blob Storage を追加するには、以下の手順で行います。
- Wowza Streaming Engine Manager 管理 UI にログインし、上部メニューバーの [Server] をクリックします。
- 左のメニューから [Media Cache] をクリックします。
- [Source] タブをクリックし、[+Add Media Cache Source] ボタンを押します。
- 以下のパラメーター情報を入力して、[+Add] ボタンをクリックします。
パラメーター 値 Source Name Azure Blob Storage のメディアソースキャッシュの任意の名前: 例: Azure:wowzavodstorage
Description Azure Blob Storage のメディアソースキャッシュの説明 (任意) Source Type メディアキャッシュソースのタイプ: Azure
Prefix メディアキャッシュソースのプレフィックス: azblob/
Blob Storage Account Name Azure Blob Storage アカウントの名前: wowzavodstorage
Blob Storage Account Access Key Azure Blob Storage アカウント鍵: ${AZ_STORAGE_KEY}
の値
VOD Edge アプリケーションの作成
VOD Edge アプリケーションの作成は、以下の手順で行います。
- Wowza Streaming Engine Manager 管理 UI にログインし、上部メニューバーの [Applications] の ▼ をクリックし、[Add Application] をクリックします。
- VOD Edge のボタンをクリックし、[Enter a name for your new application] のテキストボックスに “vodedge” と入力し、[+Add] ボタンをクリックします。
- [Playback Types] では、配信に必要となる方式の項目をチェックします (ここではすべての項目をチェックします)。
- [Media Cache Source] では、[All Media Cache Sources are available] を選択します。
- [Closed Caption Sources] では、配信に必要となる字幕形式の項目をチェックします (ここではすべての項目をチェックします)。
- [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 |
---|---|
HLS | https://[WowzaStreamingEngineのドメイン名]/vodedge/_definst_/smil:azblob/bbb_h264_1080p_30fps.smil/playlist.m3u8 |
DASH | https://[WowzaStreamingEngineのドメイン名]/vodedge/_definst_/smil:azblob/bbb_h264_1080p_30fps.smil/manifest.mpd |
Web プレイヤー を使って、再生のテストを行います。
メディアキャッシュ ソース上の MP4 ファイルに対して、RTMP や RTSP での配信も可能です。
再生 URL の中の “smil:” の代わりに “mp4:” を使います。
まとめ
この記事では、VOD ファイルをクラウドストレージにアップロードして、Wowza Streaming Engine 経由で ストリーミング配信を行うための設定を紹介しました。
Wowza Streaming Engine を利用することで、マルチビットレートの MP4 ファイルを Apple HLS, MPEG-DASH などの ストリーミング形式に変換することができるようになります。
複数の Wowza Streaming Engine サーバーを導入することでスケーラビリティ高い配信を実現することもできます。 また、さらに CDN と組み合わせを行うことで大規模な HTTP ベースのアダプティブストリーミング配信を実現することも可能となります。