5
6

More than 1 year has passed since last update.

[AWS] MediaLive + MediaStore で Live 動画配信

Last updated at Posted at 2020-06-07

はじめに

掲題の環境を構築する必要があったので、その際に行った手順を備忘録として残します。
未来の自分と類似案件でお悩みの方の一助となれば幸いです。

注意

本記事は 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.コンテナの新規作成

  1. MediaService のトップページからコンテナ名を入力して Create container ボタンをクリック
スクリーンショット 2020-06-07 8.59.06.png
  1. 作成中の画面に遷移するので待つ
スクリーンショット 2020-06-07 8.59.49.png
  1. コンテナの作成完了
スクリーンショット 2020-06-07 9.00.24.png

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 については、自分自身の環境を指定する必要がある(コピペするだけで完了ではないので注意)

▼設定後の画面
スクリーンショット 2020-06-07 9.05.57.png

1.2.2.コンテナ CORS ポリシーの設定

異なるドメインから MediaStore リソースの読み込を許可するため、以下を設定しておく。

[
  {
    "AllowedHeaders": [
      "*"
    ],
    "AllowedMethods": [
      "GET",
      "HEAD"
    ],
    "AllowedOrigins": [
      "*"
    ],
    "MaxAgeSeconds": 3000
  }
]

▼設定後の画面
スクリーンショット 2020-06-07 12.59.58.png

1.3.エンドポイントをメモする

ここまでで MediaStore の作成は完了。
あとで MediaLive と連携で必要となるので、 Data Endpoint をメモしておく。
スクリーンショット 2020-06-07 9.11.46.png

2.MediaLiveのリソース作成

2.1.チャンネルの作成

  1. MediaLive のトップページからコンテナ名を入力して Create channel ボタンをクリック
スクリーンショット 2020-06-07 9.26.30.png

2.2.Channel and input details の設定

2.2.1.Channel template の選択

ここでは Live Event HLS を選択
スクリーンショット 2020-06-07 9.30.23.png

2.2.2.General info の設定

2.2.2.1.テンプレートからロールを生成

Create role from template を選択して Create IAM role ボタンをクリック。
このとき Channel name も忘れずに入力しておく。
スクリーンショット 2020-06-07 9.30.59.png

2.2.2.2.生成されたロールを選択

Use existin role を選択、また Remember role にチェックする
スクリーンショット 2020-06-07 12.46.53.png

2.2.3.Channel and input details と Input specifications

ここはいじらずにそのまま。
スクリーンショット 2020-06-07 9.32.40.png

2.3.Input attachments の設定

最初は何も作成されていないので、作成から始める。

2.3.1.Input の新規作成

Add ボタンをクリックすると Attach input が表示されるので、Create Input から作成する。
スクリーンショット 2020-06-07 9.33.54.png

2.3.2.Input details の設定

Input name の入力と Input typeRTMP(push) を選択する。
スクリーンショット 2020-06-07 9.35.05.png

2.3.3.Network mode の設定

ここはいじらずにそのまま。
スクリーンショット 2020-06-07 13.40.13.png

2.3.4.Input security group の設定

最初は何も作成されていないので、Create から作成する。
このときテキストエリアにアクセスを許可するIPアドレスとサブネットマスクを設定する。
スクリーンショット 2020-06-07 13.43.08.png

2.3.5.Input destinations の設定

ここで入力した値が後述の 2.4.2.HLS group destination A/B の設定 で使用される。
ここでは Destination A, Destination B にそれぞれ liveSample を入力している。
(あくまで本手順における入力値なので、実際の状況に合わせて値は変えて OK )
スクリーンショット 2020-06-07 14.29.49.png

2.3.6.作成

キャプチャは用意していないが、上記設定が完了したら画面下部にある Create ボタンをクリックして作成する。

2.4.Output groups の設定

最初は何も作成されていないので、作成から始める。

2.4.1.Output groups の新規作成

Add ボタンをクリックすると Add ouput groups が表示されるので、HLS を選択して Confirm をクリックする。
スクリーンショット 2020-06-07 13.49.46.png

2.4.2.HLS group destination A/B の設定

MediaStore のエンドポイント をここで設定する。
スクリーンショット 2020-06-07 10.05.24.png

このとき後述の 2.4.3.HLS settings の設定Hls media store を選択する関係上、スキーマは

変更前 変更後
https mediastoressl

に変更している。
また AB でユニークにする必要があるので、

destination URLの区別
destination A Sample-A
destination B Sample-B

としている。
ここで live/Sample-Alive/Sample-B としているのは、 2.3.5.Input destinations の設定 で設定した値。

2.4.3.HLS settings の設定

Hls media store を選択し、あとはデフォルト値のまま。
スクリーンショット 2020-06-07 13.56.19.png
スクリーンショット 2020-06-07 9.57.44.png

2.4.4.それ以外の設定

他の設定はいじらずに、そのままとする。

2.5.チャンネルの作成

画面左の Create channel をクリックしチャンネルを作成する。
スクリーンショット 2020-06-07 9.58.01.png

3.配信を試す

3.1.OBS を使用する

動画配信のクライアントには OBS を使用する。
リンクからダウンロードとインストールを行う。

3.2.動画配信の設定

動画ファイルは任意のものを用意し、以下の設定を行う。
スクリーンショット 2020-06-07 12.44.51.png
ここで設定するサーバのアドレスとストリームキーは 2.3.Input attachments の設定 で作成した Input の詳細画面から確認できる下記を元に設定する。

スクリーンショット 2020-06-07 15.06.26.png
サーバ ストリームキー
rtmp:xxx.xxx.xxx.xxx:1935/live Sample

3.3.MedilaLive の Channel をスタート

作成したチャンネルを選択した状態で画面上部の Start をクリック。 StatusRunning になるまで待つ。
スクリーンショット 2020-06-07 15.15.54.png
スクリーンショット 2020-06-07 15.17.15.png

3.5.動画配信開始

OBS から「動画配信開始」をクリックして動画配信を開始する。
スクリーンショット 2020-06-07 15.20.55.png

3.4.MediaStore のコンテナを確認

3.3.1.フォルダの確認

画面右上の Refresh ボタンを何度かクリックすると、フォルダが出来上がる。
スクリーンショット 2020-06-07 12.45.13.png
スクリーンショット 2020-06-07 12.48.50.png

3.3.2.配信ファイルの確認

フォルダの中にはいると、配信ファイルが配置されている。
スクリーンショット 2020-06-07 12.49.01.png

このなかから、拡張子 m3u8 のものをクリック -> 詳細画面を表示する
スクリーンショット 2020-06-07 15.28.32.png

3.3.3.URLをSafariで開く

Object nameのURLをコピーしSafariなどのHLS再生できるブラウザで開いて再生確認ができれば成功。

スクリーンショット 2020-06-07 12.49.56.png

まとめにかえて

できれば CloudFront を利用して次の図のような構成を試してみたかったが、かなり時間が掛かったし記事の内容も長くなったので一旦ここで終了する。
CloudFront を使った構成は 別に記事を作る。 こちら をご参考いただければ。

▼CloudFront を用いた構成
(mermaid.js の classDiagram で無理くり書いた構成図なので、ツッコミはご勘弁ください)
スクリーンショット 2020-06-07 15.53.02.png

MediaLive の料金について

ちょっと気になる一文があったので。
気をつけよう。
AWS Elemental MediaLive の料金

スクリーンショット 2020-06-07 16.04.15.png

参考

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6