AWSとOBSでライブストリーミング配信をする

## はじめに
私は音楽ライブに行くのが趣味だが、チケットが取れなかった時は生配信を観て、あるいは現地に行ったけれどもう一度観たい時は後日リピート配信を観ている。


毎月何かしらのライブの配信を観ているなかで、普段仕事でAWSを扱っているので、自分もライブ配信システムをAWSで作れるのではないかと思い、今回作ってみることにした。


## システム構成
今回作成したシステムの構成は以下のとおり。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/908b45b0-7957-423c-9f9e-d08506e85da5.png)


## 作成手順

## 1.「AWS Elemental MediaPackage」の設定

### 「チャネル」の作成
・チャネルの「ID」と「説明」を入力する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/31c3b9b7-b820-46e5-a859-13b8c707d959.png)

・チャネルに対するアクセスのログをCloudWatchLogsのロググループに記録することができる。今回は有効化しない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/8730e554-518a-49cf-88be-3089272550a1.png)

・「作成」を押下してチャネルを作成する。
・作成後、「エンドポイントの管理」を押下して、チャネルのエンドポイントを設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/53f69cf9-6c86-482f-9495-08c60512f39b.png)

・エンドポイントの「ID」と「説明」を入力する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/5df3a454-ecd8-4ce8-a7d5-6bfd9ebdd6d7.png)

・「パッケージャタイプ」は「Apple HLS」を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/aae7e4e5-f3b4-4027-9de4-556a22cec100.png)

・「保存」を押下してエンドポイントを設定する。


## 2.「AWS Elemental MediaLive」の設定

### 「入力」の作成

・「入力名」を入力する。
・「入力タイプ」は、「RTMP (プッシュ)」を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/53fa9ac8-6f01-4c68-be99-1c1f622ff15e.png)

・「入力のネットワークの場所」は、「AWS」を選択する。
・「ネットワークモード」は「パブリック」を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/5181e54c-ca60-4acf-a2e7-3674b02a901e.png)

・「入力セキュリティグループ」とは、今回作成する「入力」にアタッチするセキュリティグループのこと。
・新規に作成する場合は、「作成」を選択し、アクセスを許可したいCIDR範囲を入力する。今回は「0.0.0.0/0」を設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/b45ca044-1e17-40bb-80bd-4ba0b9fd50a1.png)

・「入力の送信先」で、「アプリケーション名」と「アプリケーションインスタンス」を入力する。「アプリケーション名」と「アプリケーションインスタンス」という名称が混乱を招くが、ここでは今回作成する「入力」にアクセスするためのエンドポイントを設定する。「送信先A」「送信先B」は、それぞれ「エンドポイント1」「エンドポイント2」と読み替えればイメージしやすい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/52c63910-155d-46b4-ab4b-9884614f2d9b.png)

### 「チャネル」の作成

・「チャネル名」を入力する。
・チャネルにアタッチするIAMロールを設定する。既存のロールを選択することも、新規にロールを作成してアタッチすることもできる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/47ce9fcf-f9b5-41a3-85dc-e50df916b221.png)

・作成したいチャネルの特性に合わせて、「チャネルテンプレート」を選択する。今回は「HTTP live streaming (MediaPackage)」を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/84535987-2a6f-4487-b8c1-212a158e32ae.png)

・「出力グループ」の「1.MediaPackageグループ」を押下して、このチャネルからどこに送信するかを設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/a137587e-d9f0-4844-8a6d-4e0854c87637.png)

・「MediaPackage送信先」で、「HLS出力を使用します」を選択する。
・「MediaPackageチャネルID」は、先の手順ですでに作成したMediaPackageのチャネルのIDを選択する。
・「MediaPackage設定」の「名前」は、任意の名前を入力する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/efa62f41-f647-4754-8890-9726ed661b03.png)

・「MediaPackage出力」に「出力」が10個記載されているが、最も下にある「出力 10: WebVTT」は字幕用の出力であり、今回は使用しないうえ、追加されているとエラーになるため、今回は×を押下して削除する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/121ef8f5-7b01-4398-8d45-daadb5f527e2.png)

・「入力アタッチメント」の右にある「追加」を押下して、このチャネルに「入力」をアタッチする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/dff839ac-6ecf-4c23-93a4-dce5628adc1e.png)

・先の手順ですでに作成した「入力」を選択する。
・「アタッチメント名」は、任意の名前を入力する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/c65238b0-f86a-43f5-a8fe-c769c8edd2d4.png)

・「確認」>「チャネルの作成」を押下して、チャネルを作成する。

・チャネル作成直後は、チャネルのステータスが以下の図のように「Idle」となる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/f49e5f6f-1df5-45f2-868d-7641fd82817d.png)


## 3.「OBS Studio」の設定

・「OBS Studio」をダウンロード&インストールして、起動する。
・右下の「設定」を押下して設定画面を開く。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/147e453f-e5e2-4572-abba-ee7dd4e515f0.png)

・「映像」タブを選択し、解像度とフレームレートを設定する。今回は、「出力(スケーリング)解像度」（=配信される解像度）は「1280x720p (HD)」に設定し、FPS（フレームレート）は「29.97」に設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/4c489505-2a66-4116-852c-5436e9d4864b.png)

・「配信」タブを選択し、「サーバー」と「ストリームキー」を入力する。
∟「サーバー」：作成した「入力」のエンドポイントの「rtmp://～application-01」
∟「ストリームキー」：作成した「入力」のエンドポイントの「instance-01」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/b2509a0e-e6ee-429a-8392-8d895bb02c12.png)

・エンドポイントは、「入力」の「エンドポイント」で確認できる。2つあるが、どちらを指定してもよい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/5023cd42-1dfb-4d6d-a885-f38a28d7bb95.png)


## 4. 配信開始

### MediaLiveのチャネルを開始

・MediaLiveのチャネルの画面を開き、右上の「開始」を押下する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/816ac37d-5e2f-43a2-bdb5-eb66d04bdb5f.png)

・開始された後、しばらくするとステータスが「Running」になる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/85c2e6a5-296a-44b1-af9d-b097de693875.png)

### OBS Studio で配信したい動画を設定

・配信したい動画ファイルを「ソース」にドラッグ&ドロップする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/3a57797f-bd3e-4e45-866c-ff0734dd6901.png)

・「ソース」に追加した動画ファイルを選択し、その下の歯車マークを押下し、プロパティを開く。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/e28b7853-9d64-4616-b14e-779f4a64c73b.png)

・デフォルト設定だと動画の再生が1回で終わってしまうので、「ループ (繰り返し)」にチェックを入れる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/89b72348-7e81-4fe8-9f55-54d3b086a0f6.png)

・再生ボタンを押して動画を再生したうえで、「コントロール」にある「配信開始」を押下すると、配信が開始される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/d3762563-dbb6-4735-bf9a-a55a91142091.png)

・MediaLiveのチャネルの画面で、現在の配信画面をプレビューすることができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/e57901e1-a485-4ca8-8ff9-05931489dae6.png)

・MediaPackageのチャネルはオリジンサーバーとして機能しているので、MediaPackageのチャネルのエンドポイントにアクセスすることで、配信を視聴することができる。
・今回は簡易的な方法として、MediaPackageのチャネルの「オリジンエンドポイント」にある「プレビュー」を押下して、配信を視聴する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/c33a2ee9-f360-437a-a971-c4186908f873.png)

・OBS Studioで再生している動画がライブ配信されていることが確認できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3716160/b2a778db-3113-4a9c-89b3-18ab3cf79337.png)


## おわりに

ライブ配信システムを作るのはかなり難しいのではと思っていたが、AWSのメディア系サービスを組み合わせることで意外と簡単にライブ配信システムを構築することができた。

今回は初めてだったので、事前収録した動画をライブストリーミング配信するという形態をとったが、次は生で収録している映像をリアルタイムで配信することに挑戦したい。

また、今回は作業用PC兼視聴用PCに負荷をかけないようにするため、元の1080p(Full HD)・60fpsから720p(HD)・30fpsに落として配信した。次は、1080p(Full HD)・60fpsで出力してもカクつかず、スムーズな動画を配信できるようにしたい。