トランソニックソフトウェア

ブログ
BLOG

2020.11.09

[AWS][Media Live]MediaLive + MediaPackageを利用したLive配信の設定

AWSにはLiveストリーミング配信機能があります。

実装としては、現在(2020年11月)、MediaLiveからの入力に対して以下の2通りの方法があります。

これらは、ライブ配信された画像を一時的にため込む場所として利用します。

これらの違いとしては、MediaPackageは、ライブからVOD(Video on demand)を作成する機能、およびDRM(デジタル著作権管理)を組み込む機能が存在するそうです。

https://aws.amazon.com/jp/mediastore/faqs/

 

  • ・Media Packageを通じて配信
  • ・Media Storeを通じて配信

 

ちなみに実装はMediaStoreの方が直感的で分かりやすいです。

また、AWSのLiveストリーミング自体、複数の配信者が動的に回線を追加、削除できるような設計にはなっておりません。

ネット番組やTV番組のように、あらかじめ番組が決められている場合を想定しているようです。

 

Media LiveとMedia Packageを組み合わせた構成としては以下のような感じになると思います。

Media Liveに2つの回線がある理由は、1回線分は冗長化の為のようです。

それでは構築の手順を以下に示します。

 

(1) Cloud Frontバイパス対応用ロールの準備

上記の図の × となっている箇所の実装です。

(1 . 1) ポリシーの作成

まずは、IAMにアクセスして、左ペインから 【アクセス管理】>【ポリシー】を選び、【ポリシーの作成】を選択します。

【JSON】タグを選択します。

 

最初は以下のようになっています。

 

 

JSONの内容を以下のように変更します。

 

JSONが入力できたら、【ポリシーの確認】ボタンを押します。

 

 

・ポリシーの確認画面

名前、説明を入力します。

  • ・名前:MediaPackageCDNAuthPolicy(任意)
  • ・説明:Cloud Front – MediaPackage policy(任意)

 

※概要に関してはそのままでOKです。

入力できたら、【ポリシーの作成】ボタンをクリックして作成を完了してください。

 

(1 . 2) ロールの作成

・左ペインから 【アクセス管理】>【ロール】を選び、【ロールの作成】を選択します。

【ユースケースの選択画面】でMedia Packageが無い(2020年10月時点)ので、ひとまず EC2を選択して下さい。

【次のステップ:アクセス権限】ボタンをクリックします。

 

 

 

 

・ロールの作成画面

ポリシーのフィルタに、先ほど作成したポリシーの名前を入力します。

上記例では、【MediaPackageCDNAuthPolicy】となります。

 

 

 

 

フィルタがかかり、先ほど作成した MediaPackageCDNAuthPolicyが一覧に出てきます。

チェックを入れて【次のステップ:タグ】ボタンをクリックします。

 

 

・タグの追加(オプション)画面

何も入力せずにそのまま【次のステップ:確認】ボタンを押して次へ移動します。

 

 

・確認画面

ロール名を以下のようにします。

 

  • ・ロール名:MediaPackageCDNAuthRole (任意)
  • ・ロールの説明:(任意)

 

信頼されたエンティティには、ユースケースで選択した【AWS のサービス: ec2.amazonaws.com】と表示されているはずです。

また、ポリシーには、上記で指定した【MediaPackageCDNAuthPolicy】が表示されています。

入力できたら、【ロールの作成】ボタンをクリックしてロールを作成します。

これで、とりあえずEC2を用いたロールができたはずです。

 

・ロール一覧

ロールを登録するとロール一覧画面に戻ってきます。

ロール一覧のリストタイトル上部に【検索】入力欄がありますので、上記で作成したロールを検索欄に入力してください。

その後、作成したロールを選択します。

 

・ロールの概要画面

概要画面を表示したら【信頼関係】タブを選択します。

タブ内にある【信頼関係の編集】ボタンを押してください。

 

 

 

 

・信頼関係の編集画面

以下のように、Serviceに ec2.amazonaws.com となっているはずです。

 

 

 

ここで “Service” の値を ec2.amazonaws.com → mediapackage.amazonaws.com に変更します。

変更できたら、【信頼ポリシーの更新】ボタンを押して変更を確定します。

 

・ロールの概要画面

信頼されたエンティティには、先ほど変更したIDプロバイダー【mediapackage.amazonaws.com】に変更されているはずです。

また、ロールARNは次回使いますので、必ずメモしておいてください。

 

 

 

 

(2) Cloud Frontバイパス対応用ロールの認証コード作成

認証コードについては、「長さが8~128文字であること」という制限があるとのことです。
またUser Guideではversion 4 UUIDを使用することを推奨しているので、これにならいます。
こちらのページを参考に、手元の環境でversion 4 UUIDを生成しました。

https://www.uuidgenerator.net/version4

今回生成した値は、こちらです。

7f33895c-e8e1-4eb7-9417-1929156a20b0

以下の作業で必要になりますので、生成した値をメモしておいてください。

 

(2.1) 新しいシークレットを保存する

AWSコンソールより、Secrets Manager を選択します。

以下の画面が表示されますので、【新しいシークレットを保存する】ボタンを押します。

 

・シークレットの種類を選択

その他のシークレットを選択します。

 

 

【このシークレットに格納するキーと値のペアを指定します】に以下のように設定します。

 

 

「暗号化キーを選択してください」にはデフォルトのまま、DefaultEncryptionKey とします。

そして、【次】ボタンを押します。

 

 

・シークレットの名前と説明

シークレットの名前、および説明を入力します。

 

  • ・シークレットの名前: MediaPackage/CDNAuth001 (任意)
  • ・オプションの説明: MediaPackageのCloud Frontバイパス制御用のトークン (任意)

 

ここでは上記のように入力して【次】ボタンを押します。

 

 

・自動ローテーションを設定する

「自動ローテーションを無効にする」を選択し、【次】ボタンを押します。

 

・レビュー

確認画面で確認したら、そのまま【保存】ボタンを押してください。

 

・詳細を確認する

一覧画面から、今、登録したシークレットを選択してください。

この例では、MediaPackage/CDNAuth001 となっているはずです。

 

 

シークレットのARNをメモしておいてください。

後からこの値を使用します。

 

 

(3) Media Packageの作成

AWSコンソールより、MediaPackage を選択します。

以下の画面が表示されますので、【Create a new channel】ボタンを押します。

 

(3. 1) Channelの作成

・Channel details画面

以下の項目に値を設定する。

 

  • ・ID: MediaPackageSecurityDemo (任意)
  • ・Description: セキュリティデモ (任意)
  • ・Input type: Apple HLS

 

【CloudFront distribution details】のラジオボタンを以下にする。

 ・Create a CloudFront distribution for this channel

 ※これを設定すると  CloudFrontをバイパスして直接 MediaPackageのEndpointにアクセスするのを防ぐようになる。

【Create】ボタンをクリックする。

 

・詳細画面

作成すると詳細画面に遷移するので、そこにある【Add endpoints】ボタンを押す。

 

 

・入力フォームが表示されるので以下の内容を入力する。

  • ・ID: MediaPackageSecurityDemoEndPoint001 (任意)
  • ・Description: MediaPackageSecurityDemoEndPoint001 (任意)
  • ・Manifest Name: index (デフォルト)
  • ・Startover window(sec): 未チェック  (デフォルト)
  • ・Time delay (sec):  未チェック (デフォルト)

 

  • ・Type: Apple HLS (デフォルト)
  • ・Segment duration (sec): 6 (デフォルト)
  • ・Live playlist window duration (sec): 60 (デフォルト)

 

 

  • ・Package encryption – No encryption

 

 

  • ・Allow origination:チェック
  • ・Allow all incoming clients:チェック
  • ・Use authorization:チェック
  • ・Secrets role ARN:arn:aws:iam::999999999999:role/MediaPackageCDNAuthRole
  • ・CDN identifier secret:arn:aws:secretsmanager:ap-northeast-1:999999999999:secret:MediaPackage/CDNAuth-001-zeASQh

※【Secrets role ARN】は、Cloud Frontバイパス対応用ロールセクションで作成したARNを指定。

※【CDN identifier secret】は、Cloud Frontバイパス対応用ロールの認証コードセクションで作成したARNを指定

上記入力したら【Save】ボタンをクリックして保存する。

 

・MediaPackage – Channel詳細画面

 

上記で作成したChannelの詳細画面を開く

Inputのセクションを確認する。

 

Inputに2つ、それぞれURL、Username、passwordが設定されている。

以下のMediaLive作成時に指定する事になるので、これらの値を全てメモしておく。

 

 

(4) CloudFront Distributions

コンソールより、CloudFrontにアクセスする。

・CloudFront Distributions一覧より、Media Package作成時に作成したCloudFront Distributionを選択する。

 

・Origins and Orign Groupsタブを選択する

リストに1つレコードがあるので、チェックボックスをチェックして、【Edit】ボタンをクリックする。

 

・Originの修正

Origin Custom Headersに以下を指定する。

 

  • ・Header Name:X-MediaPackage-CDNIdentifier (固定値)
  • ・Value:7f33895c-e8e1-4eb7-9417-1929156a20b0

※【Cloud Frontバイパス対応用ロールの認証コード作成】で生成したUUID version4の値

 

 

(5) MediaLiveの追加

【AWS Elemental MediaLiveの使用開始】ボタンをクリックする。

 

 

左ペインより、【Channels】をクリックする。

 

・Create channel

【Create channel】ボタンをクリックする

 

 

Channel nameを【DemoMediaLiveChannel1】(任意)とする。

【Create role from template】を選択して、【Create IAM role】ボタンを押すと自動でRoleが作成され、【MediaLiveAccessRole】という名前で自動選択される。

 

 

 

Templateに【HTTP live streaming】を選択する。

それ以外はデフォルトのまま、左ペインの Input attachments (0) の横にある【Add】ボタンをクリックする。

画面が遷移し、You don’t have any available inputs to attach とメッセージが表示された画面が表示される。

右上に【Create input】ボタンがあるので、それをクリック。

 

 

Input nameには任意の文字をセットする。

ここでは、Input001ForMediaPackageとしている。

 

 

 

Network modeには、一般公開するつもりなので、【Public】を選択。

 

 

 

 

 

Input security groupには、RTMPを受けるinput側の IPアドレスの制限範囲をCIDR形式で指定する。

ここでは、特にIPアドレス制限は設けないので、0.0.0.0/0 と指定しておく。

【Create input security group】ボタンを押すと、IPアドレス範囲が自動で指定され【Use existing】が選択された状態になる。

 

 

 

Input destinations には、Destination A、Destination Bの2回線分の設定を行う。

Application name and instanceで指定した値は、RTMPのURLの一部になる。

ここまで入力できたら【Create】ボタンを押す。

正常に登録されると、Inputを Attachする画面に戻ってくる。

 

Inputプルダウンには、上記で作成した Input (ここでは、Input001ForMediaPackage)が選択可能になるので、それを選択する。

【Confirm】ボタンを押して、Inputのアタッチを完了する。

 

 

・Create channel (再び)

Inputのアタッチが完了するとチャンネル登録画面に戻ってくる。

左ペインの Output groups (1) の下の、1. TN2224 (HLS)の リンク (赤線の部分) をクリックする。

 

・TN2224

MediaLiveのChannelのOutput側にMediaPackageのChannel、Inputの値を割り当てる。

上記、MediaPackage作成時の InputのURL、Username、password2回線分を、destination A、destination Bそれぞれに割り当てる。

なお、Passwordは、Create parameterを選択して、Nameは任意の文字列で良い。

上記のように設定したら、【Create parameter】ボタンを押す。

※上記例の値は参考例です。

 

destination Bに対しても2回線目の値を設定する。

 

上記のように設定したら、【Create parameter】ボタンを押す。

※上記例の値は参考例です。

 

下段にスクロールしていくと、HLS outputs欄があるので、不要なアウトプットを削除する。

ここでは、Output3、Output4、Output5、Output6、Output7、Output9、Output10を削除する。

この場合は、該当する Outputの右側の ×ボタンを押して削除。

 

ここまでできれば、左ペインの【Create channel】ボタンを押して確定する。

 

 

以上で、設定は全て完了となる。

 

 

実際に、稼働させてみるには、MediaLiveのChannel詳細に移動して、【start】ボタンを押す。

Channel stateが Idle → Starting → Runningに変化し、起動が完了する。

 

 

・MediaLIve > Channels > Inputsの Endpoints

Inputの Application name and instance で指定した値が Endpointになり、ここにストリーミングを流すと配信できる。