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

## はじめに

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

この記事では、RTMP のシングルビットレートのライブソースを Wowza Streaming Engine に入力し、
Wowza Streaming Engine のトランスコーディング機能を使ってマルチビットレートのライブストリームを生成して、
アダプティブストリーミングのライブストリーミング配信を行うための方法を紹介します。

ライブソースのオリジンからマルチビットレートのストリームを Wowza Streaming Engine へ入力する際に十分なネットワーク帯域が確保できない場合、
一番画質のよいライブソースのみを Wowza Streaming Engine へ入力し、Wowza Streaming Engine でマルチビットレートの生成を行って、
アダプティブストリーミングのライブストリーミング配信を実現することができます。

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

1. ライブソースストリームの入力セキュリティの設定 (省略)
2. FFmpeg によるビデオファイルを使った RTMP ライブソースの入力 (省略)
3. ライブトランスコーダーの設定
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-3/../stream-live-with-wse/)で作成した設定を利用するため、ここでは省略します。

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

# 手順2: ライブトランスコーダーの設定

Wowza Streaming Engine のライブトランスコーダーを設定すると、入力したライブソースのトランスコードを行うことができます。

ライブトランスコーダーを設定するには、以下の手順で行います。

> ここでは既存のトランスコーダーテンプレートを利用します。

1. Wowza Streaming Engine Manager 管理 UI にログインし、上部メニューバーの [**Application**] をクリックします。
2. 左のメニューから [**live**] アプリケーションをクリックし、[**Transcoder**] をクリックします。
3. **[Edit]** ボタンを押します。
4. 以下のパラメーター情報を入力して、**[Save]** ボタンをクリックします。

    | パラメーター | 値 |
    | --- | --- |
    | Template Directory | 既定のテンプレートを利用するため、既定値のままとします |
    | Transcoder Options | チェックボックスを有効にしたままにします (**Match source stream name to template name**) |
    | Fallback Template | "**Transrate (Default)**" (既定値) を選択します |

5. トランスコーダーの "**Status**" が "**Not Enabled**" の場合、**[Enable Transcoder]** をクリックします。
6. 画面上部の情報バーの **[Restart Now]** ボタンをクリックします。
7. アプリケーションの再起動が完了したら、準備完了です。

また、[**Transcoder**] 画面では、トランスコーダーのテンプレートをクリックすると、
トランスコーダーで生成するストリームの詳細を表示することができます。

トランスコーダーの生成するストリームごとに有効・無効の設定が異なる場合がありますが、
トランスコーダーのテンプレートの詳細画面から、プリセット名 (Preset) をクリックすると、そのストリームを有効・無効を変更することができます。

ここでは、以下の通り、160p, 360p, source を有効にします (既定値のとおり)。

> 注意: トランスコーダーを動作させる際には、Wowza Streaming Engine が動作している環境の CPU スペックが
> トランスコード処理の合計に対して十分なキャパシティがあるかを確認してください。

![Live Transcoder Encoding Presets](https://shigeyf.dev/posts/_streaming/stream-live-with-wse-3/./wowza-streaming-engine-live-transcoder-encoding-preset.jpg)

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

[前回の記事](https://shigeyf.dev/posts/_streaming/stream-live-with-wse-3/../stream-live-with-wse/)と同様に以下の FFmpeg コマンドで、ビデオファイルから生成したライブソースを Wowza Streaming Engine に入力します。

```bash
ffmpeg -threads 4 -re -stream_loop -1 \
  -i ~/videos/bbb_sunflower_1080p_30fps_normal.mp4 \
  -rtmp_live live -pix_fmt yuv420p -r 30 \
  -map 0:v:0 -c:v libx264 -preset veryfast -tune animation \
    -b:v 1500k -profile:v high -s:v 1280x720 -minrate:v 1500k -maxrate:v 1500k -bufsize:v 3000k \
    -flags:v +cgop -g 60 -x264opts keyint=60:keyint_min=60:no-scenecut \
    -sc_threshold 0 -crf 23 -vsync 1 \
  -map 0:1 -c:a aac -b:a 64k -ac 2 \
    -af:a aresample=async=1:min_hard_comp=0.100000:first_pts=0 \
  -f flv rtmp://[username]:[password]@[wowza_hostname]:1935/live/livestream1
```

> この FFmpeg コマンドでは前回利用したビデオフィルターによるビットレートや時刻情報の埋め込みは行いません

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

![Live Transcoder Incoming Streams](https://shigeyf.dev/posts/_streaming/stream-live-with-wse-3/./wowza-streaming-engine-live-transcoder-incoming-streams.jpg)

**[View by Group]** をクリックすると、複数のストリームをまとめたストリームグループが表示されます。

これらのグループは、トランスコーダーテンプレートで定義されたグループで、以下の例では、`livestream1_all` と `livestream1_mobile` の 2 つのグループが表示されています。

![Live Transcoder Incoming Streams (NGRP)](https://shigeyf.dev/posts/_streaming/stream-live-with-wse-3/./wowza-streaming-engine-live-transcoder-incoming-streams.jpg)

> ストリームグループは、トランスコーダーテンプレートで自由にグループを定義できるため、必要に応じて、トランスコーダーのテンプレートを新しく作成したり、既存のテンプレートを変更したりします。

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

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

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

`ngrp` というプレフィックス名を使うことでストリームグループにアクセスすることができます。

| ストリーミング形式 | URL |
| --- | --- |
| HLS | https://**[WowzaStreamingEngineのドメイン名]**/**[アプリケーション名]**/ngrp:**[入力ストリーム名]**/playlist.m3u8 |
| DASH | https://**[WowzaStreamingEngineのドメイン名]**/**[アプリケーション名]**/ngrp:**[入力ストリーム名]**/manifest.mpd |

> [**アプリケーション名**] は、この例では **live** となります。
>
> [**入力ストリーム名**] は、この例では **livestream1_all** または **livestream1_mobile** となります。

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

## まとめ

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

ライブソースのオリジンからマルチビットレートのストリームを Wowza Streaming Engine へ入力する際に十分なネットワーク帯域が確保できない場合、
一番画質のよいライブソースのみを Wowza Streaming Engine へ入力し、Wowza Streaming Engine でマルチビットレートの生成を行って、
アダプティブストリーミングのライブストリーミング配信を実現することができます。

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