Integrasi ExoPlayer

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.