AWSのStreaming Serviceを使って、Unityで動画をStreamingする

# AWSのStreaming Serviceを使って、Unityで動画をStreamingする

## ツール情報：
この記事で利用するのツール：
- [AVProVideo](https://assetstore.unity.com/packages/tools/video/avpro-video-core-edition-181844)
- Unity: 2018.4.2f1
- AWS S3 Service
- AWS Elemental MediaConvert Service

## Streaming Mechanism:
ストリーミングのメカニズムでは、１つファイルを数パーツファイルに分けて、プレイバック時間で判定、適切なパーツをDLして、再生する。

---

## システム構築図：

![architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2156015/7102647f-f9e6-5875-1e95-8aa89d75dacb.png)

| Service | 備考 |
|---|---|
| S3（input）| MediaConvertによって変換処理する入力動画を保管する（管理者が動画をアップロードする）|
| S3 (output) | MediaConvertによって変換処理した出力動画を保管する（ジョブにより自動でアップロードされる） |
| AWS Media MediaConvert | S3（input）にアップされましたの動画をストリーミングファイルに変換するサビースです|
| その他 | Network、SSLやCDNなどのためです |

### システム流れ：
1. 管理者がオリジナルの動画ファイルをInput用のS3に上がる。
2. AWS Media Converter サビースで、変換ジョブを作成して、変換動画品質設定、Output用のS3を指定して、実行する。
3. Unityに,AVProVideoアセットをインポートする。
4. Output用のS3に、**.m3u8**拡張のファイルの公開パスをUnityのAVProVideoアセットにあるのPrefabに渡して、設定はここまで完了します、UnityでPlayするとStreamingが開始する。

メモ：
AWS Media Converterを使わなくて、他のムービー変換ツール使って、ストリーミング用のムービーをOutput用のS3に上げる。次は、Step4と同様です。

---

## AWS Media Convert サビース:

### <u>Bitrateについて</u>:
簡単で定義すると：ビットレートは、特定の期間に送信されるデータの量を表す用語です。 これは、ビット（データ単位）とレート（レート）を組み合わせた単語です。Bitrate測定Unitは kbps(Kilobit per second)またはMbps(Megabit per second)です。

AWSサビースで、Bitrateタイプは３つあります、簡単な定義を説明しております：
- QVBR (Quality-Defined Variable Bitrate):
  -  [OTT](https://en.wikipedia.org/wiki/Over-the-top_media_service) (Over the Internet、Over The Topも呼ばれます), [VOD](https://ja.wikipedia.org/wiki/%E3%83%93%E3%83%87%E3%82%AA%E3%83%BB%E3%82%AA%E3%83%B3%E3%83%BB%E3%83%87%E3%83%9E%E3%83%B3%E3%83%89) (Video On Demand)ときに使います。
  -  QVBRを選択すると、エンコーダーは、指定したビデオ品質を維持するために、ビデオの各部分に使用する適切なビット数を決定します。 すべてのアセットに同じQVBR設定を使用できます。 エンコーダーは、**ビデオの複雑さに合わせてファイルサイズを自動的に調整します**。
- CBR (Constant Bitrate):
  - 固定帯域幅ネットワークでの配信では、ビットレートを一定にする必要があるときに使います。
  - CBRを選択すると、エンコーダーはファイルサイズと品質をビットレートに**設定した値で制限します**。 エンコーダーは、**ビデオのすべての部分に同じビット数を使用します**。
- VBR (Variable Bitrate):
  - 指定したサイズを下回らないように、合計ファイルサイズが必要際に使います。
  - VBRでは、アセットの平均ビットレートを指定します。 エンコーダはビットを割り当てて、**より多くのビットがビデオの複雑な部分に送られるようにします**。 合計ファイルサイズ（コンテナ、パッケージ、およびオーディオデータを除く）は、指定した平均ビットレート（ビット/秒）にアセットの長さ（秒）を掛けたものになります。
  - VBRを使用する場合、各アセットの複雑さに合わせて平均ビットレートを調整すると、最良の結果が得られます。

Bitrateに参考資料を添付しております。
- [AWSのBitrateタイプ説明](https://docs.aws.amazon.com/mediaconvert/latest/ug/cbr-vbr-qvbr.html)
- [AWS Bitrateガイドライン（最適Bitrateを選択方法の参考）](https://docs.aws.amazon.com/mediaconvert/latest/ug/cbr-vbr-qvbr.html#qvbr-guidelines)
- [Bitrateの基本知識 -　ガイドライン](https://restream.io/blog/what-is-video-bitrate/)
- [Audio Bitrateを選択の参考](https://tritondigitalcommunity.force.com/s/article/Choosing-Audio-Bitrate-Settings)
### <u>変換の設定</u>:
こちらはブロードキャストおよびマルチスクリーン配信用にファイルベースのコンテンツを変換するサビースです。

1. AWS Media Convertサビースを選択して、ジョブを作る。Input グループで、Input用のS3にあるの変換ファイルを選択
![convert_job_input_add.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2156015/6404a174-ba24-bc50-10e1-f3ee63d8d9f7.png)

![convert_job_input.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2156015/d0def710-a861-7371-a06b-034b0bd36158.png)


2. Outputの設定をする。
![convert_job_output_add.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2156015/bdfc76fc-8cfd-095c-e7f7-a534a4261330.png)

Streaming使うため、Apple HLSグループを選択する。（グループについての詳細はこの記事では記載しておりません）
![apple_hls_output_grp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2156015/4702e84f-ba59-9582-5512-744e8bdb7729.png)

グループ作ったらこんな感じになります。
![convert_job_output_after_add.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2156015/3cf75197-25f5-522d-7c74-a25b04060ea4.png)


3. 変換の品質を設定する。
最初の設定はすべてDefaultで良いです：
![video_setting_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2156015/233b4187-a233-9024-194d-2dc15dac9709.png)

上記書いてあるのBitrateついてセクションを参考しながら、ビデオ使う目的と合わせて、ビデオ品質を選択します、この記事ではQVBR（AWSのデフォルトを使います）。個人意見ではこれが一番適切なBitrateタイプです。
![video_bitrate_setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2156015/3292b98a-c1a2-a32c-8a4c-5495856e4e9c.png)


4. Audioの変換品質を設定する。
この部分はDefaultまま使うが良いです。
![audio_setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2156015/43402835-f345-9777-7388-428db1b1194d.png)


Convertされました物はこんな感じです:
![convert_result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2156015/d6a3ed96-ae15-0936-b717-53daa6448e4a.png)