ExoPlayer は、Android の MediaDrm
API を使用して、DRM で保護された再生をサポートします。
サポートされているさまざまな DRM スキームに必要な最小 Android バージョン
サポートされているストリーミング形式については、
次の表をご覧ください。
DRM スキーム | Android のバージョン番号 | Android API レベル | サポートされている形式 |
---|---|---|---|
Widevine「cenc」 | 4.4 | 19 | DASH、HLS(FMP4 のみ) |
Widevine「cbcs」 | 7.1 | 25 | DASH、HLS(FMP4 のみ) |
ClearKey「cenc」 | 5.0 | 21 | DASH |
PlayReady SL2000 "cenc" | Android TV | Android TV | DASH、SmoothStreaming、HLS(FMP4 のみ) |
DRM 保護されたコンテンツを ExoPlayer で再生するには、DRM の UUID
system を指定する必要があります。
メディア アイテムの作成時に、
プロパティを指定することもできます。プレーヤーはこれらのプロパティを使用して、
DrmSessionManager
のデフォルト実装を作成します。
DefaultDrmSessionManager
。ほとんどのユースケースに適しています。用途
場合、追加の DRM プロパティが必要になることがあります。詳しくは以下をご覧ください。
できます。
鍵のローテーション
ローテーションキーを使用してストリームを再生するには、true
を
メディアの作成時: MediaItem.DrmConfiguration.Builder.setMultiSession
表示されます。
マルチキー コンテンツ
マルチキー コンテンツは複数のストリームで構成されており、一部のストリームで異なるものが使用されています あります。マルチキー コンテンツは、 設定に応じて異なります。
ケース 1: ライセンス サーバーがコンテンツのすべてのキーを返す
この場合、ライセンス サーバーは、 コンテンツのすべてのキーを返します。このケースは ExoPlayer によって処理されます。適応 ストリーミング(SD 動画と HD 動画など)間でのシームレスです。 できます。
可能であれば、ライセンス サーバーがこの環境で動作するように設定することを推奨します。 できます。マルチキーの再生をサポートする最も効率的かつ堅牢な方法です。 クライアントが複数のライセンス リクエストを行う必要がないため さまざまなストリームにアクセスできます
ケース 2: ライセンス サーバーがリクエストされたキーのみを返す
この場合、ライセンス サーバーは、鍵のみを使って応答するように構成されています。
必要があります。マルチキー コンテンツはこのライセンスで再生できます
サーバーの設定に true
を
メディアの作成時: MediaItem.DrmConfiguration.Builder.setMultiSession
表示されます。
ライセンス サーバーがこのような動作をするように構成することはおすすめしません。これは、 マルチキー コンテンツを再生するために追加のライセンス リクエストが必要になり、 効率性と堅牢性に優れています
オフラインの鍵
オフラインの鍵セットは、鍵セット ID を
メディア アイテムの作成時に MediaItem.DrmConfiguration.Builder.setKeySetId
。
これにより、
表示されます。
クリア コンテンツの DRM セッション
プレースホルダ DrmSessions
を使用すると、ExoPlayer
で同じデコーダを
暗号化されたコンテンツの再生時に使用されるのと同じコンテンツを消去できます。メディアに
暗号化した部分の両方がある場合は、プレースホルダ DrmSessions
を使用することをおすすめします。
暗号化と暗号化の遷移時にデコーダが再作成されないように
セクションがあります。音声トラックと動画トラックにプレースホルダ DrmSessions
を使用すると、
有効にするには、true
を
次の場合: MediaItem.DrmConfiguration.Builder.forceSessionsForAudioAndVideoTracks
作成します。
カスタム DrmSessionManager を使用する
再生に使用する DrmSessionManager
をアプリでカスタマイズする場合は、次のようにします。
DrmSessionManagerProvider
を実装して
MediaSource.Factory
: プレーヤーをビルドするときに使用します。プロバイダは
毎回新しいマネージャー インスタンスをインスタンス化するかどうかを選択します。常に
同じインスタンスを使用します。
Kotlin
val customDrmSessionManager: DrmSessionManager = CustomDrmSessionManager() // Pass a drm session manager provider to the media source factory. val mediaSourceFactory = DefaultMediaSourceFactory(context).setDrmSessionManagerProvider { customDrmSessionManager }
Java
DrmSessionManager customDrmSessionManager = new CustomDrmSessionManager(/* ... */ ); // Pass a drm session manager provider to the media source factory. MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(context) .setDrmSessionManagerProvider(mediaItem -> customDrmSessionManager);
再生パフォーマンスの改善
DRM で保護されたコンテンツを Android 6.0(API レベル 23)以前のすべてのバージョンの Android を搭載したデバイス Android 11(API レベル 30)を含む Android デバイスでは、非同期バッファを有効にして、 キューイングをご覧ください。