AWS Elemental MediaPackageのVODパッケージング機能でHLSマニフェストファイルを操作してみた

ジャストインタイムパッケージングサービスであるAWS Elemental MediaPackageのVODパッケージング機能を使って、マニフェストファイル名の変更、ビットレート順序の変更、最小/最大ビットレートの指定といったHLSマニフェストファイルの操作を行ってみました。
2019.07.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

清水です。先日、下記のエントリにてAWS Elemental MediaPackageのVOD向けJust-in-Timeパッケージング対応のアップデートを紹介しました。

こちらのエントリではMediaPackageのVOD対応ということで、MediaConvertでHLS形式に変換したファイルをMediaPacakgeでJust-in-Timeパッケージングし、HLSの他にmpeg-DASHならびにCMAF(Common Media Application Format)で配信できることを確認しました。

本エントリではこのMediaPackageのVODパッケージング機能について、機能のひとつであるマニフェストファイルの操作に焦点をあててみます。具体的にはHLS形式で準備したVODファイルのマニフェストに対して、(1) マニフェストファイル名の変更、(2) ビットレート順序の変更、(3) 最小/最大ビットレートの指定、をそれぞれ行ってみました。

MediaConvertでHLS形式に変換した状態のマニフェストファイル

まずはMediaConvertでHLS形式に変換した、MediaPacakgeでパッケージング前のマニフェストファイルについて確認してみます。変換方法は以下のエントリの「HLS形式ファイルの準備」に記載したとおりです。MediaConvertでJob templatesのSystem templatesSystem-Ott_Hls_Ts_Avc_Aacを使用してHLS形式に変換しました。

トップレベルマニフェストファイルSample-20190113-1.m3u8の内容は下記です。

Sample-20190113-1.m3u8

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:BANDWIDTH=620437,AVERAGE-BANDWIDTH=493605,CODECS="avc1.4d401f,mp4a.40.5",RESOLUTION=480x270,FRAME-RATE=14.985
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=854658,AVERAGE-BANDWIDTH=712127,CODECS="avc1.4d401f,mp4a.40.5",RESOLUTION=640x360,FRAME-RATE=29.970
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_640x360p_30Hz_600Kbps.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1608153,AVERAGE-BANDWIDTH=1358561,CODECS="avc1.4d401f,mp4a.40.5",RESOLUTION=640x360,FRAME-RATE=29.970
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_640x360p_30Hz_1200Kbps.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4438743,AVERAGE-BANDWIDTH=3699700,CODECS="avc1.640028,mp4a.40.5",RESOLUTION=960x540,FRAME-RATE=29.970
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_960x540p_30Hz_3500Kbps.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4583263,AVERAGE-BANDWIDTH=3690942,CODECS="avc1.640028,mp4a.40.5",RESOLUTION=1280x720,FRAME-RATE=29.970
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1280x720p_30Hz_3500Kbps.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=6519327,AVERAGE-BANDWIDTH=5222857,CODECS="avc1.640028,mp4a.40.5",RESOLUTION=1280x720,FRAME-RATE=29.970
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1280x720p_30Hz_5000Kbps.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=8171335,AVERAGE-BANDWIDTH=6742975,CODECS="avc1.640028,mp4a.40.5",RESOLUTION=1280x720,FRAME-RATE=29.970
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1280x720p_30Hz_6500Kbps.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=10633151,AVERAGE-BANDWIDTH=8803216,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=29.970
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps.m3u8

以下のように、ビットレートの低い順から8つのABR(Adaptive Bitrate)で構成されているマニフェストファイルであることが確認できますね。(マニフェストファイル名からビットレートや解像度も確認できます。)

# マニフェストファイル名
1 Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps.m3u8
2 Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_640x360p_30Hz_600Kbps.m3u8
3 Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_640x360p_30Hz_1200Kbps.m3u8
4 Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_960x540p_30Hz_3500Kbps.m3u8
5 Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1280x720p_30Hz_3500Kbps.m3u8
6 Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1280x720p_30Hz_5000Kbps.m3u8
7 Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1280x720p_30Hz_6500Kbps.m3u8
8 Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps.m3u8

最もビットレートの低い、Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps.m3u8を確認してみると、以下のように3秒ごとに分割されたtsファイルで構成されていることが確認できます。

Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps.m3u8

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00001.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00002.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00003.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00004.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00005.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00006.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00007.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00008.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00009.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00010.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00011.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00012.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00013.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00014.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00015.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00016.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00017.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00018.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00019.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00020.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00021.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00022.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00023.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00024.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00025.ts
#EXTINF:1,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_480x270p_15Hz_400Kbps_00026.ts
#EXT-X-ENDLIST

他のビットレートについても同様で、3秒ごとのtsファイルで構成されています。最もビットレートの高いSample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps.m3u8を確認してみると以下となります。

Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps.m3u8

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00001.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00002.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00003.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00004.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00005.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00006.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00007.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00008.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00009.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00010.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00011.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00012.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00013.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00014.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00015.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00016.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00017.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00018.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00019.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00020.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00021.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00022.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00023.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00024.ts
#EXTINF:3,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00025.ts
#EXTINF:1,
Sample-20190113-1_Ott_Hls_Ts_Avc_Aac_16x9_1920x1080p_30Hz_8500Kbps_00026.ts
#EXT-X-ENDLIST

MediaPackageのデフォルト設定のHLSマニフェストファイル

ではここから、MediaPackageでパッケージングした場合のHLSマニフェストファイルを確認していきます。まずはMediaPackageでPackage groups作成、Package typeにApple HLSを選択したときのデフォルト設定のマニフェスファイルを確認してみます。Management Consoleで下記画面のように設定しました。

Packageing groups作成後、先ほどのMediaConvertで変換したSample-20190113-1.m3u8を指定してAssetsを作成、MediaPackageのegressポイントにアクセスしてマニフェスファイルを確認します。

$ curl https://ab29fc76d7e8915fxxxxxxxxxxxxxxxx.egress.mediapackage-vod.ap-northeast-1.amazonaws.com/out/v1/edf3dff411504fecba3078d74c98b97e/9b7d39b0dfcf47be98eadc5994c8a0df/e74abe98da694177aa6a03f8377154b0/index.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:BANDWIDTH=585556,AVERAGE-BANDWIDTH=511949,RESOLUTION=480x270,FRAME-RATE=14.985,CODECS="avc1.4D401F,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=849556,AVERAGE-BANDWIDTH=731949,RESOLUTION=640x360,FRAME-RATE=29.970,CODECS="avc1.4D401F,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1668972,AVERAGE-BANDWIDTH=1426218,RESOLUTION=640x360,FRAME-RATE=29.970,CODECS="avc1.4D401F,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_3.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4704946,AVERAGE-BANDWIDTH=3956183,RESOLUTION=960x540,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4704946,AVERAGE-BANDWIDTH=3956183,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_5.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=6684972,AVERAGE-BANDWIDTH=5606218,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_6.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=8664946,AVERAGE-BANDWIDTH=7256183,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_7.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=11332996,AVERAGE-BANDWIDTH=9491249,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.2"
65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_8.m3u8

URLは変わりますが、8つのビットレートで構成されるABRである点、またビットレートの低い順から並んでいる点などは変わりません。ただし、BANDWIDTHなどメタ情報については値や順序が変わっていることが確認できます。

続いて最もビットレートの低い、index_1.m3u8を確認してみます。MediaConvertで変換した状態では3秒ごとに分割されたセグメントファイルでしたが、MediaPackageでは6秒ごとに分割されたセグメントファイルであることがわかります。(これは先ほどのManagement Console画面でSegument duration6secのデフォルト値で設定していたことと合致します。)

 $ curl https://ab29fc76d7e8915fxxxxxxxxxxxxxxxx.egress.mediapackage-vod.ap-northeast-1.amazonaws.com/out/v1/edf3dff411504fecba3078d74c98b97e/9b7d39b0dfcf47be98eadc5994c8a0df/e74abe98da694177aa6a03f8377154b0/index_1.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_1_0.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_1_1.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_1_2.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_1_3.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_1_4.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_1_5.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_1_6.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_1_7.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_1_8.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_1_9.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_1_10.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_1_11.ts
#EXTINF:3.804,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_1_12.ts
#EXT-X-ENDLIST

最もビットレートの高いマニフェストファイルindex_8.m3u8についても確認してみます。こちらも6秒ごとに分割されたセグメントファイルとなっています。

 $ curl https://ab29fc76d7e8915fxxxxxxxxxxxxxxxx.egress.mediapackage-vod.ap-northeast-1.amazonaws.com/out/v1/edf3dff411504fecba3078d74c98b97e/9b7d39b0dfcf47be98eadc5994c8a0df/e74abe98da694177aa6a03f8377154b0/index_8.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_8_0.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_8_1.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_8_2.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_8_3.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_8_4.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_8_5.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_8_6.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_8_7.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_8_8.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_8_9.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_8_10.ts
#EXTINF:6.006,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_8_11.ts
#EXTINF:3.804,
../../../65dcec98e2214d96a8804bae4e1ee1e0/68e0cf62fff64f9e9655252b376ae430/index_8_12.ts
#EXT-X-ENDLIST

MediaPackageでマニフェストファイル名を変更

続いてMediaPackageでマニフェストファイル名を変換してみます。Package configurationsの設定画面、Manifest settingsManifest nameが設定箇所ですね。上記のデフォルト設定の場合の通り、何も指定しなければMediaPackageでパッケージングする際にトップレベルマニフェストファイル名はindex.m3u8、続く階層のABR用各マニフェストファイルはindex_?.m3u8となっていました。今回はManifest nameとしてmasterと入力してみます。

Assetsを作成してManagement ConsoleでエンドポイントとなるURLを確認してみます。以下のように、デフォルトだったindex.m3u8ではなくmaster.m3u8となっていることが確認できますね。

https://ab29fc76d7e8915fxxxxxxxxxxxxxxxx.egress.mediapackage-vod.ap-northeast-1.amazonaws.com/out/v1/edf3dff411504fecba3078d74c98b97e/4efeb74faa7148cb81bf496d9bb461c0/abaefc902d6446df8819d01158221e27/master.m3u8

実際のトップレベルマニフェストファイルの中身も確認してみます。各ABR用のマニフェストファイルについてもmaster_?.m3u8の形式となっています。

 $ curl https://ab29fc76d7e8915fxxxxxxxxxxxxxxxx.egress.mediapackage-vod.ap-northeast-1.amazonaws.com/out/v1/edf3dff411504fecba3078d74c98b97e/4efeb74faa7148cb81bf496d9bb461c0/abaefc902d6446df8819d01158221e27/master.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:BANDWIDTH=585556,AVERAGE-BANDWIDTH=511949,RESOLUTION=480x270,FRAME-RATE=14.985,CODECS="avc1.4D401F,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/712634bb77dd43cbbf682b8155263fdf/master_1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=849556,AVERAGE-BANDWIDTH=731949,RESOLUTION=640x360,FRAME-RATE=29.970,CODECS="avc1.4D401F,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/712634bb77dd43cbbf682b8155263fdf/master_2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1668972,AVERAGE-BANDWIDTH=1426218,RESOLUTION=640x360,FRAME-RATE=29.970,CODECS="avc1.4D401F,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/712634bb77dd43cbbf682b8155263fdf/master_3.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4704946,AVERAGE-BANDWIDTH=3956183,RESOLUTION=960x540,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/712634bb77dd43cbbf682b8155263fdf/master_4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4704946,AVERAGE-BANDWIDTH=3956183,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/712634bb77dd43cbbf682b8155263fdf/master_5.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=6684972,AVERAGE-BANDWIDTH=5606218,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/712634bb77dd43cbbf682b8155263fdf/master_6.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=8664946,AVERAGE-BANDWIDTH=7256183,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/712634bb77dd43cbbf682b8155263fdf/master_7.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=11332996,AVERAGE-BANDWIDTH=9491249,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.2"
65dcec98e2214d96a8804bae4e1ee1e0/712634bb77dd43cbbf682b8155263fdf/master_8.m3u8

MediaPackageでBitrate orderを変更

今度はMediaPackageでABRのビットレート順序(Bitrate order)を変更してみます。Packaging configuration作成時、Stream selectionを有効にし、Bitrate order部分でAscending(昇順)かDescending(降順)かを選択します。

Ascending(昇順)

まずはAscending(昇順)にした場合を確認してみます。設定画面は上記Management Consoleの通りとなります。Assets作成後にエンドポイントURLから返されるレスポンスは下記の通りです。もともとの(MediaConvertでHLS形式に変換した段階での)トップレベルマニフェストファイルが昇順であったため、デフォルトと比べてURLのパス部分に変更はあれどビットレートの順序としては変更ありません。

 $ curl https://ab29fc76d7e8915fxxxxxxxxxxxxxxxx.egress.mediapackage-vod.ap-northeast-1.amazonaws.com/out/v1/edf3dff411504fecba3078d74c98b97e/324b9ae63b7f4551900777c9ee0b1e4c/1294e0964fce4128b82552541fb82b59/index.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:BANDWIDTH=585556,AVERAGE-BANDWIDTH=511949,RESOLUTION=480x270,FRAME-RATE=14.985,CODECS="avc1.4D401F,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/09cb2b3d77d4472c954aac793737775b/index_1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=849556,AVERAGE-BANDWIDTH=731949,RESOLUTION=640x360,FRAME-RATE=29.970,CODECS="avc1.4D401F,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/09cb2b3d77d4472c954aac793737775b/index_2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1668972,AVERAGE-BANDWIDTH=1426218,RESOLUTION=640x360,FRAME-RATE=29.970,CODECS="avc1.4D401F,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/09cb2b3d77d4472c954aac793737775b/index_3.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4704946,AVERAGE-BANDWIDTH=3956183,RESOLUTION=960x540,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/09cb2b3d77d4472c954aac793737775b/index_4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4704946,AVERAGE-BANDWIDTH=3956183,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/09cb2b3d77d4472c954aac793737775b/index_5.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=6684972,AVERAGE-BANDWIDTH=5606218,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/09cb2b3d77d4472c954aac793737775b/index_6.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=8664946,AVERAGE-BANDWIDTH=7256183,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/09cb2b3d77d4472c954aac793737775b/index_7.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=11332996,AVERAGE-BANDWIDTH=9491249,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.2"
65dcec98e2214d96a8804bae4e1ee1e0/09cb2b3d77d4472c954aac793737775b/index_8.m3u8

Descending(降順)

続いて降順に設定した場合も確認してみます。Management Consoleで下記のようにBitrate orderDescendingを選択します。

MediaPackageで返されるトップレベルマニフェストファイルは下記のようになりました。ビットレート順序がもともとの(MediaConvertで変換した段階での)昇順から、降順に変換されていることがわかります。

 $ curl https://ab29fc76d7e8915fxxxxxxxxxxxxxxxx.egress.mediapackage-vod.ap-northeast-1.amazonaws.com/out/v1/edf3dff411504fecba3078d74c98b97e/20d09455305b4e71b92768c2ec18bc27/aff7eb72ed784c75ab0aa163a6700116/index.m3u8

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:BANDWIDTH=11332996,AVERAGE-BANDWIDTH=9491249,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.2"
65dcec98e2214d96a8804bae4e1ee1e0/564364353f694ac3aa53bdd5ef85b6d9/index_1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=8664946,AVERAGE-BANDWIDTH=7256183,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/564364353f694ac3aa53bdd5ef85b6d9/index_2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=6684972,AVERAGE-BANDWIDTH=5606218,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/564364353f694ac3aa53bdd5ef85b6d9/index_3.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4704946,AVERAGE-BANDWIDTH=3956183,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/564364353f694ac3aa53bdd5ef85b6d9/index_4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4704946,AVERAGE-BANDWIDTH=3956183,RESOLUTION=960x540,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/564364353f694ac3aa53bdd5ef85b6d9/index_5.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1668972,AVERAGE-BANDWIDTH=1426218,RESOLUTION=640x360,FRAME-RATE=29.970,CODECS="avc1.4D401F,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/564364353f694ac3aa53bdd5ef85b6d9/index_6.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=849556,AVERAGE-BANDWIDTH=731949,RESOLUTION=640x360,FRAME-RATE=29.970,CODECS="avc1.4D401F,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/564364353f694ac3aa53bdd5ef85b6d9/index_7.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=585556,AVERAGE-BANDWIDTH=511949,RESOLUTION=480x270,FRAME-RATE=14.985,CODECS="avc1.4D401F,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/564364353f694ac3aa53bdd5ef85b6d9/index_8.m3u8

MediaPackageで最小/最大ビットレートの指定

MediaPackageでは最小/最大ビットレートの指定も可能です。こちらもPackaging configurationのStream selectionの項目で設定します。

最小ビットレート指定

最小ビットレートを2Mbps(=2,097,152bps)に指定してみます。Min video bitrate(bit/s)のチェックボックスをonにして、最小ビットレート数値を入力します。

Assets作成後ににエンドポイントURLから返されるレスポンスは下記の通りです。2Mbps以下であった各ビットレート用の3つのマニフェストファイルが割愛され、合計で5つのビットレートからなるトップレベルマニフェストファイルとなっていることが確認できます。

 $ curl https://ab29fc76d7e8915fxxxxxxxxxxxxxxxx.egress.mediapackage-vod.ap-northeast-1.amazonaws.com/out/v1/edf3dff411504fecba3078d74c98b97e/adb60734949a477f9c4698c152e167ca/6aa08bf8d90c4c948d9df387533ddb9a/index.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:BANDWIDTH=4704946,AVERAGE-BANDWIDTH=3956183,RESOLUTION=960x540,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/f259849595aa4659bae4642556b30371/index_1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4704946,AVERAGE-BANDWIDTH=3956183,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/f259849595aa4659bae4642556b30371/index_2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=6684972,AVERAGE-BANDWIDTH=5606218,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/f259849595aa4659bae4642556b30371/index_3.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=8664946,AVERAGE-BANDWIDTH=7256183,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/f259849595aa4659bae4642556b30371/index_4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=11332996,AVERAGE-BANDWIDTH=9491249,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.2"
65dcec98e2214d96a8804bae4e1ee1e0/f259849595aa4659bae4642556b30371/index_5.m3u8

最大ビットレート指定

続いて最大ビットレートを5Mbps(=5,242,880bps)に指定してみます。Max video bitrate(bit/s)のチェックボックスをonにして最大ビットレート数値を入力します。

MediaPackageで返されるトップレベルマニフェストファイルは下記のようになりました。5Mbpsより大きいビットレートとなるマニフェストファイルがカットされ、合計6つのビットレートからなるトップレベルマニフェストファイルとなっていることが確認できます。なお「5Mbpsより大きい」はマニフェストファイル中のビットレート情報(BANDWIDTHやAVERAGE-BANDWIDTH)ではなく、動画セグメントファイル自体のビットレートで判断しているのかと推測できます。

 $ curl https://ab29fc76d7e8915fxxxxxxxxxxxxxxxx.egress.mediapackage-vod.ap-northeast-1.amazonaws.com/out/v1/edf3dff411504fecba3078d74c98b97e/e0ac949925b5479aabd36cee7c8feefa/1af034e67e654f838706c47f9992a9d8/index.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:BANDWIDTH=585556,AVERAGE-BANDWIDTH=511949,RESOLUTION=480x270,FRAME-RATE=14.985,CODECS="avc1.4D401F,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/7f4d65f838694d349928294eb4df2483/index_1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=849556,AVERAGE-BANDWIDTH=731949,RESOLUTION=640x360,FRAME-RATE=29.970,CODECS="avc1.4D401F,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/7f4d65f838694d349928294eb4df2483/index_2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1668972,AVERAGE-BANDWIDTH=1426218,RESOLUTION=640x360,FRAME-RATE=29.970,CODECS="avc1.4D401F,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/7f4d65f838694d349928294eb4df2483/index_3.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4704946,AVERAGE-BANDWIDTH=3956183,RESOLUTION=960x540,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/7f4d65f838694d349928294eb4df2483/index_4.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4704946,AVERAGE-BANDWIDTH=3956183,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/7f4d65f838694d349928294eb4df2483/index_5.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=6684972,AVERAGE-BANDWIDTH=5606218,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640028,mp4a.40.5"
65dcec98e2214d96a8804bae4e1ee1e0/7f4d65f838694d349928294eb4df2483/index_6.m3u8

まとめ

ジャストインタイムパッケージングサービスであるAWS Elemental MediaPackageのVODパッケージング機能を使って、HLSマニフェストファイルを操作してみました。マニフェストファイル名の変更、ビットレート順序(Bitrate order)の変更、最小/最大ビットレートの指定、それぞれを行いMediaPackageで生成されるマニフェストファイルを確認しました。

このようなマニフェストファイルの変更(特にビットレート順序変更や最小/最大ビットレートの指定)を行いたい場合、MediaConvertでの再変換、もしくはMediaConvertで変換して得られたマニフェストファイルに対して解析して処理を行う、などが必要でした。パッケージングサービスであるMediaPackageがVODにも対応したことで、これらの処理をMediaPackageの設定を使って容易に変更ができるようになりましたね。HLSの他、対応しているPackage typeであるmpeg-DASH、Smooth Streaming、CMAFでも同様のことが可能かと思います。引き続き、AWS Elemental MediaPackageはじめとしたAWS Media Servicesの機能詳細を追っていきたいと思います。