Wowza Streaming Engine を使ったライブストリーミング (2)

## はじめに

[前回の記事](https://shigeyf.dev/posts/_streaming/stream-live-with-wse-2/../stream-live-with-wse/)では FFmpeg で生成した RTMP ライブストリーム (シングルストリーム) をアップロードして、
Wowza Streaming Engine 経由でストリーミング配信を行うための設定を紹介しました。

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

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

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

[Big Buck Bunny サイト](https://peach.blender.org/download/) のビデオコンテンツをサンプルとして使うストリーミングコンテンツとします。

> 配信で利用する [ビデオファイル](https://download.blender.org/demo/movies/BBB/bbb_sunflower_1080p_30fps_normal.mp4) はこちらを利用しました。

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

[前回の記事](https://shigeyf.dev/posts/_streaming/stream-live-with-wse-2/../stream-live-with-wse/)で作成した設定を利用するため、ここでは省略します。

手順の詳細は、[前回の記事](https://shigeyf.dev/posts/_streaming/stream-live-with-wse-2/../stream-live-with-wse/)を参照します。

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

以下のコマンドを実行し、ビデオファイルとスクリプトファイルをダウンロードします。
スクリプトファイルは [Gist で公開しているシェルスクリプト](https://gist.github.com/liveinstantly/7969cc44d14e96c98434cf4e8744a15f) を利用します。

```bash
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` ファイルで定義します。

```bash
./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` ファイルは、コンマ区切りのファイルになっていて、以下の情報が含まれています。

| ストリーム名 | 解像度(幅) | 解像度(高さ) | ビットレート | プロファイル |
| --- | --- | --- | --- | --- |
| livestream1 | 1280 | 720 | 1500 | high |
| livestream2 |  960 | 540 |  800 | baseline |
| livestream3 |  640 | 360 |  500 | baseline |

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

![Live Incoming Stream](https://shigeyf.dev/posts/_streaming/stream-live-with-wse-2/./wowza-streaming-engine-incoming-stream-2.jpg)

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

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

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

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

```xml
<?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 |
| --- | --- |
| HLS | https://**[WowzaStreamingEngineのドメイン名]**/**[アプリケーション名]**/smil:**[SMILファイル名]**/playlist.m3u8 |
| DASH | https://**[WowzaStreamingEngineのドメイン名]**/**[アプリケーション名]**/smil:**[SMILファイル名]**/manifest.mpd |

> [**アプリケーション名**] は、この例では **live** となります。
>
> [**SMILファイル名**] は、この例では **adaptivelivestream** となります。

[Web プレイヤー](https://testplayer.demo.liveinstantly.cloud/)を使って、再生のテストを行います。

![ライブストリーム再生テスト](https://shigeyf.dev/posts/_streaming/stream-live-with-wse-2/./wowza-streaming-engine-live-play-test-2.jpg)

## まとめ

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

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