低遅延ライブ配信技術比較分析
WebRTC、LL-HLS、SRTの3つの低遅延ライブ配信技術の原理、遅延データ、選定の提言を深く比較します。
続きを読む →DRM技術体系を深く理解し、動画コンテンツの安全な配信を保護する
DRM(Digital Rights Management、デジタル著作権管理)は、デジタルコンテンツが不正にアクセス・複製されることを防ぐための技術体系です。動画分野では、DRMは暗号化技術を用いて、許可されたユーザーだけが動画コンテンツを再生できることを保証し、オンライン動画プラットフォーム、有料映像、教育コンテンツなどのシーンにおける基盤インフラとなっています。
多くの人がDRMと通常の動画暗号化を混同しがちです。通常のAES-128暗号化(HLSにおけるAES-128など)は単に動画コンテンツを暗号化するだけで、鍵は通常M3U8内に平文で送信されるため、安全性は比較的低くなります。一方、DRMシステムは完全な鍵管理、デバイス認証、権限制御、安全な再生環境を提供し、安全性はより高くなります。
現在主流のDRMシステムは3つあり、それぞれGoogle、Apple、Microsoftが主導しており、三足鼎立の状況を形成しています。
WidevineはGoogleが開発したDRMシステムで、現在最も広く使用されているDRMソリューションであり、特にAndroidとChromeエコシステムにおいて主導的地位を占めています。
FairPlayはAppleが開発したDRMシステムで、主にiOS、macOS、tvOS、Safariブラウザを含むAppleエコシステムで使用されています。
PlayReadyはMicrosoftが開発したDRMシステムで、Windowsエコシステムと一部のスマートテレビで広く使用されています。
DRMシステムの動作フローは、コンテンツの暗号化、ライセンス取得、安全な再生の3つの主要フェーズに分けられます。
コンテンツプロバイダーは暗号化ツールを使用して動画コンテンツを暗号化し、暗号化情報を動画ファイルのメタデータに書き込みます。暗号化プロセスでは対称暗号化アルゴリズム(AESなど)を使用し、暗号化鍵は鍵管理システムによって一元管理されます。
ユーザーが動画を再生する際、プレーヤーはまずDRMライセンスサーバーにライセンスリクエストを送信します。リクエストにはデバイス情報、ユーザー認証情報、コンテンツIDが含まれます。ライセンスサーバーは検証に合格した後、復号鍵を含むライセンスを生成してプレーヤーに返します。
プレーヤーはライセンスを取得した後、そこに含まれる鍵を使用して動画コンテンツを復号します。セキュリティレベルの高いデバイスでは、復号とデコードのプロセスはトラステッド実行環境(TEE)内で行われ、システムが侵害された場合でも平文のコンテンツを取得することはできません。
モダンブラウザはEME(Encrypted Media Extensions、暗号化メディア拡張)APIを通じてDRMサポートを提供しています。EMEは標準的なJavaScript APIのセットを定義しており、WebアプリケーションがDRMシステムと対話することを可能にします。
// DRMサポート状況を確認
async function checkDRMSupport(keySystem) {
const config = [{
initDataTypes: ['cenc'],
videoCapabilities: [{
contentType: 'video/mp4;codecs="avc1.42E01E"'
}]
}];
try {
const access = await navigator.requestMediaKeySystemAccess(
keySystem,
config
);
return true;
} catch (e) {
return false;
}
}
// Widevineサポートを確認
const widevineSupported = await checkDRMSupport(
'com.widevine.alpha'
);
// FairPlayサポートを確認
const fairplaySupported = await checkDRMSupport(
'com.apple.fps.1_0'
);
const video = document.getElementById('video');
const licenseUrl = 'https://drm.example.com/widevine/license';
async function setupDRM() {
const keySystem = 'com.widevine.alpha';
const config = [{
initDataTypes: ['cenc'],
videoCapabilities: [{
contentType: 'video/mp4;codecs="avc1.42E01E"'
}]
}];
const access = await navigator.requestMediaKeySystemAccess(
keySystem,
config
);
const mediaKeys = await access.createMediaKeys();
await video.setMediaKeys(mediaKeys);
video.addEventListener('encrypted', handleEncrypted);
}
async function handleEncrypted(event) {
const session = video.mediaKeys.createSession();
session.addEventListener('message', (e) => {
fetch(licenseUrl, {
method: 'POST',
body: e.message,
headers: {
'Content-Type': 'application/octet-stream'
}
}).then(response => response.arrayBuffer())
.then(license => session.update(license));
});
await session.generateRequest(
event.initDataType,
event.initData
);
}
ライセンスサーバーはDRMシステムのコアコンポーネントであり、ユーザー権限の検証と復号鍵の発行を担当します。ライセンスサーバーを構築するには、以下の側面を考慮する必要があります:
商用DRMサービス(Castlabs、EZDRM、ExpressPlayなど)を使用するか、ライセンスサーバーを自作するかを選択できます。商用ソリューションの利点は導入が速く、安定性が高く、マルチDRMサポートが充実していることです。自作ソリューションはコストとデータセキュリティをよりよく制御できます。
DRM動画コンテンツの暗号化パッケージングはプロセス全体の最初のステップであり、通常は専門のパッケージングツールを使用して行われます。
# Shaka PackagerでDASHコンテンツを暗号化
packager \
input=input.mp4,stream=video,output=video_enc.mp4 \
input=input.mp4,stream=audio,output=audio_enc.mp4 \
--enable_widevine_encryption \
--key_server_url https://keyserver.example.com/ \
--content_id "content-12345" \
--signer "content-provider" \
--aes_signing_key "abc123..." \
--aes_signing_iv "def456..." \
--mpd_output output.mpd
すべてのプラットフォームをカバーするために、通常は複数のDRMシステムを同時にサポートする必要があります。CENC(Common Encryption)規格では、同じ暗号化コンテンツを異なるDRMシステムに適用できます。プレーヤー側でデバイスに応じて対応するDRMソリューションを選択してライセンスを取得するだけで済みます。
単一のDRMシステムだけに依存しないでください。CENC暗号化を使用し、Widevine、FairPlay、PlayReadyを同時にサポートすることを推奨します。できるだけ多くのデバイスとブラウザをカバーするためです。
DRMをサポートしていないデバイスやブラウザには、デグレーデーションソリューションを用意する必要があります。AES-128暗号化のHLSを代替として使用できます。安全性は低くなりますが、少なくとも基本的な保護を提供できます。
暗号化鍵はDRMのコア資産であり、適切に保管する必要があります。専門の鍵管理サービス(KMS)を使用することを推奨します。鍵をクライアントコードや設定ファイルに平文で保存してはなりません。
DRMライセンス取得プロセスはユーザーに対して透過的であるべきで、過度な待ち時間を避ける必要があります。ライセンスをプリロードするか、ユーザーが再生をクリックする前に事前に取得することで、ユーザーの待ち時間を減らすことができます。
DRMは動画コンテンツの安全性を保護するための重要な技術的手段です。Widevine、FairPlay、PlayReadyの3大システムはそれぞれ重点が異なり、それぞれ異なるエコシステムを主導しています。EME APIを通じて、Webアプリケーションはブラウザで安全なDRM動画再生を実現できます。
実際のプロジェクトでは、マルチDRMソリューションを採用し、CENC規格と組み合わせて、1セットの暗号化コンテンツで複数のDRMシステムに対応することを推奨します。同時に、デグレーデーション戦略をしっかりと行い、DRMをサポートしていないデバイスでも基本的なコンテンツ保護と再生体験を提供できるようにする必要があります。
HLS再生と動画暗号化に関する技術についてもっと知りたい場合は、HLS.js使用ガイドをご覧いただくか、M3U8オンラインプレーヤーを直接使用してストリーミング再生を体験してください。