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 format streaming yang mendukungnya, 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 sistem DRM harus ditentukan saat mem-build item media, dan properti lainnya juga dapat disediakan. Kemudian, pemutar akan menggunakan properti ini untuk mem-build implementasi default DrmSessionManager, yang disebut DefaultDrmSessionManager, yang cocok untuk sebagian besar kasus penggunaan. Untuk beberapa kasus penggunaan, properti DRM tambahan mungkin diperlukan, seperti yang diuraikan di bagian berikut.

Rotasi tombol

Untuk memutar streaming dengan tombol yang berputar, teruskan true ke MediaItem.DrmConfiguration.Builder.setMultiSession saat membuat item media.

Konten multi-kunci

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

Kasus 1: Server lisensi merespons dengan semua kunci untuk konten

Dalam hal ini, server lisensi dikonfigurasi sehingga saat menerima permintaan untuk satu kunci, server tersebut akan merespons dengan semua kunci untuk konten tersebut. Kasus ini ditangani oleh ExoPlayer tanpa perlu konfigurasi khusus apa pun. Adaptasi antar-streaming (misalnya, video SD dan HD) berjalan lancar meskipun menggunakan tombol berbeda.

Jika memungkinkan, sebaiknya konfigurasi server lisensi Anda agar berperilaku dengan cara ini. Cara ini paling efisien dan andal untuk mendukung pemutaran konten multikunci, karena tidak mengharuskan klien membuat beberapa permintaan lisensi untuk mengakses streaming yang berbeda.

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 menggunakan konfigurasi server lisensi ini dengan meneruskan true ke MediaItem.DrmConfiguration.Builder.setMultiSession saat membuat item media.

Sebaiknya jangan mengonfigurasi server lisensi agar berperilaku seperti ini. Hal ini memerlukan permintaan lisensi tambahan untuk memutar konten multi-kunci, yang kurang efisien dan andal dibandingkan 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 jelas seperti yang digunakan saat memutar konten terenkripsi. Jika media berisi bagian yang jelas dan terenkripsi, Anda dapat menggunakan placeholder DrmSessions untuk menghindari pembuatan ulang decoder saat terjadi transisi antara bagian yang jelas dan terenkripsi. 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 ingin menyesuaikan DrmSessionManager yang digunakan untuk pemutaran, aplikasi dapat mengimplementasikan DrmSessionManagerProvider dan meneruskannya ke MediaSource.Factory yang digunakan saat membuat pemutar. Penyedia dapat memilih apakah akan membuat instance pengelola baru setiap kali diperlukan atau tidak. Untuk 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 video tersendat saat memutar konten yang dilindungi DRM di perangkat yang menjalankan versi Android apa pun mulai dari Android 6.0 (API level 23) hingga dan termasuk Android 11 (API level 30), Anda dapat mencoba mengaktifkan antrean buffer asinkron.