Pengelolaan Hak Digital

ExoPlayer menggunakan MediaDrm API Android untuk mendukung pemutaran yang dilindungi DRM. Versi Android minimum yang diperlukan untuk berbagai skema DRM yang didukung, beserta dengan format streaming yang mendukung format tersebut, dijelaskan dalam tabel berikut:

Skema DRM Nomor versi Android Level Android API Format yang didukung
"cenc" Widevine 4.4 19 DASH, HLS (khusus FMP4)
Widevine "cbcs" 7.1 25 DASH, HLS (khusus FMP4)
"cenc" ClearKey 5,0 21 DASH
"cenc" SL2000 PlayReady Android TV Android TV DASH, SmoothStreaming, HLS (khusus FMP4)

Untuk memutar konten yang dilindungi DRM dengan ExoPlayer, UUID DRM sistem harus ditentukan saat membuat item media, dan lainnya properti juga dapat diberikan. Pemain kemudian akan menggunakan properti ini untuk membangun implementasi default DrmSessionManager, yang disebut DefaultDrmSessionManager, yang cocok untuk sebagian besar kasus penggunaan. Untuk beberapa penggunaan properti DRM tambahan mungkin diperlukan, sebagaimana diuraikan dalam bagian.

Rotasi tombol

Untuk memutar streaming dengan kunci yang dirotasi, teruskan true ke MediaItem.DrmConfiguration.Builder.setMultiSession saat membuat media yang bermanfaat.

Konten multi-kunci

Konten multi-kunci terdiri dari beberapa streaming. Beberapa streaming menggunakan kunci dibandingkan yang lain. Konten multi-tombol dapat diputar dengan salah satu dari dua cara, bergantung pada pada bagaimana server lisensi dikonfigurasi.

Kasus 1: Server lisensi merespons dengan semua kunci untuk konten

Dalam hal ini, server lisensi dikonfigurasi agar ketika menerima lisensi permintaan untuk satu kunci, maka akan respons dengan semua kunci untuk kontennya. Kasus ini adalah ditangani oleh ExoPlayer tanpa memerlukan konfigurasi khusus. Adaptasi streaming (misalnya video SD dan HD) berjalan lancar meskipun menggunakan tombol.

Jika memungkinkan, sebaiknya konfigurasi server lisensi Anda agar berfungsi dalam sebelumnya. Cara ini paling efisien dan andal untuk mendukung pemutaran multitombol karena tidak mengharuskan klien membuat beberapa permintaan lisensi untuk mengakses berbagai streaming.

Kasus 2: Server lisensi hanya merespons dengan kunci yang diminta

Dalam hal ini, server lisensi dikonfigurasi untuk merespons hanya dengan kunci yang ditentukan dalam permintaan. Konten multi-kunci dapat diputar dengan lisensi ini konfigurasi server dengan meneruskan true ke MediaItem.DrmConfiguration.Builder.setMultiSession saat membuat media yang bermanfaat.

Sebaiknya jangan mengonfigurasi server lisensi agar berperilaku seperti ini. Ini memerlukan permintaan lisensi tambahan untuk memutar konten multi-kunci, yang lebih efisien dan andal daripada alternatif yang dijelaskan di atas.

Kunci offline

Kumpulan kunci offline dapat dimuat dengan meneruskan ID kumpulan kunci ke MediaItem.DrmConfiguration.Builder.setKeySetId saat membuat item media. Hal ini memungkinkan pemutaran menggunakan kunci yang disimpan dalam kunci offline yang disetel dengan ID yang ditentukan.

Sesi DRM untuk konten yang jelas

Penggunaan placeholder DrmSessions memungkinkan ExoPlayer menggunakan dekoder yang sama untuk konten yang jelas seperti yang digunakan saat memutar konten terenkripsi. Saat media berisi baik yang jelas maupun terenkripsi, sebaiknya gunakan placeholder DrmSessions untuk menghindari pembuatan ulang decoder saat transisi antara terjadi. Penggunaan placeholder DrmSessions untuk trek audio dan video dapat diaktifkan dengan meneruskan true ke MediaItem.DrmConfiguration.Builder.forceSessionsForAudioAndVideoTracks saat membuat item media.

Menggunakan DrmSessionManager kustom

Jika aplikasi ingin menyesuaikan DrmSessionManager yang digunakan untuk pemutaran, aplikasi dapat implementasikan DrmSessionManagerProvider dan teruskan ke MediaSource.Factory yang digunakan saat membuat pemutar. Penyedia dapat memilih apakah akan membuat instance pengelola baru setiap kali atau tidak. Ke selalu menggunakan instance yang sama:

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);

Meningkatkan performa pemutaran

Jika Anda mengalami video tersendat saat memutar konten yang dilindungi DRM di perangkat yang menjalankan versi Android apa pun dari Android 6.0 (API level 23) hingga dan termasuk Android 11 (API level 30), Anda dapat mencoba mengaktifkan buffer asinkron pembuatan antrean.