みなさん、こんにちは。
新メンバーが二人増えてチームがとても賑やかになった streampack の木村です。

さて、2019年5月17日に MediaPackage で VOD の Just-in-Time Packaging 機能がリリースされました。

AWS Elemental MediaPackage、Video On Demand 向けの Just-in-Time Packaging のサポートを追加

これまでは MediaLive などからのライブフィードのパッケージングのみの対応でしたが、これにより MP4 などのファイルからリアルタイムで HLS や DASH を生成できるようになったとのこと。

早速触ってみます!

ロールの作成

MediaPackage については既存のロールが用意されていないので、事前準備として VOD Packaging に必要な IAM ロールを作成します。

コンソールの IAM > ロール > ロールの作成 に進みます。
このロールを使用するサービスから一旦、EC2を選んで 次のステップ: アクセス権限を押下します。

ポリシー

アタッチ ポリシーですが今回は動作確認するだけですので、単純に下記2つをアタッチします。

  • AmazonS3FullAccess
  • AWSElementalMediaPackageFullAccess

ロール名

ロール名を MediaPackageとしてロールを作成します。

信頼関係の編集

作成したロール MediaPackageを開き 信頼関係を編集します。

“Service”: “ec2.amazonaws.com”

“Service”: “mediapackage.amazonaws.com”

に変更します。

入力ソースの作成

最終的に ABR で出力するので、複数帯域の MP4 をあらかじめ用意します。
回はソースファイルとして big_buck_bunny_1080p_h264.mov を用い、MediaConvert で以下の帯域のファイルを作成しました。

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

エンコードしたファイルは S3 の所定の場所に出力します。

MediaPackage

いよいよパッケージングです。

今回は上記で作成した3種類の MP4 を元に ABR ストリームを生成しますが、ここでMediaPackage VOD Packaging 特有のお作法があります。

後述する Asset の項で入力ソースの指定をするのですが、ここで指定できるのが .smil.m3u8のみとなります。

つまり、HLS 化し終わったコンテンツであればそのまま入力に指定して再パッケージングが可能ですが、素の MP4 の場合、SMIL ファイルを作成してそこに利用する MP4 ファイルを指定する必要があります。

SMIL

上記の例では以下のような SMIL ファイルを作成して S3 の同一ディレクトリーに配置します。

big_buck_bunny_1080p_h264_abr.smil

<?xml version="1.0" encoding="utf-8"?>
<smil title="">
  <body>
    <switch>
      <video src="big_buck_bunny_1080p_h264_1500.mp4">
      </video>
      <video src="big_buck_bunny_1080p_h264_1100.mp4">
      </video>
      <video src="big_buck_bunny_1080p_h264_750.mp4">
      </video>
    </switch>
  </body>
</smil>

こんな感じ。

MediaPackage で利用する SMIL は余計なエレメントやアトリビュートは無視されるので、上記最低限でOKです。
マニフェストに出力される画角やビットレートはソースファイルの Mediainfo から取得して反映しているようです。

Packaging group

ようやっと MediaPackage です。
コンソールから MediaPackage にいくと Video on demand のメニューが追加されています。
はじめに Packaging groups から新しい Packaging group を作成します。

id はテキトーに

この Packaging group でパッケージの種類の選択と細かい設定が可能です。

対応しているパッケージングタイプは下記4種類です。

  • HLS
  • DASH
  • MS Smooth
  • CMAF

テストですので名前 idPackage type だけ変えて、あとは全部デフォルト設定で全種類作ってみました。

Assets

Asset で入力ソースファイル、出力先、Packaging group などを設定します。
Ingest asset で新規アセットを作成します。

Asset access

項目 設定値
S3 bucket name S3 バケットを選択
IAM role IAM ロールを選択

Asset1

入力ソースとして利用可能な拡張子は .m3u8.smilのみです。
既に作成済みの HLS (.m3u8) があればそのまま指定可能で、HLS ABR のマスタープレイリストを指定すると、ちゃんと ABR で再パッケージングしてくれます。

MP4 を入力する場合は前述のように .smil ファイルを作成し指定します。

項目 設定値 備考
File name ファイル名を指定 .m3u8 or .smil (.m3u8 のみリストに出現。.smil を指定する場合は完全手入力)
Id Id を指定 File name に関連してオートコンプリート
Resource ID オプショナル DRM Server を利用する際に必要

Packaging settings

項目 設定値
Packaging group 作成済みの Packaging Group を選択

最後にIngest assetsを押すとアセットが作成されます。

アセット作成は一瞬で、その中身には各パッケージング タイプの URL が記載されており、即座に再生が可能となります。

再生

生成された CMAF を Mac Safari で再生してみます。

ちゃんと再生されていますね!
もちろん HLS も DASH も Smooth も再生可能です。

制限

いくつか制限があるので注意です。

VOD Content Limits

困ったこと

今回試した中でなぜかは分かりませんが、単一コンテンツ(SMIL に1つだけ MP4 を記載)では問題ないのに、ABR だとうまく動作しないコンテンツがありました。

この場合、コンソール上で何もエラーが出ずにあたかも全てが正常に完了しているように見えます。
URL も生成されますが、実際にアクセスすると以下のように 404 が返って視聴できない状況です。

CloudWatch にも異常は記録されず、エラーも吐かない為、どこが悪いのか特定できず。
まあコンテンツなのでしょうが・・・

元記事はこちら

MediaPackage で VOD を Just-in-Time Packaging