動画配信サービスをすでに運用されている方、あるいは、これから始めたい、という方で、コンテンツを保存しておくためのストレージコストに頭を悩ませている方々もいらっしゃるのではないでしょうか。
特に、配信システムをすべてクラウドで構築する場合、暗号化前の生のコンテンツを保存しておくストレージコストだけではなく、DRM暗号化したコンテンツを保存しておくためのストレージコストもかかります。
そんな方々に向けて、今回の記事では、コスト削減の一つの手段として、AWS Elemental MediaPackage(以下、単にMediaPackage)のJust-in-timeパッケージング(以下、単にJITP)という機能でDRM配信する方法をご紹介いたします。
Contents
MediaPackageのJITPとは。そのメリットとリスク
ここでは、まずMediaPackageのJITP機能について簡単に解説していきます。1MediaPackageとは何なのか?ということを知りたい方は、AWSのこちらのページを確認してください。MediaPackageのライブ配信機能で、DRM配信する方法について知りたい方は、弊社のこちらのブログ記事を参照してください。
JITPとは、視聴者が動画を観ようとしてコンテンツを要求した際に、パッケージャ側が視聴者の視聴環境に応じて動的にパッケージングしてくれる機能となります。そのため、予め配信用のコンテンツを用意しておく必要がなく、その分、ストレージコストが削減できるというメリットがあります。
配信のために用意したコンテンツが、すべて視聴されるわけではなかったり、いつ視聴されるか分からないといった場合に、この手法はストレージコストを削減する方法として検討の余地はあるかと思います。
ただし、パッケージングするタイミングで何らかのエラーが発生した場合、コンテンツの視聴ができずに視聴体験が損なわれる可能性がある点はリスクとして考慮しておかなければなりません。
MediaPackageのJITPでDRM配信する方法
では、JITPでDRM配信する方法について見ていきましょう。2ここでは、あくまでMediaPackageのJITPで設定方法や、DRMの設定方法に絞って解説していきますので、実際にプレイヤーで再生する方法などについて知りたい方は、こちらの記事を参考にしてください。また、CDNの設定方法についても省略します。
全体の流れ

まずは、全体の流れを確認しておきましょう。ここでは以下流れで解説していきます。
- コンテンツの準備
- MediaPackage用のIAMロールを用意
S3に保存したコンテンツにアクセスできるようにするためのロール - パッケージンググループを設定
コンテンツをどのようにパッケージングするかを設定 - アセットを設定
S3に保存された どのコンテンツにどのようにパッケージンググループを割り当てるかなどの設定 - 配信チェック
1. コンテンツを用意

MediaPackageのJITPで入力用に使用できるコンテンツは2種類あり、HLSとSMILとなります。今回検証に使うのは、予め用意しておいた複数ビットレート分のMP4とSMILとなります。入力についての詳細を知りたい方は、AWSのこちらのページを参照ください。
ちなみに、SMILを簡単に解説しておきますと、Synchronized Multimedia Integration Languageの略で、Web上で動画などのメディアの表示タイミングなどをコントロールするための規格となります。今回の検証で使用するSMILの中身は次のようになっています。
<?xml version="1.0" encoding="utf-8"?>
<smil title="">
<body>
<switch>
<video src="bbb_1080.mp4">
</video>
<video src="bbb_720.mp4">
</video>
<video src="bbb_360.mp4">
</video>
<video src="bbb_180.mp4">
</video>
</switch>
</body>
</smil>
複数ビットレート分のコンテンツを用意する方法の一つとして、AWS Elemental MediaConvertが挙げられますが、SMILを生成することはできませんので、こちらについては自前で用意する必要がございます。
SMILを生成する際の手順や注意点がまとめられたAWSのブログ記事(英語)がございますので、そちらを参考にしてください。また、MediaPackage側が許容するSMILの要件については、AWSのドキュメントを参照してください。
2. MediaPackage用のIAMロールを用意
MediaPackageがS3にアクセスできるようにIAMロールを作成していきます。下図にあるようにロール作成画面で、「EC2」を選択しましょう。デフォルトでMediaPackage用のユースケースが用意されていないため、まずはロールを作成し、後で編集画面で修正していきます。

パーミッションを設定する画面では、以下を選択してください。
- AmazonS3FullAccess
- AWSElementalMediaPackageFullAccess


最後にロール名を設定しますが、ここでは「MediaPackage JIT Test」としています。

作成したロールを開いてみましょう。

ロール画面の「Trust relationships」タブを開き、「Edit trust policy」で信頼関係編集画面を開きます。この画面で、「Statement/Principal/Service」の部分を「mediapackage.amazonaws.com」に修正します。

これでロール作成は完了です。
3. パッケージンググループを設定
パッケージンググループとは、コンテンツ(アセット)をどのようにパッケージングするかを定義しておく設定となります。
MediaPackageの画面の左ペインから、「Video on demand」を開き、「Packaging groups」を選択、「Create group」を押してください。

パッケージンググループ作成画面です。ここでは、「mediapackage-jit-test」としています。

作成した「mediapackage-jit-test」を開きますと以下画面となります。「Manage configurations」を押してください。

パッケージング方法を設定する画面が表示されますので、必要な情報を入力していきます。ここではパッケージンググループIDは「jit-test-dash-speke-v1」としています。また、「Package type」で配信形式(DASH-ISO、HLSやCMAFなど)が選べますが、ここではとりあえず、DASH-ISOのみ設定していきます。

同じ画面の下の方に「Encryption」という項目があります。「Enable encryption」チェックボックスをチェックすると、以下のようなDRM設定項目一覧が展開されます。

上図にある項目については、次の表の通りとなります。設定が完了しましたら、保存してください。
設定項目 | 説明 |
---|---|
System IDs | 使用するDRMのIDを指定します。DRMごとにIDは決まっています。IDについてはこちらのページをご確認ください。 |
URL | DRMベンダーから提供されるSPEKE APIサーバーへのURLを設定します。 |
Role ARN | DRMベンダーから提供されたSPEKE APIサーバーにアクセスするためのロールのARN情報を設定します。 こちらの作成方法については説明を省略します。 |
SPEKE version | SPEKEにはバージョンがあり、それぞれ Version 1.0 と 2.0 となっています。バージョンの違いについては、こちらのブログ記事を参照してください。 |
以上で、パッケージンググループの作成は完了となります。
4. アセットを設定
次にアセットを設定していきましょう。「Video on demand」の下にある「Assets」を開いてください。そこに、「Ingest assets」ボタンがありますので、そちらをクリックします。

下図は、アセット設定画面となります。「S3 bucket name」には、コンテンツを保存しているS3パケットを設定します。「IAM role」では、「Use existing role」を選択し、先ほど作成したロール「MediaPackage JIT Test」を設定します。
「Asset details」では、複数のアセットを設定することができます。ここでは、対象のコンテンツのSMILを一つ設定します。以下の「Asset 1」で対象のSMILへのバケット内の相対パスを設定し、IDは、アセット一覧の中で一意となる識別子を設定し、リソースIDは任意ではありますが、コンテンツを識別するためなどの分かりやすいIDを設定します。最後の「Package settings」では、前述の項で作成したパッケージンググループを設定します。

設定が完了しましたら「Ingest asset(s)」を押しアセットを作成します。作成したアセットが一覧に現れますので、開いてみましょう。

アセット詳細画面の、「Egress endpoints」の「URL」列にコンテンツへのURLが表示されています。CDNを挟む場合は、またさらに設定する必要があるものがありますが、ここでは省略します。

以上で設定が完了しましたので、ちゃんとコンテンツにアクセスできるかを確認するために、エンドポイントURLをコピーしましょう。
5. 配信チェック
エンドポイントURLにリクエストを投げてみると、一瞬でコンテンツが生成されます。下図は、Postmanというツールでリクエストを投げた結果となりますが、無事にDASH-ISOのマニフェストファイルが返ってきていることが確認できます。黄色線部分を見ますと、ちゃんと複数ビットレート分のコンテンツが設定され(要素)、それぞれにDRMが設定されていること(要素)が確認できます。

以上となります。
さいごに
この記事では、MediaPackageのJITP機能でDRM配信する方法を見てきましたが、イメージはつかめましたでしょうか。ストレージコストを削減したい場合には、良い方法の一つとなりますので、リスクも考慮した上で ご検討ください。
なお、『Multi DRM Kit』はDRMが初めての方でも簡単に ご利用いただけるようなサービスとなっておりますので、DRMベンダーをお探しの場合は 是非一度 お問い合わせください。
- 1
- 2ここでは、あくまでMediaPackageのJITPで設定方法や、DRMの設定方法に絞って解説していきますので、実際にプレイヤーで再生する方法などについて知りたい方は、こちらの記事を参考にしてください。また、CDNの設定方法についても省略します。
導入が簡単で信頼性の高いマルチDRMサービス

DRMが初めての方でも動画配信が初めての方でもお気軽にお問い合わせください。