LinodeでWowza Streaming Engineを構築してAkamai CDNでライブ配信をする

# Akamai CDNを利用してライブ配信する

Akamaiでは世界最大規模のライブ配信イベントにも耐えうるContent Delivery Network(CDN)として、Adaptive Media Deliveryというソリューションを提供しています。
本記事では、OBSにてキャプチャした動画をLinode上に構築したWowza Streaming EngineでHLSにEncodingして、Akamai CDNで配信する方法を紹介します。
Linodeでは低コストなライブオリジンを構築することができ、Akamai CDNを活用することで大規模な配信にも対応することができます。
今回はHLSにて配信する際になるべく低遅延で行う設定を行っております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/75aa36c9-f75d-9e4e-e9b4-31b0595cb1a9.png)

## Akamai Adaptive Media Deliveryとは

Akamai Adaptive Media Deliveryは、Akamai Technologiesが提供するメディア配信ソリューションです。これにより、多くの視聴者に高品質の映像と音声コンテンツをインターネットを介して配信することができます。
世界最大のサッカーイベントなどの大規模な配信まで行うことができる配信基盤です。

**[Akamai Adaptive Media Delivery](https://www.akamai.com/ja/products/adaptive-media-delivery)**

https://av.watch.impress.co.jp/docs/news/1467114.html


## Linodeとは

Linode (https://www.linode.com/) は Akamaiが提供するIaaS (Infrastructure as a Service) プラットフォームプロバイダーのサービスです。
Linodeは、仮想サーバーを提供し、ユーザーが自分のウェブサイトやアプリケーションなどをホストすることができます。

https://qiita.com/isss802/items/5313c7a6da1d9ed50a38


## Wowza Streaming Engineとは 

Wowza Streaming Engineは、インターネットを介して動画と音声をストリーミングするための高性能サーバーソフトウェアです。このソフトウェアは、どのデバイス、どこに、どのフォーマットでもライブおよびオンデマンドのコンテンツを配信することを可能にします。カスタマイズ可能なプラットフォームを提供することで、映像と音声を効率的に配信することができます。

https://www.wowza.com/

## OBS Studioとは

OBS Studioは、オープンソースの映像配信ソフトウェアです。ライブストリーミングやビデオキャプチャー、録画などを行うことができます。ユーザーは、カメラやマイクなどのデバイスを接続し、映像と音声をキャプチャーして、インターネット上に配信することができます。使いやすいインターフェースと多彩な機能が特徴です。

https://obsproject.com/ja

https://www.wowza.com/pricing/trial


# Linodeの構築をする

Wowza Streaming Engineを構築するサーバーをLinodeで用意します。

インスタンスのタイプはシステム要件を参考に選定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/07dd7a9d-229e-8a44-827e-0fb35def2135.png)
参考：[https://www.wowza.com/docs/wowza-streaming-engine-technical-specifications](https://www.wowza.com/docs/wowza-streaming-engine-technical-specifications)

Linode [https://cloud.linode.com/](https://cloud.linode.com/) にログインして、インスタンスを起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/e3ec147d-b259-819f-c154-15d2db06a860.png)

後ほどNode Balancerを付与するため、Private IPにチェックを付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/60a64227-0b9c-4d9c-0851-dafff6b49fc3.png)


[https://cloud.linode.com/nodebalancers](https://cloud.linode.com/nodebalancers) から Node Balancerを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/3a08a109-6ef3-53c8-c564-4a1299d62694.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/57d5c15a-ce70-2a59-de1c-800a13006d5e.png)

CDNからオリジンへのアクセスを実現させるため、DNSのレコードを作成します。

```
wowza.sample.com　CNAME xxx-xxx-xxx-xxx-.ip.linodeusercontent.com
```

以上でLinodeの構築は完了です。

# Wowza Streaming Engineを構築する


[https://auth.wowza.com/register](https://auth.wowza.com/register) からWowza Streming Engineのトライアルライセンスを発行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/5796713b-4b1f-4397-e492-d3c761c28b15.png)

[https://www.wowza.com/docs/how-to-install-and-configure-wowza-streaming-engine](https://www.wowza.com/docs/how-to-install-and-configure-wowza-streaming-engine) からLinuxのインストーラーをダウンロードし、作成したLinodeのサーバーにファイルを転送します。

LinodeのサーバーにSSH接続をし、Wowzaインストーラーを実行します。


```
root@localhost:~# ./WowzaStreamingEngine-4.8.21+6-linux-x64-installer.run
----------------------------------------------------------------------------
Welcome to the Wowza Streaming Engine Setup Wizard.

----------------------------------------------------------------------------
Please read the following License Agreement. You must accept the terms of this
agreement before continuing with the installation.

Press [Enter] to continue:
```

先程発行したライセンスキーを入力します。

```
Enter License Key
Please enter your Wowza Streaming Engine License Key.
            Format: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX[-XXXXXXXXXXXX]

License Key: []:
```

セットアップを完了させます。

```
----------------------------------------------------------------------------
Setup is now ready to begin installing Wowza Streaming Engine on your computer.

Do you want to continue? [Y/n]: y
```

ブラウザーからWowza Streaming Engineの管理画面にアクセスします。

```
http://[作成したインスタンスのIP]:8088/enginemanager/login.htm
```

Applicationsからライブオリジンを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/bb1c0d3f-bae3-f6df-601b-98fac2a54bf5.png)

配信を行うための設定を行います。
HLSとDASH、Low-Latencyにチェックを付けます。

参考: [https://www.wowza.com/docs/how-to-set-up-low-latency-applications-in-wowza-streaming-engine-for-rtmp-streaming
](https://www.wowza.com/docs/how-to-set-up-low-latency-applications-in-wowza-streaming-engine-for-rtmp-streaming)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/5b6587e9-342b-03cd-aa6a-4317ff870b74.png)

Source Securityの設定でRTMPの認証を外します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/f641af3d-a749-acb7-5e3f-3dcb47e3ce76.png)

低遅延で配信するための設定を追加します。

参考：[Changing Default Segment Size to Decrease Streaming Latency](https://www.wowza.com/blog/changing-default-segment-size-decrease-streaming-latency)

|設定項目|内容|
|--|--|
|cupertinoChunkDurationTarget|各チャンクの期間をミリ秒単位で設定|
|cupertinoMaxChunkCount|Wowza StreamingEngineが使用可能なチャンクリストに保存するチャンクの最大数を設定|
|cupertinoPlaylistChunkCount|プレイリスト内のプレイヤーに返されるアイテムの数を設定|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/c0ce2e6c-f3e5-900e-a965-dd6b0565676f.png)

Customの設定でflushIntervalとonFlushNotifyClientsの設定を行います。

参考:[Set up low latency applications in Wowza Streaming Engine for RTMP streaming](https://www.wowza.com/docs/how-to-set-up-low-latency-applications-in-wowza-streaming-engine-for-rtmp-streaming)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/d5cff078-327f-ba86-da56-fd19474c6c6d.png)


OBS Studioで接続するための情報を控えます。

`rtmp://[Host - Server]:[Host - Port]/[Application]
`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/b328af4b-a709-ed03-b684-5d6c3fd29dec.png)

# Akamai Adaptive Media Deliveryを構築する

[https://control.akamai.com](https://control.akamai.com) から Create PropertyからAdaptive Media Deliveryを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/e64fd087-a80a-1563-4443-5cf0914e329b.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/4045260d-4c49-a3b8-e564-364c6a7b3ef6.png)
|設定項目|内容|
|-|-|
|Property name|任意の名前|
|Contract|契約があるContact ID|
|Group|設定を作成するグループ|


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/e0b9070f-3262-ff21-dc76-12dd12850de3.png)

今回はドメインの取得やDNSの設定が不要なShared Certificate Hostnameを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/9cf8d941-993a-2e53-dd7c-f37cbb6f7a5b.png)

任意の名前を設定して作成をします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/c7e2bae5-1424-f0fa-7f95-a6ade4afef17.png)

Origin Server Hostnameの設定欄にLinode Node BalancerのHostnameのDNSレコードを追加したドメインを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/2f225e41-94e1-e430-6aa4-c7bc1b71193f.png)

Segmented Media Delivery Modeを設定します。

参考：[HLS and a third-party origin](https://techdocs.akamai.com/adaptive-media-delivery/docs/hls-and-third-party-origin)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/dd096b12-c7ec-8611-5ca2-266c57ae29b3.png)

Content Characteristicsを設定します。
今回は極力低遅延の配信を行いたいため、セグメントを2secに設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/3aa7d85f-0cea-25c7-27fa-eb7a98572203.png)

HTTP/2とChunked Transfer Encodingを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/e2a04621-5979-231a-2a6e-00a25507371b.png)

設定を保存し、StagingとProductionに展開させます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/fdba42f5-e650-1345-5d7a-5ced53f2d746.png)

以上で、Akamaiの設定は完了となります。

# OBS Studioの設定をする

Media Sourceから任意の配信する動画、カメラなどを設定します。

参考：[Send an RTMP Stream to Wowza Streaming Engine With OBS Studio](https://www.wowza.com/blog/rtmp-wowza-streaming-engine-obs-studio)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/c2d99a7d-3aea-b5b1-7cdc-c346697eb0f2.png)

SettingのOutputからなるべく遅延を少なくするための設定を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/b5f436a2-d062-c15f-3e92-27a6fe57b29e.png)

Streamの設定で先程控えたrtmpのURLを入力します。
Steam Keyは[Application]の名前を入力します。

`rtmp://[Host - Server]:[Host - Port]/[Application]
`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/0ab80742-b34b-542a-b03b-a9baca057b26.png)

配信を開始します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/abf88a05-6608-4028-894b-c952e7fba05a.png)

以上で、OBS Studioの設定は完了です。

# 配信の確認

Akamaiのプレイヤーで配信の確認を行います。

http://players.akamai.com/players/hlsjs

WowzaのTest PlaybackからURLの確認を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/0c44f1ef-d073-e9ea-3614-5b3546431522.png)

以下のようなURLを作成し、アクセスを行えます。

`https://xxxxx.akamaized.net/[ApplicationName]/[ApplicationName]/playlist.m3u8`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/ed3a366d-7135-090a-38aa-2e6930bd796f.png)


OBSの配信画面とプレイヤーの遅延を比較してみると、6−7秒程度の遅延で配信できることが確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/7ddf02c7-d834-72ca-4c03-9b1f0ce56c06.png)


# 注意事項

チャンクを小さく設定する場合には、リクエスト数が増加します。
そのため、サーバーへの負荷も増加することとなります。
また、チャンクが小さいとクライアント側でバッファリングが発生することもあり、快適に視聴できる適切な値での設定が必要となります。


# まとめ

今回は、AkamaiのCDNとLinodeを活用したライブ配信基盤の紹介となりました。
今回の設定はあくまでも参考として利用し、最適な設定値を検証していただければと思います。
また、大規模配信を実施する際にはオリジンサーバーの負荷を軽減するため、AkamaiのCDNを多層構造にするCloud Wrapperを導入することでオフロード率を高めることができます。
ぜひ、AkamaiとLinodeを組み合わせて活用していただければと思います。