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.