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) |
"cenc" ClearKey | 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
dan URI server lisensi harus ditentukan
saat membuat item media.
Kemudian, pemain 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 kunci
Untuk memutar streaming dengan kunci yang berputar, teruskan true
ke
MediaItem.DrmConfiguration.Builder.setMultiSession
saat membuat item
media.
Konten multikunci
Konten multikunci terdiri dari beberapa streaming, tempat beberapa streaming menggunakan kunci yang berbeda dari yang lainnya. Konten multikunci dapat diputar dengan salah satu dari dua cara, bergantung pada konfigurasi server lisensi.
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 apa pun. Adaptasi antara streaming (misalnya, video SD dan HD) berjalan lancar meskipun menggunakan kunci yang berbeda.
Jika memungkinkan, sebaiknya konfigurasikan server lisensi Anda untuk berperilaku dengan cara ini. Ini adalah cara paling efisien dan efektif untuk mendukung pemutaran konten multikunci, karena klien tidak perlu membuat beberapa permintaan lisensi untuk mengakses streaming yang berbeda.
Kasus 2: Server lisensi merespons dengan kunci yang diminta saja
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 untuk berperilaku seperti ini. Diperlukan permintaan lisensi tambahan untuk memutar konten multi-kunci, yang kurang efisien dan kuat 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 agar
konten yang jelas seperti yang digunakan saat memutar konten terenkripsi. Jika media berisi
bagian yang jelas dan terenkripsi, Anda mungkin perlu menggunakan placeholder DrmSessions
untuk menghindari pembuatan ulang dekoder saat 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
mem-build 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 saat 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 mengalami ketersendatan video 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 antrean buffer asinkron.