Linode でライブ配信基盤を構築してみる

## はじめに
独自のライブ配信サービスを立ち上げる際、まず考えなければいけないのはライブ配信基盤をどう構築するかです。
様々なサービスがありますが、月額や年額でのサブスクリプションが必要であったり、そもそも費用が高すぎる場合もあります。
Linode では無償で利用できるライブ配信ソフトウェアがマーケットプレイスで提供されています。
今回は Ant Media Server というソフトウェアを利用して実際にライブ配信をテストしたいと思います。
とても簡単に構築できるのでぜひ試してみてください。


## Ant Media Server とは？
Ant Media Server は、WebRTC テクノロジを使用して超低遅延ストリーミングを提供するストリーミングエンジンソフトウェアです。
遅延が最大 0.5 秒、または HLS または CMAF を使用して超低遅延を実現します。Ant Media Server はスケーラブルで、オンプレミスまたは任意のクラウドプロバイダーで実行できます。
RTMP、WebRTC、または HLS を介して取り込むことができ、CMAF および HLS、WebRTC ライブストリーミングをサポートしています。
ます。
無償版の Community Edition と 有償版の Enterprise Edition があり、利用できる機能が異なります。

詳細は公式ページを確認してみてください。

https://resources.antmedia.io/docs/ant-media-server-enterprise-and-community-edition


## 今回のテスト構成
以下のような構成を利用しました。

```mermaid
graph LR;
    OBS--RTMP-->AntMediaServer--HLS-->Player;
```


## Ant Media Server を立ち上げる
公式のガイドを元に構築を進めます。

https://resources.antmedia.io/docs/getting-started-with-ant-media-server

### Ant Media Server の要求スペック
要求スペックの下限は定義されていませんが、Linode 8GB が推奨されています。

> Ant Media Server can be supported on any size Linode, but we suggest you deploy your Ant Media Server App on a **Linode 8GB plan**.

https://www.linode.com/marketplace/apps/ant-media/ant-media-community-edition/

今回は Shared CPU の Linode 8GB で検証を進めます。


### Marketplace の App を元に作成する
Ant Media Server はマーケットプレイスで提供されています。
今回は無償版である `Ant Media Server: Community Edition` を利用します。
マーケットプレイスから上記の App を選択し、必要情報を入力します。

![ant-media-server_linode_marketplace.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711428/0238ee06-d538-2aa1-458e-ff9e72827dad.jpeg)


### 最低限のセキュリティ設定
root ユーザの SSH ログイン無効化やその他 SSH の設定は強固にしておきましょう。

https://qiita.com/tarooishi/items/5f8ec51323eeed919818

https://www.linode.com/docs/guides/set-up-and-secure/#harden-ssh-access


### Ant Media Server の初期設定
####  アカウント作成
サーバーが立ち上がったら以下のURLにアクセスします。

`http://<server_ip>:5080`

すると、以下のような初期設定画面が表示されます。

![ant-media-server_create_account.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711428/e60db56a-ea8e-2f17-7563-017447e28c42.jpeg)

必要事項を入力して `Create Account` をクリックします。
ログイン画面が表示されるので、作成したユーザー名とパスワードでログインします。

![ant-media-server_login.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711428/35a3a09d-d109-bb67-bf54-df53ec826d34.jpeg)

ダッシュボードが表示されれば設定完了です。

![ant-media-server_dashboard.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711428/c2bb25c6-43ab-dd10-f2b1-2adc5446af1f.jpeg)


#### (Optional) A レコードの登録
SSL 証明書発行のために Ant Media Server 用の A レコードを登録します。
ドメインをお持ちの方は、任意のサブドメインを作成し、A レコードに Ant Media Server の IP アドレスを設定してください。


#### (Optional) SSL 証明書の作成
こちらでは HTTP-01 チャレンジで Let's Encrypt 証明書を作成します。
コマンドを入力すると、必要なパッケージがインストールされ、自動で証明書作成が完了します。
`your_domain` には先ほど作成したドメイン名を入力します。

```bash
$ cd /usr/local/antmedia
$ sudo ./enable_ssh.sh -d <your_domain>
︙
# これが表示されればOK
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
︙
```


### ライブ配信の設定
ライブ配信のためにストリームの設定を作成します。
デフォルトで `LiveApp` というアプリケーションが用意されているので、この配下で作成します。
まずは緑色のボタン `New Live Stream` をクリックします。

![ant-media-server_applications_LiveApp.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711428/eec9623b-f986-f48a-9709-4562a8883eb7.jpeg)

好きな名前を入力して `Create` をクリックします。
Stream Id は自動で生成されるので入力不要です。

![ant-media-server_create_stream.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711428/0a7ae2a9-971a-7b5c-ab77-5012e5f6f170.jpeg)

入力した名前でストリームが作成されていれば完了です。
生成された Stream Id が Stream Name の下に表示されています。
この Stream Id はテスト時に利用します。

![ant-media-server_confirm_stream.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711428/722dae15-5058-fdbe-0516-bf6b950c4933.jpeg)



## 配信してみる
### 配信側
今回は配信ソフトとして OBS を利用しました。
特にこだわりはないですが、Big Bug Bunny をループ配信しています。

OBS の Stream 設定には以下のようなパラメーターを入力します。

|設定項目|設定値|例|
|:----:|:----:|:----:|
|Service|Custom...| - |
|Server|rtmp://\<your_domain or your_ip\>/LiveApp/|rtmp://live.example.com/LiveApp|
|Stream Key|先ほど生成された Stream Id|353253818719096651634096|

![obs_stream_configuration.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711428/222ad778-7c9a-1834-c3e6-f0924075c8ee.jpeg)

`Start Streaming` をクリックしてライブ配信を開始します。

![obs_start_streaming.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711428/fd7a44f9-9576-bdb5-2791-bab6d37f578d.jpeg)

OBS 側でエラーが発生していないことを確認してください。

Ant Media Server 側でもストリームがインジェストされているかどうか確認できます。

ダッシュボードで Active Live Streams が 1 になっていればOKです。

![ant-media-server_stream_status.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711428/98aab759-99d0-9a5f-4ea8-0e0cb0e35b3e.jpeg)


### 視聴側
Akamai のデモプレイヤーを利用してライブ配信を視聴します。

https://players.akamai.com/players/hlsjs

再生する URL は以下のようなフォーマットです。

HTTPS の場合
`https://<your_domain or your_ip>:5443/LiveApp/streams/<Stream Id>.m3u8`

HTTP の場合
`http://<your_domain or your_ip>:5080/LiveApp/streams/<Stream Id>.m3u8`

:::note info
HTTP の場合はプレイヤーページにも HTTP でアクセスしてください。
http://players.akamai.com/players/hlsjs
:::

再生 URL を指定して映像が流れればOKです。

![akamai_player_testing.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711428/4047933a-b5cb-fb2b-b193-99cc3e08357b.jpeg)


## まとめ
今回は Ant Media Server を利用してライブ配信基盤を構築してみました。
30分ほどで構築でき、テストを合わせても1時間あれば十分でした。
Linode 8GB は一時間あたり $0.06 なので、無料クレジットの範囲で収まります。
ライブ配信を勉強したい、または商用利用に向けてテストしたい方はぜひこちらの手順で試してみてください。