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 didukung, dijelaskan dalam tabel berikut:
| Skema DRM | Nomor versi Android | Level Android API | Format yang didukung |
|---|---|---|---|
| Widevine "cenc" | 4.4 | 19 | DASH, HLS (khusus FMP4) |
| Widevine "cbcs" | 7.1 | 25 | DASH, HLS (khusus FMP4) |
| ClearKey "cenc" | 5,0 | 21 | DASH |
| PlayReady SL2000 "cenc" | Android TV | Android TV | DASH, SmoothStreaming, HLS (khusus FMP4) |
Untuk memutar konten yang dilindungi DRM dengan ExoPlayer, UUID sistem DRM harus ditentukan
saat membuat item media, dan properti
lainnya juga dapat diberikan. Kemudian, pemutar akan menggunakan properti ini untuk
membangun penerapan 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 kunci
Untuk memutar streaming dengan kunci yang dirotasi, teruskan true ke
MediaItem.DrmConfiguration.Builder.setMultiSession saat membuat item
media.
Konten multi-kunci
Konten multi-kunci terdiri dari beberapa streaming, di mana beberapa streaming menggunakan kunci yang berbeda dengan yang lain. Konten multi-kunci 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 akan merespons dengan semua kunci untuk konten. Kasus ini ditangani oleh ExoPlayer tanpa memerlukan konfigurasi khusus. Adaptasi antar-streaming (misalnya, video SD dan HD) lancar meskipun menggunakan kunci yang berbeda.
Jika memungkinkan, sebaiknya konfigurasi server lisensi Anda agar berperilaku seperti ini. Ini adalah cara paling efisien dan andal untuk mendukung pemutaran konten multikey, 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 konfigurasi server
lisensi ini dengan meneruskan true ke
MediaItem.DrmConfiguration.Builder.setMultiSession saat membuat item
media.
Sebaiknya jangan mengonfigurasi server lisensi Anda 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
Set kunci offline dapat dimuat dengan meneruskan ID set kunci ke
MediaItem.DrmConfiguration.Builder.setKeySetId saat membuat item media.
Hal ini memungkinkan pemutaran menggunakan kunci yang disimpan dalam set kunci offline 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. Jika media berisi bagian yang jelas dan terenkripsi, Anda dapat menggunakan placeholder DrmSessions untuk menghindari pembuatan ulang dekoder saat transisi antara bagian yang jelas dan terenkripsi terjadi. Penggunaan DrmSessions placeholder 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 menerapkan DrmSessionManagerProvider dan meneruskannya ke MediaSource.Factory yang digunakan saat membuat pemutar. Penyedia dapat memilih apakah akan membuat instance pengelola baru setiap kali 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 Anda mengalami video tersendat saat memutar konten yang dilindungi DRM di perangkat yang menjalankan versi Android apa pun dari Android 6.0 (level API 23) hingga dan termasuk Android 11 (level API 30), Anda dapat mencoba mengaktifkan antrean buffer asinkron.