こんにちは!
今月発売の某誌に寄稿する記事がようやっと書き終わって開放感に浸っている streampack 木村です。

ちょっと時間が経ってしまっていますが AWS MediaConvert と MediaPackage が CMAF に対応しましたね。

AWS Elemental MediaConvert が、CMAF 出力を追加

これで以前に Bento4 で作成したのと同じことが MediaConvert でもできるようになりました。

<以前の記事>
HLS と MPEG-DASH でメディアを共通化してみる

そこで今回は MediaConvert を使って CMAF を作成し、HLS と DASH の両方で再生可能か確認してみます。

MediaConvert

ジョブの作成

MediaConvert のコンソールからジョブの作成をクリックします。

入力設定

S3 にアップした適当なファイルを指定します。
テストなのでその他の設定は弄りません。

出力設定

出力グループ追加 して CMAF を選択します。

出力として Output1Output2 の2つが用意されます。
ここが従来の HLS との大きな違いで、映像のみのファイルと音声のみのファイルをそれぞれ作成します。

その他設定項目の説明と留意点です。

項目 設定値 備考
カスタムグループ名 任意 無くても可
送信先 S3のどっか
セグメントの制御 Single File or Segmented Files 単一ファイルか分割ファイルかを選択
フラグメントの長さ(秒) Fragmented MP4(fMP4)にするのでフラグメントの長さを指定
セグメントの長さ(秒) セグメント長を指定
HLS マニフェストの書き込み 有効化でマニフェスト生成
DASH マニフェストの書き込み 有効化でマニフェスト生成
Output1 名前修飾子 任意の値 Output2 とは異なる名前を設定すること
Output2 名前修飾子 任意の値 Output1 とは異なる名前を設定すること

注:Output 名前修飾子ですが 1 と 2 で必ず異なる名前を設定する必要があります。
両方未設定もダメで、そうすると、HLS 出力で映像と音声のプレイリスト名がコンフリクトして一つしか生成されなくなります

次に Output1Output2 の中身ですが、テストなので何もいじらずにデフォルトのままで H.264 と AAC で出力させます。

作成 を押して待つこと数分。
S3 に以下のファイルが出力されます。

$ aws s3 ls s3://xxxx/encoded/cmaf/bbb1500/
2018-07-03 15:00:36          0
2018-07-12 17:03:45        402 bigbuckbunny_1500.m3u8
2018-07-12 17:03:46       1367 bigbuckbunny_1500.mpd
2018-07-12 17:01:06    7316253 bigbuckbunny_1500audio.cmfa
2018-07-12 17:03:45       5763 bigbuckbunny_1500audio.m3u8
2018-07-12 17:01:06  372919133 bigbuckbunny_1500video.cmfv
2018-07-12 17:03:44       6069 bigbuckbunny_1500video.m3u8

.cmfv が映像ファイル、.cmfa が音声ファイルになります。
m3u8mpd の2つのマニフェストファイルが生成されているのが確認できますね。

視聴

S3のコンテンツを Public にして HLS と DASH をそれぞれ視聴してみます。

HLS

Mac の Safari の URL 欄に以下を入力

https://s3-ap-northeast-1.amazonaws.com/{S3 bucket}/encoded/cmaf/bbb1500/bigbuckbunny_1500.m3u8

DASH

DASH IF Reference Player を使って再生します。

http://reference.dashif.org/dash.js/v2.8.0/samples/dash-if-reference-player/index.html

https://s3-ap-northeast-1.amazonaws.com/{S3 bucket}/encoded/cmaf/bbb1500/bigbuckbunny_1500.mpd

結果

両方共問題なく再生できました。

(c) copyright 2008, Blender Foundation / www.bigbuckbunny.org

注: DASH IF Reference Player で再生する DASH コンテンツは、映像ファイルと音声ファイルが独立している必要があり、映像音声が混成されたメディアファイルを再生するとエラーになります。
MediaConvert で 出力DASH にするとデフォルトでは映像音声混成の単一ファイルが出力されるので注意が必要です。

まとめ

前回も書きましたが、HLS と DASH を別々に作成する手間が省け、ファイルも同じものが使えるので合理的です。
iOS10 以降では HLS fMP4 をサポートしており、既に iOS9 のサポートは終わっているので、そろそろ
本格的に HLS TS は切り捨て対象になりそうですね。

元記事はこちら

AWS MediaConvert で CMAF を試す!