[MPEG-DASH] DRMシステムの概要と種類

# はじめに
MPEG-DASHによるアダプティブストリーミングについて、DRMシステムの概要と種類を紹介します。

# MPEG-DASHのデモ（DRM）
- MPDファイル
    - https://yunbow.github.io/sample-mpeg-dash/mpd/drm/playready/Bullfinch.mpd
- ライセンスURL
    - https://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(kid:header,contentkey:jfUe14GofJhw1Sw0yde2eQ==)

[dash.jsプレイヤー](https://reference.dashif.org/dash.js/latest/samples/dash-if-reference-player/index.html)を使ってDRMのMPEG-DASHを再生することができます。手順は次の通りです。`show options`->`DRM Options`->`DRM KeySystem`でDRMシステムを選択します。ここでは、`com.microsoft.playready`を選択してライセンスURLを指定してください。`Stream`のURL欄にMPDファイルのURLを指定します。ここでは、上記のURLを指定してください。`Load`ボタンをクリックすると動画の再生が始まります。

# CENC
- CENC = Common Encryption
- MPEG-DASHのDRMで使用する暗号技術
- 国際標準機関 ISO/IEC で 23001-7 として標準化されている
- 複数のDRMシステムに対応する

[CENC（共通暗号化）](https://en.wikipedia.org/wiki/MPEG_Common_Encryption)では、ClearKey, WideVine, PlayReadyなどの異なるDRMシステムで復号化を可能とします。1つのコンテンツに対して、暗号化を行います。この暗号化するソフトウェアを「DRMパッケージャ」と呼びます。ライセンス情報は、MP4の`PSSH`（Protection Specific System Header）ボックスに保存されます。

# CDM
- CDM = Content Decryption Module
- 暗号化されたメディアを再生するモジュール
    - クライアントサイドのソフトウェア
    - ハードウェアのモジュール

[CDM](https://en.wikipedia.org/wiki/Encrypted_Media_Extensions#Content_Decryption_Modules)では、ライセンスサーバーと直接やり取りして、取得したKeyでメディアファイルを復号しています。このCDMは、WEBブラウザ毎に異なりますが、[EME](https://qiita.com/yun_bow/items/88582964c113c8499742#eme)のJavaScriptAPIを扱う上では、CDMの違いついては意識しなくて良いです。

# ライセンスサーバー
- 有効期限や再生回数を指定することができる。

CDMがメディアファイルのKeyIDをリクエストすると、ライセンスサーバーがKeyをレスポンスします。

# DRMシステム
DRMアダプティブストリーミングでは、MPEG-DASHのマニフェストファイルMPDにDRMシステムの記述が追加されます。

## Clearkey
- https://yunbow.github.io/sample-mpeg-dash/mpd/drm/clearkey/Bullfinch.mpd

Clearkeyは、DRMシステムの1つで、CDMやライセンスサーバーを必要としません。CDMを使用せずにブラウザのみでCENC復号化を行います。Clearkeyは、ブラウザがCENC復号に対応しているかどうか確認するために使用されることが多いです。セキュリティレベルは他のDRMシステムと比べると下がりますので商用向けではありません。

```xml
<ContentProtection cenc:default_KID="38261f9e-22d6-9185-4040-d5c3c1aa9479" schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc"/>
```

## Widevine
- https://yunbow.github.io/sample-mpeg-dash/mpd/drm/widevine/Bullfinch.mpd
- 再生できるブラウザ
    - Google Chrome
    - Mozilla Firefox
    - Microsoft Edge（Chromium版）

[Widevine](https://en.wikipedia.org/wiki/Widevine)は、Googleが提供するDRMシステムです。Widevineで暗号化されたメディアファイルを再生するためには、Widevineのライセンスサーバーと、それに対応したCDMを搭載したブラウザが必要になります。

```xml
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
```

## PlayReady
- https://yunbow.github.io/sample-mpeg-dash/mpd/drm/playready/Bullfinch.mpd
- 再生できるブラウザ
    - Microsoft Edge

[PlayReady](https://en.wikipedia.org/wiki/PlayReady)は、Microsoftが提供するDRMシステムです。PlayReadyで暗号化されたメディアファイルを再生するためには、PlayReadyのライセンスサーバーと、それに対応したCDMを搭載したブラウザが必要になります。

```xml
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/>
```

## マルチDRM
- https://yunbow.github.io/sample-mpeg-dash/mpd/drm/multi/Bullfinch.mpd

マルチDRMを有効にするためには、異なるDRMシステムで同じキーIDをとコンテンツキーを使用する必要があります。例えば、widevineのキーIDとコンテンツキーとplayreadyのキーIDとコンテンツキーの組み合わせが同じになる必要があります。

# おわりに
今回、DRMの概要と種類について纏めました。
メディアファイルの作成方法や再生方法は別の投稿で紹介していますので
是非ご覧ください。ありがとうございました。

# 関連リンク
- [[MPEG-DASH] 初心者のためのWEBストリーミング入門](https://qiita.com/yun_bow/items/a97ad78615c6ca3a75bb)
- [[MPEG-DASH] Fragmented MP4のファイル構造](https://qiita.com/yun_bow/items/a33266b78d5aab807c71)
- [[MPEG-DASH] MPDのファイル構造](https://qiita.com/yun_bow/items/780e49531174272e7c44)
- [MPEG-DASH] DRMシステムの概要と種類（本稿）
- [[MPEG-DASH] Bento4でDRMパッケージを行う](https://qiita.com/yun_bow/items/77b86d75e15f245f265b)
- [[MPEG-DASH] dashJSでアダプティブストリーミングを再生する](https://qiita.com/yun_bow/items/88582964c113c8499742)
- [[MPEG-DASH] videoJSでアダプティブストリーミングを再生する](https://qiita.com/yun_bow/items/3cdcb0a4f961d6e1e06d)
- [[MPEG-DASH] パフォーマンスチューニングを行う](https://qiita.com/yun_bow/items/e4e37265643a661021ec)

## 参考リンク
- [MPEG-DASHストリームのClearkey復号](https://qiita.com/khagi/items/bfe910e4b09110977049)
- [無料でできる MPEG-DASH + Widevine ストリーミング テスト配信](https://qiita.com/tomopyonsama/items/624ebe53fbdf7b149b95)
- [PlayReadyのPSSH Dataを生成](https://qiita.com/daisukeoda/items/41c5e36a263a18b29c13)

以上です。