[アップデート] AWS Elemental MediaPackageがVOD(Video On Demand)向けのJust-in-Timeパッケージングをサポートしていました!
はじめに
清水です。AWS Media Servicesの細かなアップデートを追っていくコーナーです。本エントリーでお伝えするのはこちら、動画配信におけるジャストインタイムパッケージングサービスであるAWS Elemental MediaPackage、これまではライブ配信だけの対応でしたが、今回のアップデートで、VOD(Video On Demand)配信に対してのJust-in-Timeパッケージングにも対応しました。(2019/05/17にポストされたアップデート内容となります。)
- AWS Elemental MediaPackage Adds Support for Just-in-Time Packaging for Video On Demand
- AWS Elemental MediaPackage、Video On Demand 向けの Just-in-Time Packaging のサポートを追加
AWS Elemental MediaPackageではJust-in-Timeでのパッケージング、つまり複数のストリーム形式での配信やビットレートラダー変更などマニフェストファイルの変更、DRM暗号化などが可能です。2017/11のサービスリリース当時はライブ配信のみに対応していましたが、今回のアップデートでVOD配信にも対応したこととなります。AWS Elemental MediaPackageのサービスページには以下の図が掲載されています。S3に格納した配信形式のファイルのパッケージングを行い、多様な形式でユーザへの配信ができるようです。本エントリではこのAWS Elemental MediaPackageのVODパッケージング機能について確認してみます。
Video On Demand (VOD) Packaging
https://aws.amazon.com/mediapackage/
IAMロールの準備
MediaPackageのVODパッケージング機能では、MediaPackageからS3に格納したオブジェクトにアクセスを行います。そのためMediaPackage側にS3へのアクセス権をもたせたIAMロールをアタッチする必要があります。(具体的にはMediaPackageのAssets
という要素にIAMロールを紐づけます。)ここではまずその準備として、S3へのアクセス権を持つIAMロールを作成します。
手順は以下のAWS ドキュメントを参考に行いました。
まずはIAMのマネジメントコンソール、ポリシー画面から、[Create policy]でIAMポリシーを作成します。JSON編集画面で以下を入力します。{bucket_name}
はMediaPackageがアクセスするS3バケット名に置き換えてください。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "s3:GetBucketLocation", "s3:GetBucketRequestPayment" ], "Resource": [ "arn:aws:s3:::{bucket_name}/*", "arn:aws:s3:::{bucket_name}" ], "Effect": "Allow" } ] }
今回はポリシー名をMediaPackageVoD-Policy
としました。ポリシー名などを入力、確認のうえ[Create policy]ボタンでIAMポリシーを作成します。
続いてIAMロールを作成します。こちらもIAMマネジメントコンソール、ロールの画面から[Create role]で進みます。現時点でロール作成時に信頼済みエンティティとしてAWS Elemental MediaPackageが選択できないため、一度EC2を選択しておきます。ロールの作成完了後に信頼関係を編集します。
ポリシー選択画面では、さきほど作成したポリシーMediaPackageVoD-Policy
を選択します。
ロール名などを入力して、[Create role]でIAMロールを作成します。今回はロール名をMediaPackageVoD-Role
としました。
IAMロールが作成できたら、さきほどの信頼関係の編集を行います。Trust relationships(信頼関係)のタブから編集画面へ遷移し、JSON中の"Service": "ec2.amazonaws.com"
の箇所を"Service": "mediapackage.amazonaws.com"
とします。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" // ここを"mediapackage.amazonaws.com"に }, "Action": "sts:AssumeRole" } ] }
以上でIAMロールが準備できました。
HLS形式ファイルの準備
続いて、MediaPackageの入力となるHLS形式のファイルを準備します。今回はiPhoneで撮影した動画(拡張子mov、QuickTime形式)をAWS Elemental MediaConvertを使って変換しました。
まずはファイルをS3にアップロードします。ファイル名が「Sample-20190113-1.mov」のものですね。
続いてMediaConvertでHLS形式に変換します。今回はJob templatesのSystem templatesSystem-Ott_Hls_Ts_Avc_Aac
を使用します。
Job template details画面の[Create job]ボタンからJobを作成していきます。Inputsとして先程S3にアップロードした動画ファイルを指定、またOutput groupsの指定として出力先S3バケット/パスを指定します。最後に、Job settingsの箇所で適切なIAM roleを指定してJobを作成します。
Jobが完了したあとにS3バケットを確認すると、以下のようにHLSファイル(複数のm3u8ファイルと複数のtsファイル)ができていました。このディレクトリ内Sample-20190113-1.m3u8
がトップレベルマニフェストファイルです。今回はこのSample-20190113-1.m3u8
をMediaPackageでパッケージングを行う対象のマニフェストファイルとします。
Packaging groupsの作成
IAMロールとHLS形式のファイルの準備ができたら、実際にMediaPakcageでVODパッケージングを行う設定に進みます。まずはMediaPackageでPackaging groupsを作成していきます。マネージメントコンソールを開くと、左側メニュー部分で Video on demand の項目が追加されていますね!ここからPackaging groupsの項目で新規作成を進めます。
Idを入力して、[Create]しましょう。
Packaging configurations管理画面(Mange packaging configurations)に遷移します。ここでconfigを追加、設定していきます。New_config_1が作成されていますが、この名称を変更してhls-config
としました。Package typeはApple HLS
のままとし、ほか項目もデフォルトのままとしました。
続いて、Package configurationsのリスト上部、[Add]ボタンから[New config]で新しいconfigを追加します。
Idをdash-config
とし、Package typeはDASH-ISO
としました。また同様に、Id cmaf-config
を作成、Package typeはCommon Media Application Format (CMAF)
としました。[Save]ボタンでPackaging configurationsを保存します。
Assetsの作成
続いてAssetsの作成です。右側のメニュー、Video on demand の Assets から、[Ingest asset]ボタンで進みます。
Assets accessでは、さきほどHLS形式に変換したファイルが格納されているS3バケットのバケット名、またそのS3バケットにアクセス権を持つIAMロールを指定します。今回IAMロールは本エントリ冒頭で作成したMediaPackageVoD-Role
を使用します。
Asset detailsではS3バケット内のm3u8ファイルへのパスを入力します。(今回はSample-20190113-1.m3u8
へのパスとなります。)Idは自動的に入力されたSample-20190113-1
のままとしています。
Packaging settingではさきほど作成したPackaging group、MediaPackage-VoD-Packaging-group
を選択します。[Ingest assets]ボタンで進みます。
Assetsが作成できました!
配信の確認
Assetsが作成できたら、実際にMediaPackageのJust-In-timeでのパッケージングによる配信について確認してみましょう。動画配信を行う場合、VODでもAmazon CloudFrontなどCDNを経由したほうがメリットがありますが、今回は検証目的としてMediaPackageのegressポイントに直接アクセスして確認します。
マネジメントコンソールのAssets一覧画面から、Id部分のリンクでAssetsの詳細ページに遷移します。ここでPlayback detailsとして、各configurationに応じたegressエンドポイントが表示されています。
この各エンドポイントを再生Playerから参照してみます。今回再生Playerは以下URLのVideoJS HTTP Streaming(VHS)を使用しました。
Video URLにMediaPackageのエンドポイントを入力、[Load]ボタンを押して再生マークをクリックすることで再生が始まりますが、以下の点に注意しましょう。
- Package type
Apple HLS
(今回ならばhls-config)またはPackage typeCommon Media Application Format (CMAF)
(今回ならばcmaf-config)の場合 - Mimetype:を
application/x-mpegURL
に - Package type
DASH-ISO
(今回ならばdash-config)の場合 - Mimetype:を
application/dash+xml
に
以下に実際の例として、dash-config(Package type DASH-ISO
)のエンドポイント(拡張子.mpd)をVHSのVideo URLに入力、MimeTypeでapplication/dash+xml
を選択して再生してみたようすを掲示します。Chromeのデバックモードを用いて確認すると、index.mpdファイルに始まり、mp4ファイルが次々と読み込まれていることがわかりますね。
まとめ
動画配信におけるジャストインタイムパッケージングサービスであるAWS Elemental MediaPackageの新機能、VOD(Video On Demand)配信に対してのJust-in-Timeパッケージングについて確認してみました。今回はパッケージング機能のひとつとして、HLS形式のファイルをmpeg-DASHまたはCMAFで配信することを扱ってみました。別途変換済みのファイルを保持することなく多様な配信形式に対応することで、サポート対象デバイスを拡大しつつ、またストレージコストなどが節約できますね。その他の機能、ビットレートラダー変更やDRM暗号化への対応でも威力を発揮しそうです。大変うれしいアップデートだと思いました!引き続き、AWS Elemental MediaPackageをはじめとしたAWS Media Servicesのアップデートに注目していきたいと思います!