0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Wowza Streaming Engine を使った VOD ストリーミングのセットアップ

Last updated at Posted at 2023-03-28

はじめに

この記事では、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 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 アプリケーションの作成は、以下の手順で行います。

  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
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 プレイヤーを使って、再生のテストを行います。

VOD再生テスト

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

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

まとめ

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

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

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?