Dokumen ini memberikan ringkasan tentang integrasi DRM dan antrean dukungan teknis IT.
Penyempurnaan DRM
Demo Cast ExoPlayer
telah diperbarui untuk memanfaatkan cara terstruktur
untuk meneruskan konfigurasi DRM menggunakan
MediaInfo
ExoPlayer ke aplikasi penerima. Contoh Cast
juga menggunakan penerima demo yang menyertakan kode
yang sama dalam ikhtisar ini, yang memungkinkan
menguji dukungan DRM. Namun, jika Anda ingin Mentransmisikan DRM
Anda harus membangun dan menghosting
Penerima Web.
Sebelum memulai, sebaiknya Anda memahami dokumentasi dukungan DRM dalam Google Cast dan ExoPlayer. Ikhtisar ini akan menunjukkan bagaimana untuk menghubungkan konfigurasi DRM ExoPlayer ke Penerima Web. Untuk informasi tentang cara menggunakan DRM di ExoPlayer, lihat Situs ExoPlayer.
Menyediakan konfigurasi DRM
Aplikasi demo ExoPlayer berisi kode contoh yang menunjukkan cara menyediakan DRM sebagai bagian dari MediaItem. Empat opsi yang dapat Anda konfigurasi adalah:
- Header - kamus header yang diterapkan ke permintaan HTTPS untuk mengambil lisensi DRM.
- URL lisensi - URL yang digunakan untuk memperoleh lisensi.
- Sistem Perlindungan - skema perlindungan DRM yang digunakan untuk melindungi konten, misalnya, Widevine.
Konfigurasi DRM yang Anda berikan ke ExoPlayer dikirim ke penerima Anda
aplikasi sebagai properti di customData
pada MediaInformation
sebagai bagian dari permintaan pemuatan. Secara default, properti ini disebut
exoPlayerConfig
, yang cocok dengan definisi berikut.
/**
* Extended configuration settings for ExoPlayer.
*/
ExoPlayerConfig class {
constructor() {
/**
* Dictionary of headers to apply to the license request.
* @type {!Object|undefined}
*/
this.headers;
/**
* The URL for your DRM server.
* @type {string|undefined}
*/
this.licenseUrl;
/**
* Preferred protection system to use for decrypting content.
* @type {!cast.framework.ContentProtection|undefined}
*/
this.protectionSystem;
/**
* Indicates whether CORS Access-Control requests should be made using
* credentials such as cookies or authorization headers.
*
* If withCredentials is set to true then Access-Control-Allow-Origin cannot
* be set to '*'.
* @type {boolean|undefined}
*/
this.withCredentials;
}
}
Penyiapan awal
Bergantung pada solusi DRM yang Anda gunakan, Anda mungkin perlu mengonfigurasi licenseRequestHandler
dan mediaPlaybackInfoHandler
. licenseRequestHandler
memungkinkan Anda menyesuaikan
bagaimana CAF meminta lisensi
dari server kunci lisensi Anda. Tujuan
mediaPlaybackInfoHandler
memungkinkan Anda mengubah
PlaybackConfig
untuk setiap item media jika, misalnya, setiap konten harus menggunakan
URL server lisensi yang berbeda.
Untuk mengambil salinan ExoPlayerConfig
dari setiap objek permintaan pemuatan, buat
pencegat permintaan pemuatan di aplikasi Web Receiver SDK.
Langkah pertama adalah mendaftarkan pengendali sebelum memulai Transmisi aplikasi.
const context = cast.framework.CastReceiverContext.getInstance();
const playbackConfig = new cast.framework.PlaybackConfig();
playbackConfig.licenseRequestHandler =
licenseRequestHandler;
context.getPlayerManager().setMediaPlaybackInfoHandler(
mediaPlaybackInfoHandler);
context.getPlayerManager().setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
loadInterceptor);
// starts the Cast application
context.start({playbackConfig: playbackConfig});
Intersepsi permintaan pemuatan
Pencegat permintaan pemuatan adalah callback yang memungkinkan Anda melihat dan mengubah Permintaan pemuatan Cast sebelum CAF mencoba memuat item media. Yang penting, dipanggil sebelum pemberi permintaan lisensi dan pengendali info pemutaran media.
Intersepsi permintaan pemuatan menerima LoadRequestData
yang berisi Exo Player Config yang dikirim oleh aplikasi Anda. Anda dapat
simpan objek ini sebagai variabel global untuk digunakan dalam pengendali permintaan lisensi
dan pengendali info pemutaran media.
loadInterceptor(loadRequestData) {
// not every load request will have a customData object
if (loadRequestData.media && loadRequestData.media.customData &&
loadRequestData.media.customData['exoPlayerConfig']) {
// exoPlayerConfig is a global variable here
exoPlayerConfig =
loadRequestData.media.customData['exoPlayerConfig'];
}
// you must return the loadRequestData object
return loadRequestData;
}
Pengendali permintaan lisensi
Pengendali permintaan lisensi memungkinkan Anda menyesuaikan permintaan HTTPS
Penerima menuju ke server lisensi Anda. Pengendali diberi NetworkRequestInfo
, yang dapat Anda gunakan untuk menambahkan header HTTP, menyertakan cookie, atau bahkan
mengubah URL. Pengendali akan menampilkan objek ini.
Misalnya, jika Anda perlu menambahkan header kustom ke permintaan lisensi, Anda dapat membuat pengendali permintaan lisensi yang mirip dengan ini:
licenseRequestHandler(networkRequestInfo) {
if (!exoPlayerConfig) {
return networkRequestInfo;
}
networkRequestInfo.headers =
exoPlayerConfig.headers ? exoPlayerConfig.headers : undefined;
return networkRequestInfo;
}
Pengendali info pemutaran media
Pengendali info pemutaran media memungkinkan Anda membuat perubahan pada pemutaran
konfigurasi per item media. Pengendali diberi LoadRequestData
dan PlaybackConfig
,
Anda harus mengembalikan
konfigurasi pemutaran. Pengendali info pemutaran media akan
dipanggil sebelum setiap item yang Anda Transmisikan dimuat. Jika Anda memiliki URL lisensi per konten,
bisa mengubahnya dan sistem
perlindungan sebelum beban.
mediaPlaybackInfoHandler(loadRequest, playbackConfig) {
if (!exoPlayerConfig) {
return;
}
playbackConfig.licenseUrl = exoPlayerConfig.licenseUrl ?
exoPlayerConfig.licenseUrl :
undefined;
playbackConfig.protectionSystem = exoPlayerConfig.protectionSystem ?
exoPlayerConfig.protectionSystem :
undefined;
return playbackConfig;
}
Aset lainnya
Setiap implementasi DRM bersifat kustom dan kode ini diberikan sebagai demonstrasi saja. Anda harus berkonsultasi dengan penyedia DRM untuk memastikan Anda telah mengimplementasikan DRM di aplikasi ExoPlayer dan Cast Anda.
Situs ExoPlayer menampilkan dokumentasi terbaru dan pengumuman. Masalah dengan ExoPlayer dan integrasi Cast-nya dapat dilaporkan di GitHub ExoPlayer repositori resource.