はじめに
掲題の環境を構築する必要があったので、その際に行った手順を備忘録として残します。
未来の自分と類似案件でお悩みの方の一助となれば幸いです。
注意
本記事は 2020年6月21日 時点の情報です。
ご覧になられた時点で UI が変更されている可能性がありますので、その点ご注意ください。
前提
- AWS を利用する
- AWS のアカウントを持っている
- 以下のサービスに対するアクセス権限を持っているユーザで作業する
- MediaLive
- MediaStore
- CloudFront(今回は必要ないが別記事で CloudFront で CDN を実現する予定なので入れておく)
- IAM
- CloudWatch
環境
サービス | 概要 |
---|---|
macOS | 10.15.x |
Elemental MediaLive | あらゆるデバイスへのブロードキャストおよびストリーミング向けにライブ動画をエンコードする |
Elemental MediaStore | ライブストリーミングによるメディアワークフロー向けにビデオアセットを保存、配信する |
OBS | ビデオ録画と生放送用の無料でオープンソースのソフトウェア。 |
1.MediaStoreのリソース作成
1.1.コンテナの作成
最初は何も作成されていないので、作成から始める。
1.1.1.コンテナの新規作成
- MediaService のトップページからコンテナ名を入力して
Create container
ボタンをクリック
- 作成中の画面に遷移するので待つ
- コンテナの作成完了
1.2.コンテナの設定
コンテナの作成が完了したので、今度は設定を行っていく。
1.2.1.コンテナポリシーの設定
コンテナポリシーの例: HTTPS 経由のパブリック読み取りアクセス をもとに設定する。
設定する内容は
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadOverHttps",
"Effect": "Allow",
"Action": ["mediastore:GetObject", "mediastore:DescribeObject"],
"Principal": "*",
"Resource": "arn:aws:mediastore:<region>:<owner acct number>:container/<container name>/*",
"Condition": {
"Bool": {
"aws:SecureTransport": "true"
}
}
}
]
}
で、このうち以下の 2 つ
"Sid": "PublicReadOverHttps"
"Resource": "arn:aws:mediastore:<region>:<owner acct number>:container/<container name>/*"
の部分は、コンテナ作成時に元々設定されていた値をそのまま使うようにした。
特に後者の Resource
については、自分自身の環境を指定する必要がある(コピペするだけで完了ではないので注意)
1.2.2.コンテナ CORS ポリシーの設定
異なるドメインから MediaStore リソースの読み込を許可するため、以下を設定しておく。
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"HEAD"
],
"AllowedOrigins": [
"*"
],
"MaxAgeSeconds": 3000
}
]
1.3.エンドポイントをメモする
ここまでで MediaStore
の作成は完了。
あとで MediaLive
と連携で必要となるので、 Data Endpoint
をメモしておく。
2.MediaLiveのリソース作成
2.1.チャンネルの作成
- MediaLive のトップページからコンテナ名を入力して
Create channel
ボタンをクリック
2.2.Channel and input details の設定
2.2.1.Channel template の選択
2.2.2.General info の設定
2.2.2.1.テンプレートからロールを生成
Create role from template
を選択して Create IAM role
ボタンをクリック。
このとき Channel name
も忘れずに入力しておく。
2.2.2.2.生成されたロールを選択
Use existin role
を選択、また Remember role
にチェックする
2.2.3.Channel and input details と Input specifications
2.3.Input attachments の設定
最初は何も作成されていないので、作成から始める。
2.3.1.Input の新規作成
Add
ボタンをクリックすると Attach input
が表示されるので、Create Input
から作成する。
2.3.2.Input details の設定
Input name
の入力と Input type
に RTMP(push)
を選択する。
2.3.3.Network mode の設定
2.3.4.Input security group の設定
最初は何も作成されていないので、Create
から作成する。
このときテキストエリアにアクセスを許可するIPアドレスとサブネットマスクを設定する。
2.3.5.Input destinations の設定
ここで入力した値が後述の 2.4.2.HLS group destination A/B の設定 で使用される。
ここでは Destination A
, Destination B
にそれぞれ live
と Sample
を入力している。
(あくまで本手順における入力値なので、実際の状況に合わせて値は変えて OK )
2.3.6.作成
キャプチャは用意していないが、上記設定が完了したら画面下部にある Create
ボタンをクリックして作成する。
2.4.Output groups の設定
最初は何も作成されていないので、作成から始める。
2.4.1.Output groups の新規作成
Add
ボタンをクリックすると Add ouput groups
が表示されるので、HLS
を選択して Confirm
をクリックする。
2.4.2.HLS group destination A/B の設定
MediaStore のエンドポイント をここで設定する。
このとき後述の 2.4.3.HLS settings の設定 で Hls media store
を選択する関係上、スキーマは
変更前 | 変更後 |
---|---|
https |
mediastoressl |
に変更している。
また A
と B
でユニークにする必要があるので、
destination | URLの区別 |
---|---|
destination A | Sample-A |
destination B | Sample-B |
としている。
ここで live/Sample-A
や live/Sample-B
としているのは、 2.3.5.Input destinations の設定 で設定した値。
2.4.3.HLS settings の設定
Hls media store
を選択し、あとはデフォルト値のまま。
2.4.4.それ以外の設定
他の設定はいじらずに、そのままとする。
2.5.チャンネルの作成
画面左の Create channel
をクリックしチャンネルを作成する。
3.配信を試す
3.1.OBS を使用する
動画配信のクライアントには OBS を使用する。
リンクからダウンロードとインストールを行う。
3.2.動画配信の設定
動画ファイルは任意のものを用意し、以下の設定を行う。
ここで設定するサーバのアドレスとストリームキーは 2.3.Input attachments の設定 で作成した Input の詳細画面から確認できる下記を元に設定する。
サーバ | ストリームキー |
---|---|
rtmp:xxx.xxx.xxx.xxx:1935/live | Sample |
3.3.MedilaLive の Channel をスタート
作成したチャンネルを選択した状態で画面上部の Start
をクリック。 Status
が Running
になるまで待つ。
3.5.動画配信開始
OBS から「動画配信開始」をクリックして動画配信を開始する。
3.4.MediaStore のコンテナを確認
3.3.1.フォルダの確認
画面右上の Refresh
ボタンを何度かクリックすると、フォルダが出来上がる。
3.3.2.配信ファイルの確認
このなかから、拡張子 m3u8
のものをクリック -> 詳細画面を表示する
3.3.3.URLをSafariで開く
Object nameのURLをコピーしSafariなどのHLS再生できるブラウザで開いて再生確認ができれば成功。
まとめにかえて
できれば CloudFront を利用して次の図のような構成を試してみたかったが、かなり時間が掛かったし記事の内容も長くなったので一旦ここで終了する。
CloudFront を使った構成は 別に記事を作る。 こちら をご参考いただければ。
▼CloudFront を用いた構成
(mermaid.js の classDiagram
で無理くり書いた構成図なので、ツッコミはご勘弁ください)
MediaLive の料金について
ちょっと気になる一文があったので。
気をつけよう。
AWS Elemental MediaLive の料金