[アップデート] AWS Elemental MediaLiveで冗長化されたHLSトップレベルマニフェストファイルの出力に対応しました!

AWS Elemental MediaLiveのHLSトップレベルマニフェストファイルはパイプラインごとに個別でしたが、今回の機能アップデートにより双方のパイプラインを参照するトップレベルマニフェストファイルを出力することができるようになりました。
2019.01.31

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

はじめに

清水です。AWS Media Servicesの細かなアップデートを追っていくコーナーです。本エントリで紹介するのはこちら、AWS Elemental MediaLiveで冗長化されたHLSトップレベルマニフェストファイルの出力に対応しました。

昨年12月初頭の2018/12/04、re:Invent 2018終了直後にアップデートされた内容となります。

これまでAWS Elemental MediaLiveでHLS形式の出力をする際、2つのエンコードパイプラインで出力されるHLSのトップレベルマニフェストファイル(他のマニフェストファイルへのリンクが書かれた、最も上位のマニフェストファイル)はパイプラインごとに別れているものでした。片方(メイン)のパイプラインで障害などが発生した際にはトップレベルのマニフェストファイルごと参照先を切り替えるか、別途冗長化用のマニフェストファイルを準備する必要がありました。 今回のアップデートで冗長化されたトップレベルマニフェストファイルの出力をサポートしたことにより、それぞれのパイプラインで出力されるトップレベルマニフェストファイルに、もう一方のパイプラインのマニフェストファイルへの情報も記載されます。これにより、片方のパイプラインで障害などが発生し、下位のマニフェストファイル、セグメントファイルノ更新が止まっても、もう一方のパイプラインの出力を参照し配信を続けることが可能になります。

HLS冗長化機能を無効にした状態のトップレベルマニフェストファイルを確認する

比較のため、まずは今回のアップデート内容を無効にした状態のトップレベルマニフェストファイルを確認してみましょう。MediaLiveのChannel設定でHLS出力を以下のように同じMediaStoreコンテナを指定するようにしました。書き出しパスだけ異なる状態です。

  • Destination A (Pipeline A)
  • mediastoressl://XXXXXXXXXXXXXX.data.mediastore.ap-northeast-1.amazonaws.com/RedudantHlsTest/before/destA
  • Destination B (Pipeline B)
  • mediastoressl://XXXXXXXXXXXXXX.data.mediastore.ap-northeast-1.amazonaws.com/RedudantHlsTest/before/destB

なお、今回のアップデート内容の設定箇所に相当しますManifest and SegmentsRedundant Manifestの項目はDISABLEDとなっていることを確認します。

この設定でMediaLiveのChannelをスタートし、2台の配信エンコーダからMediaLiveのInputsのEndpoint2箇所に映像を配信してみます。すると以下のように、それぞれパイプラインごとのトップレベルマニフェストファイルが確認できます。

$ curl https://XXXXXXXXXXXXXX.data.mediastore.ap-northeast-1.amazonaws.com/RedudantHlsTest/before/destA.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:BANDWIDTH=4892008,AVERAGE-BANDWIDTH=3440800,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=29.970,AUDIO="PROGRAM_AUDIO"
destA_720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1724536,AVERAGE-BANDWIDTH=1240800,CODECS="avc1.77.30,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=29.970,AUDIO="PROGRAM_AUDIO"
destA_360p.m3u8
$ curl https://XXXXXXXXXXXXXX.data.mediastore.ap-northeast-1.amazonaws.com/RedudantHlsTest/before/destB.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:BANDWIDTH=4892008,AVERAGE-BANDWIDTH=3440800,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=29.970,AUDIO="PROGRAM_AUDIO"
destB_720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1724536,AVERAGE-BANDWIDTH=1240800,CODECS="avc1.77.30,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=29.970,AUDIO="PROGRAM_AUDIO"
destB_360p.m3u8

アップデート内容のHLS冗長化機能を有効にした状態のトップレベルマニフェストファイルを確認する

続いて今回のアップデート内容、HLS冗長化マニフェスト機能を有効にして確認してみます。無効のときと同様、HLS出力をMediaStoreの同じコンテナ、書き出しパスだけ異なる設定にします。

  • Destination A (Pipeline A)
  • mediastoressl://XXXXXXXXXXXXXX.data.mediastore.ap-northeast-1.amazonaws.com/RedudantHlsTest/after/destA
  • Destination B (Pipeline B)
  • mediastoressl://XXXXXXXXXXXXXX.data.mediastore.ap-northeast-1.amazonaws.com/RedudantHlsTest/after/destB

そして今回のアップデート内容の設定箇所に相当するManifest and SegmentsRedundant Manifestの項目をENABLEDにします。

この設定でマニフェスト冗長化機能を無効にしたときと同様、MediaLiveのChannelをスタートし、2台の配信エンコーダからMediaLiveのInputsのEndpoint2箇所に映像を配信します。以下が冗長化機能を有効化したトップレベルマニフェストファイルになります。それぞれのパイプラインから生成されるトップレベルマニフェストファイル内で、もう一方のパイプラインの下位のマニフェストファイルを参照していることがわかります。

$ curl https://XXXXXXXXXXXXXX.data.mediastore.ap-northeast-1.amazonaws.com/RedudantHlsTest/after/destA.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:BANDWIDTH=4892008,AVERAGE-BANDWIDTH=3440800,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=29.970,AUDIO="PROGRAM_AUDIO"
destA_720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4892008,AVERAGE-BANDWIDTH=3440800,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=29.970,AUDIO="PROGRAM_AUDIO_1"
destB_720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1724536,AVERAGE-BANDWIDTH=1240800,CODECS="avc1.77.30,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=29.970,AUDIO="PROGRAM_AUDIO"
destA_360p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1724536,AVERAGE-BANDWIDTH=1240800,CODECS="avc1.77.30,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=29.970,AUDIO="PROGRAM_AUDIO_1"
destB_360p.m3u8
$ curl https://XXXXXXXXXXXXXX.data.mediastore.ap-northeast-1.amazonaws.com/RedudantHlsTest/after/destB.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:BANDWIDTH=4892008,AVERAGE-BANDWIDTH=3440800,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=29.970,AUDIO="PROGRAM_AUDIO"
destB_720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=4892008,AVERAGE-BANDWIDTH=3440800,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=29.970,AUDIO="PROGRAM_AUDIO_1"
destA_720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1724536,AVERAGE-BANDWIDTH=1240800,CODECS="avc1.77.30,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=29.970,AUDIO="PROGRAM_AUDIO"
destB_360p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1724536,AVERAGE-BANDWIDTH=1240800,CODECS="avc1.77.30,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=29.970,AUDIO="PROGRAM_AUDIO_1"
destA_360p.m3u8

まとめ

AWS Elemental MediaLiveの機能アップデート、HLSトップレベルマニフェストファイルの冗長化機能について確認してみました。主にAWS Elemental MediaStoreと連携してライブ配信を行う際の冗長構成で役立つのではないでしょうか。AWS Elemental MediaPackageと連携してライブ配信を行う際にはMediaPackageのLive Channel冗長入力も役立つかと思います。様々な冗長化構成が検討できるのは嬉しいですね。またAWS Elemental MediaLiveをはじめとしたAWS Media Services、冗長構成についても機能アップデートでどんどんと使いやすくなっているかと思います。引き続きAWS Media Servicesの機能アップデートに注目していきたいと思います。