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

## はじめに

この記事では、Wowza Streaming Engine でライブストリーミング配信を行うためのセットアップを行います。

ライブ配信は、Wowza Streaming Engine にライブソースストリームを入力し、そのライブストリームをストリーミング方式に変換して、ライブストリーミング配信を行います。

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

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

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

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

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

Wowza Streaming Engine にライブソースストリームを入力する際にパスワードで認証を行うことにより、
ライブソースの入力セキュリティを確保することができます。

ライブソースの入力セキュリティを設定にするには、以下の手順で行います。

1. Wowza Streaming Engine Manager 管理 UI にログインし、上部メニューバーの [**Server**] をクリックします。
2. 左のメニューから [**Source Authentication**] をクリックします。
3. **[+Add Source]** ボタンを押します。
4. 以下のパラメーター情報を入力して、**[+Add]** ボタンをクリックします。

    | パラメーター | 値 |
    | --- | --- |
    | Source User Name | ソース認証のユーザー名: 例: `livestream1` |
    | Source Password (Confirm Password) | ソース認証のパスワード |

    > 注意: ユーザー名とパスワードの値は、大文字と小文字が区別され、英数字、ピリオド (.)、アンダースコア (_)、およびハイフン (-) 文字のみを含めることができます。

5. 上部メニューバーの [**Applications**] をクリックし、左のメニューから既定のライブアプリケーション (**live**) をクリックします。
6. 左のメニューから [**Source Security**] をクリックし、ソースセキュリティの設定を確認します。
    - [**RTMP Sources**] が [**Require password authentication**] (パスワード認証を必要とする) となっているかを確認する。
    - もし設定が異なる場合は、**[Edit]** ボタンをクリックし、設定変更を行う。

    ![WSE Live Source Security 設定](https://shigeyf.dev/posts/_streaming/stream-live-with-wse/./wowza-streaming-engine-live-source-security.jpg)

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

以下のコマンドを実行し、ビデオファイルをダウンロードします。

```bash
cd ~/
mkdir videos
cd videos
curl -O https://download.blender.org/demo/movies/BBB/bbb_sunflower_1080p_30fps_normal.mp4
```

ビデオのダウンロードが完了したら、[FFmpeg ツール](https://ffmpeg.org/)を使ってダウンロードしたビデオファイルから、
次の FFmpeg コマンドを使って、RTMP ライブソースストリームを生成し、Wowza Streaming Engine の `live` アプリケーションに入力します。

> ライブソースストリームの入力 URL には、手順1で設定したソース認証のユーザー名 (`[username]`) と
> ソース認証のパスワード (`[password]`) を正しく指定します。

```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 \
    -filter:v drawtext=:text=(bitrate=1500K):fontsize=32:x=32:y=32:box=1:boxcolor=white:fontcolor=black,drawtext=:text=%{localtime}:x=32:y=64:fontsize=32:box=1:boxcolor=white:fontcolor=black,drawtext=:text=%{pts\\:hms}:x=32:y=96:fontsize=32:box=1:boxcolor=white:fontcolor=black \
  -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 を使ったコマンドでは、ビデオファイルを 1280x720 の解像度でエンコードしたストリームで RTMP ストリームを生成しています。
> エンコード時に、ビデオフィルター機能を使って、現在の日時・時刻の情報を映像に埋め込む処理をしています。

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

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

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

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

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

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

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

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

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

## まとめ

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

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