AWS Elemental MediaPackageのHarvest JobでDASHエンドポイントからVODを作成してみた
はじめに
清水です。AWS Elemental MediaPackageでライブ配信動画からVODクリップを作成することができるLive-to-VOD (Harvest Job)機能、2019年10月のリリース時はMediaPackage ChannelのエンドポイントはHLS形式である必要がありました。
MediaPackageのユーザガイドを確認していたところ、ドキュメント履歴にこのlive-to-VOD機能でHLSエンドポイントに加え、DASHエンドポイントもサポートされた旨記載がありました。2021年5月14日付のドキュメントアップデートです。本エントリでは実際にMediaPackage ChannelのDASHエンドポイントを使ってLive-to-VOD機能を使ったVODクリップを作成してみたのでまとめてみたいと思います。
Harvest Job機能を使う上での準備
まずはMediaPackageのHarvest Job機能を使う上で必要な設定について確認しておきます。ユーザガイドにも記載がありますが、Harvest Job機能(Live-to-VODアセットの作成)ではMediaPackageからAmazon S3バケットへのアクセスを許可する必要があります。
具体的には、Harvest Jobで必要なS3へのアクセス権限を記載したIAMポリシーを作成(Policy for live-to-VOD workflows
)して、IAMロールに紐付けます。このIAMロールは信頼ポリシー(信頼関係)で"Service": "mediapackage.amazonaws.com"
をPrincipalに持つよう設定します。詳細はMediaPackageユーザガイド「Allowing AWS Elemental MediaPackage to access other AWS services
」を参照ください。また実際に設定した例をHLSエンドポイントを用いたHarvest Jobをまとめたエントリに記載しています。本エントリではこのHLSエンドポイント編で作成したIAMロールMediaPackageLivetoVOD-Role
を使用します。
DASHエンドポイントでHarvest Jobをやってみた
ライブ配信開始まで
それでは実際にMediaPackage ChannelのDASHエンドポイントを使ったHarvest Job、ライブ配信動画からのVODクリップの作成を行なってみます。Harvest Job実行の前提としてMediaPackageでDASHエンドポイントを使ったライブ配信を実施している必要があります。まずはこの設定として、MediaPackageでDASHエンドポイントのChannelを作成、そしてライブ配信のためのAWS Elemental MediaLiveの環境も準備します。MediaLiveについてはWorkflow Wizardにより環境を準備します。この際にMediaPackageについては既存のChannelを使用するよう設定しました。
以下、設定のポイントをまとめていきます。
MediaPackage Channel作成を行う際、CloudFrontディストリビューションも合わせて作成することができますが、今回はHarvest Job検証目的のためCloudFrontディストリビューションは作成せずに進めます。アクセスログも設定していません。
Channel作成後、DASH (DASH-ISO Type)のEndpointを作成します。Harvest Job実行時にはMediaPackageでタイムシフト再生を可能にするオプションであるStartover windowを設定する必要があります。またHarvest Jobの開始と終了時間ははStartover windowに収める必要があります。今回はStartover windowを3600秒(=60分)として、この間でVODクリップを作成するようにします。
またDASHエンドポイントではsegment template formatとしてNumber with timelineかTime with timelineである必要があるようです。(Packager settings fields )今回はデフォルトのNumber with timelineで進めます。
HLSエンドポイントでのHarvest Job同様、DASHエンドポイントでもHarvest Jobの際のコンテンツの暗号化はサポートされていませんので注意しましょう。これらはMediaPackageユーザガイドのLive-to-VOD requirementsに記載がありますので、事前に確認しておきましょう。
MediaLiveのWorkflow Wizard、Step 3のAdd video outputsの設定ではoutput groupsにMediaPackageを選択します。MediaPackage destinationの設定では「I already have a MediaPackage channel I want to use」を選択、先ほど作成したd ASHエンドポイントを持つMediaPackage Channelを選択します。
MediaLive Workflowが作成できたら、MediaLive Channelの設定を1箇所だけ変更しておきます。変更箇所はGeneral settingsのTimecode Configurationです。SourceがデフォルトではEMBEDDED
となっているので、これをSYSTEMCLOCK
に変更しておきます。今回使用したストリーミングソフトウェア(iPhone 6s上でZixi ONAirを使用しました)ではタイムコードを埋め込まないようでEMBEDDED
のままだとZEROBASED
扱いとなりMediaPackageのタイムシフトやHarverst Jobがうまく動作しないようでした。(Harvest Jobが失敗しました。)このタイムコード設定をSYSTEMCLOCK
に変更することでHarvest Jobが成功しました。
準備ができたら、MediaLive WorkflowをStartさせ、ライブ配信を開始しておきます。Dash JavaScript Playerで視聴を確認しました。
Harvest Jobを使ってVODクリップの作成
ライブ配信の視聴確認ができたら、続いてHarvest Jobでライブ配信動画からVODクリップを作成してみます。Create harvest job画面、Basic detailsにてIDとして任意の文字列を入力します。Origin endpointは先ほど作成したDASHエンドポイントを選択します。Start/End date and timeはLocal timeを使い指定しました。
Destinationの項目にて、事前に準備しておいたIAMロールMediaPackageLivetoVOD-Role
(実際はこのエントリで作成したもの)を指定します。S3 bucket nameではHarvest Jobで作成するVODクリップの出力先となるS3バケットを指定しますが、IAMロールでアクセス権限が与えられているバケットであることに注意しましょう。Manifest keyとしてS3バケット内でのパスとベースファイル名を指定します。DASHですので拡張子.mpd
で終わる必要があります。
Harvest Jobが作成できました。作成直後はStatusがIn progressで処理中です。
しばらくするとStatusがSucceededになりました。Harvest Job完了です。
VODクリップの出力先となるS3バケットも確認してみましょう。以下のようにDASH形式でのVODクリップが作成されています。VODクリップの時間は2分としましたが、ABR (Adaptive Bit Rate)やVideoとAudioでファイルが異なることもあり、なかなかのファイル数になりましたね。497個だそうです。
作成されたVODクリップの確認として、S3バケットを公開設定としDash JavaScript Playerを使って再生してみます。Harvest Job実行時に指定したManifest keyをファイル名へのパスとして入力して[Load]を押しましょう。VODクリップの再生がはじまりました。
まとめ
AWS Elemental MediaPackageでライブ配信動画からVODクリップを作成できるLive-to-VOD (Harvest Job)機能で、DASHエンドポイントからVODクリップを作成してみました。これまではHLSエンドポイントのみ対応しており、作成されるVODクリップもHLS形式でした。DASHエンドポイントがサポートに加わり、DASH形式でのVODクリップが作成できるようになったのは嬉しいアップデートかと思います。