Widevineは、モバイルデバイス、Smart TV、ウェブプラットフォームでのビデオコンテンツを不正コピーから保護するためにGoogleが開発したDRM技術です。コンテンツの暗号化は、世界中の40億台のデバイスでサポートされているCDMモジュールを介して実行されます。Widevine技術は、Android、iOS、Chrome、Smart TVとの互換性を保証し、ストリーミングサービスが任意のプラットフォームでプレミアムコンテンツを保護できるようにします。
主要ポイント
Widevineは、Googleが2010年に買収したプロプライエタリなDRM技術であり、Androidエコシステムにおけるビデオコンテンツ保護のデファクトスタンダードとなっています。Netflix、Amazon Prime Video、Disney+、Huluなどの主要ストリーミングサービスが、コンテンツの不正コピーや配信を防ぐために使用しています。
Widevineは、安全なライセンスチャネルを通じて許可されたデバイスにのみ送信されるコンテンツ鍵を使用したAES-128 CBC暗号化をサポートしています。システムは、サーバーでの暗号化からユーザーのデバイスでの復号まで、エンドツーエンドの保護を提供します。
Widevine Technologiesは1999年に設立され、当初はケーブルテレビプラットフォーム向けのコンテンツ保護ソリューションを開発していました。2010年にGoogleに買収された後、この技術はモバイルプラットフォームに適応され、Android OSにバージョン4.4 KitKatから統合されました。2015年以降、WidevineはGoogle Mobile Services認証の必須コンポーネントとなっています。
2018年、GoogleはWidevine Modular DRMを発表し、デバイスメーカーがOSコードを変更せずにハードウェアで異なる保護レベルを実装できるようにしました。現在、Widevine Modularは40億台以上のデバイスでサポートされており、Androidの主要なDRMメカニズムとなっています。
Widevineのアーキテクチャは、Content Decryption Module(CDM)、ライセンスサーバー、コンテンツ暗号化ツールの3つの主要コンポーネントで構成されています。CDMはクライアント側で復号を実行し、安全な鍵保存のためにハードウェアのTrusted Execution Environment(TEE)と連携します。
Googleライセンスサーバーは、コンテンツプロバイダーのポリシーに基づいて鍵の発行を管理します。これらのポリシーは、時間、デバイス数、再生品質に関する制限を定義します。暗号化ツールはプロバイダー側でコンテンツを準備し、CENC暗号化を使用してMPEG-DASHまたはHLS形式にパッケージ化します。
保護プロセスは、メディアファイルがプロバイダーのサーバーでコンテンツ鍵を使用して暗号化されるコンテンツパッケージング段階から始まります。暗号化されたストリームはCDNを介してユーザーのデバイスに送信され、CDMがライセンスサーバーにライセンスを要求します。
ライセンスサーバーはデバイスの信頼性とコンテンツへのアクセス権を検証します。チェックに成功すると、サーバーはCDMが復号に使用する鍵付きライセンスを発行します。ライセンスには、視聴時間や解像度に関する制限が含まれる場合があります。
Widevineでのライセンス交換は、ブラウザのEME(Encrypted Media Extensions)プロトコルまたはモバイルプラットフォームのSDKを介して実装されます。ライセンス要求はCDMによって生成され、HTTPSを介してライセンスサーバーに送信され、転送中の鍵の傍受から保護します。
サーバーは要求を処理し、暗号化されたライセンスを返します。このライセンスはデバイスのCDMのみが復号できます。特定のデバイスへの鍵のハードウェアバインディングにより、他のプラットフォームへの転送が防止されます。
Widevineは、ISO/IEC 23001-7で定義されたCommon Encryption(CENC)標準を使用し、MPEG-DASHおよびHLS形式との互換性を保証します。メディアストリームの保護には、CTRまたはCBCモードのAES-128暗号化が使用されます。
鍵の導出にはHKDF(HMAC-based Key Derivation Function)が使用され、コンテンツの各セグメントに一意の鍵を生成できます。WidevineのHLSサポートはModularバージョン2.0で追加され、Appleプラットフォームとの互換性が拡大されました。
@Throws
fun requestLicense(): ByteArray {
val drmSessionManager = mediaDrm.createSession(
sessionId,
List("keyRequestType", "init")
)
val request = mediaDrm.getKeyRequest(
sessionId,
schemeData.get("mimeType"),
KeyType.STREAMING,
mutableMapOf()
)
return licenseService.acquire(request.data)
}
Widevineは、暗号化操作の実行方法とコンテンツの処理方法が異なる3つのセキュリティレベルを定義しています。レベルL1は最大の保護を提供し、L3は最小、L2は中間の位置にあります。
| レベル | 保護タイプ | デバイスの要件 | 最大解像度 |
|---|---|---|---|
| L1 | ハードウェア | SoCレベルのTEE | 4K Ultra HD |
| L2 | ハイブリッド | 鍵用TEE、ビデオ用ソフトウェア | 1080p |
| L3 | ソフトウェア | ソフトウェアCDMのみ | 720p |
レベルL1は、すべての暗号化操作が実行されるハードウェアレベルのTrusted Execution Environment(TEE)を必要とします。コンテンツ鍵がTEEから出ることはなく、メインOSが侵害された場合でも抽出を防ぎます。
L1認証を受けたデバイスは、ユーザープロセスからのアクセスなしに、復号されたビデオストリームが保護されたビデオ出力に直接送信されるため、4K品質およびHDRでコンテンツを再生できます。
レベルL3は、通常のユーザースペース内でソフトウェアによるすべての暗号化操作を実行します。これは最も安全性の低いモードであり、デバイスのRAMから鍵が抽出される可能性があります。
Widevine L3は再生品質を720pに制限するため、低スペックデバイスやハードウェア保護のないデスクトップブラウザでの視聴に適しています。
fun getSecurityLevel(): String {
val mediaDrm = MediaDrm(UUID.fromString(
"edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
))
val level = mediaDrm.getPropertyString(
"securityLevel"
)
return level.ifEmpty { "L3" }
}
モバイルアプリケーションへのWidevine統合は、標準のMediaDrm(Android)およびAVContentKeySession(iOS)APIを介して実行されます。ほとんどの場合、開発者はDRMを直接操作する必要はありません — ExoPlayerやAVPlayerなどのプレーヤーライブラリが自動的にライセンス処理を行います。
Androidでは、WidevineはCDMへの直接アクセスを提供するMediaDrmクラスを介して統合されます。ストリーミングアプリケーションでは、ライセンス要求を自動的に管理するDrmSessionManagerモジュールとともにExoPlayerを使用することをお勧めします。
プレーヤーを初期化する際には、WidevineスキームUUID(`edef8ba9-79d6-4ace-a3c8-27dcd51d21ed`)とコンテンツプロバイダーが提供するライセンスサーバーURLを指定する必要があります。ExoPlayerはライセンスの要求と更新サイクルを自動的に処理します。
val drmLicenseUrl = "https://license.service.com/wv"
val mediaItem = MediaItem.Builder()
.setUri(Uri.parse(streamUrl))
.setDrmKeyRequestUrl(drmLicenseUrl)
.setDrmKeyRequestHeaders(
mapOf("Authorization" to token)
)
.build()
val exoPlayer = ExoPlayer.Builder(context)
.build()
exoPlayer.setMediaItem(mediaItem)
exoPlayer.prepare()
ウェブプラットフォームでは、WidevineはMedia Source Extensions(MSE)およびEncrypted Media Extensions(EME)を介して動作します。ChromiumベースのブラウザにはWidevine CDMが組み込まれており、開発者は正しい設定でEMEセッションを初期化するだけで済みます。
ブラウザでWidevineを使用するには、keySystemタイプ `com.widevine.alpha` のライセンスイニシエーターを指定する必要があります。MediaKeysインスタンスを作成すると、ブラウザが自動的にライセンス要求を処理します。
Widevineを統合する際には、アクセス権の欠如、サブスクリプションの期限切れ、デバイスの非互換性によって発生するライセンスエラーを正しく処理することが重要です。TYPE_EXPIRED_LICENSEエラーは、サーバーへの再要求によるライセンスの更新が必要です。一方、TYPE_OUTPUT_NOT_ALLOWEDは、DRMポリシーとビデオ出力の非互換性を示します。
一時的なネットワークエラーには指数バックオフによる再試行メカニズムを実装し、永続的なライセンス失敗時にはユーザーに明確なメッセージを表示することをお勧めします。DRMセッションエラーログは、コンテンツプロバイダーがデバイスの問題を特定し、ポリシーを最適化するのに役立ちます。
Widevineは、AppleのFairPlayやMicrosoftのPlayReadyと競合しており、モバイルプラットフォーム市場における3つの主要なDRMソリューションを形成しています。各技術には、プラットフォームエコシステムに関連した独自の利点と制限があります。
| 特性 | Widevine | FairPlay | PlayReady |
|---|---|---|---|
| 開発元 | Apple | Microsoft | |
| 主要プラットフォーム | Android、Chrome | iOS、tvOS、Safari | Windows、Xbox、UWP |
| 最大レベル | L1(4K) | L1相当(4K) | SL3000(4K) |
| ハードウェア保護 | TEE | Secure Enclave | TPM + TEE |
DRMの選択は、アプリケーションのターゲットプラットフォームによって異なります。Androidファーストのプロジェクトでは、WidevineがGoogle Mobile Servicesを搭載したすべての認定デバイスにプリインストールされており、追加のライセンス料が不要なため、自然な選択肢です。
クロスプラットフォームプロジェクトでは、Axinom、EZDRM、Vualtoなどのライセンスアグリゲーターを使用したマルチDRMアプローチがよく使用されます。これらは3つのDRMシステムすべてと連携するための統一APIを提供します。これにより統合の複雑さが軽減され、ライセンス管理が一元化されます。
よくある質問
Widevineは、デジタルビデオコンテンツを不正コピーから保護するために設計されたGoogleのDRM技術です。ストリーミングサービスがビデオを暗号化し、ライセンスシステムを通じてアクセスを管理するために使用しています。
Widevineは3つのセキュリティレベルをサポートしています:TEEでのハードウェア暗号化によるL1、ハイブリッドアプローチのL2、完全ソフトウェア実装のL3。L1は4Kコンテンツの再生を可能にし、L3は720p品質に制限されています。
MediaDrmクラスを介してsecurityLevelプロパティを要求することで、AndroidでWidevineレベルを確認できます。Widevine UUIDでMediaDrmインスタンスを作成し、getPropertyStringを呼び出すか、DRM Infoなどのサードパーティアプリを使用します。
WidevineはGoogleがAndroidとChrome向けに開発したのに対し、FairPlayはiOS、tvOS、Safari向けです。両方ともハードウェア暗号化と4Kをサポートしていますが、WidevineはAndroidデバイスでより普及しており、FairPlayはAppleエコシステムのデファクトスタンダードです。
モバイルアプリケーションでWidevineを使用するために個別のライセンスは不要です — この技術は認定されたAndroidデバイスとChromeに組み込まれています。料金は、ライセンスサーバーを使用するコンテンツプロバイダーのみに請求されます。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。