ExoPlayer Entegrasyonu

Bu dokümanda, sıralama ve DRM entegrasyonu desteğine genel bir bakış sunulmaktadır.

DRM geliştirmeleri

ExoPlayer Cast Demo, ExoPlayer'ın MediaInfo kodunu kullanarak DRM yapılandırmasını bir alıcı uygulamaya geçirmek için yapılandırılmış bir yöntem kullanacak şekilde güncellenmiştir. Yayın örneği aynı zamanda bu genel bakıştaki aynı kodu içeren bir demo alıcı da kullanır. Böylece DRM desteğini test edebilirsiniz. Ancak, DRM korumalı içeriği yayınlamak isterseniz kendi Web Alıcınızı oluşturmanız ve barındırmanız gerekir.

Başlamadan önce, Google Cast ve ExoPlayer'daki DRM desteğiyle ilgili belgeleri öğrenmeniz yararlı olacaktır. Bu genel bakışta, ExoPlayer DRM yapılandırmasını bir Web Alıcısına nasıl bağlayacağınız gösterilmektedir. ExoPlayer'da DRM'nin nasıl kullanılacağı hakkında daha fazla bilgi için resmi ExoPlayer web sitesine bakın.

DRM yapılandırmasını sağlama

ExoPlayer demo uygulaması, bir MediaItem parçası olarak DRM yapılandırmasının nasıl sağlanacağını gösteren örnek kod içerir. Yapılandırabileceğiniz dört seçenek şunlardır:

  • Üstbilgiler: DRM lisansını almak için HTTPS isteğine uygulanan üst bilgileri içeren bir sözlüktür.
  • Lisans URL'si - lisansı edinmek için kullanılan URL.
  • Koruma Sistemi: İçeriği korumak için kullanılan DRM koruma şeması, örneğin Widevine.

ExoPlayer'a sağladığınız DRM yapılandırması, bir yükleme isteği kapsamında alıcı uygulamanıza MediaInformation nesnesindeki customData içinde bir özellik olarak gönderilir. Varsayılan olarak bu özelliğin adı exoPlayerConfig şeklindedir ve aşağıdaki tanımla eşleşir.

/**
 * 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;
  }
}

İlk kurulum

Kullandığınız DRM çözümüne bağlı olarak, licenseRequestHandler ve mediaPlaybackInfoHandler yapılandırmanız gerekebilir. licenseRequestHandler, CAF'nin lisans anahtarı sunucunuzdan lisans isteme şeklini özelleştirmenize olanak tanır. mediaPlaybackInfoHandler, örneğin her içerik parçasının farklı bir lisans sunucusu URL'si kullanması gerekiyorsa PlaybackConfig öğesini her medya öğesi için ayrı ayrı değiştirmenize olanak tanır.

Her yükleme isteği nesnesinden ExoPlayerConfig öğesinin bir kopyasını yakalamak için Web Receiver SDK uygulamanızda bir yükleme isteği müdahale aracı oluşturun.

İlk adım, Cast uygulamanızı başlatmadan önce işleyicilerinizi kaydetmektir.

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});

Yükleme isteği müdahale aracı

Yük isteği müdahale aracı, CAF bir medya öğesini yüklemeyi denemeden önce yayın yükleme isteğini görüntülemenize ve değiştirmenize olanak tanıyan bir geri çağırmadır. Önemli bir nokta da bu, lisans isteği sahibinden ve medya oynatma bilgi işleyicisinden önce çağrılmasıdır.

Yük isteği müdahale aracına, uygulamanız tarafından gönderilen Exo Player Yapılandırması'nı içeren bir LoadRequestData nesnesi iletilir. Bu nesneyi, lisans isteği işleyicinizde ve medya oynatma bilgi işleyicinizde kullanmak üzere genel değişken olarak kaydedebilirsiniz.

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;
}

Lisans isteği işleyici

Lisans isteği işleyici, Web Alıcısı'nın lisans sunucunuza gönderdiği HTTPS isteğini özelleştirmenize olanak tanır. İşleyiciye bir NetworkRequestInfo nesnesi iletilir. Bu nesneyi daha sonra HTTP üst bilgileri eklemek, çerez eklemek, hatta URL'yi değiştirmek için kullanabilirsiniz. İşleyici bu nesneyi döndürmelidir.

Örneğin, lisans isteğinize özel üstbilgiler eklemeniz gerekiyorsa aşağıdakine benzer bir lisans isteği işleyici oluşturabilirsiniz:

licenseRequestHandler(networkRequestInfo) {
    if (!exoPlayerConfig) {
        return networkRequestInfo;
    }

    networkRequestInfo.headers =
            exoPlayerConfig.headers ? exoPlayerConfig.headers : undefined;

    return networkRequestInfo;
}

Medya oynatma bilgi işleyici

Medya oynatma bilgi işleyici, her medya öğesi için oynatma yapılandırmanızda değişiklik yapmanıza olanak tanır. İşleyici bir LoadRequestData ve bir PlaybackConfig iletilmişse bir oynatma yapılandırması döndürmeniz gerekir. Medya oynatma bilgi işleyici, Yayınladığınız her öğe yüklenmeden önce çağrılır. İçerik başına lisans URL'leriniz varsa bunları yüklemeden önce ve koruma sistemini değiştirebilirsiniz.

mediaPlaybackInfoHandler(loadRequest, playbackConfig) {
    if (!exoPlayerConfig) {
        return;
    }

    playbackConfig.licenseUrl = exoPlayerConfig.licenseUrl ?
            exoPlayerConfig.licenseUrl :
            undefined;
    playbackConfig.protectionSystem = exoPlayerConfig.protectionSystem ?
            exoPlayerConfig.protectionSystem :
            undefined;

    return playbackConfig;
}

Diğer kaynaklar

Her DRM uygulaması özeldir ve bu kod yalnızca gösterim amaçlıdır. DRM'yi ExoPlayer ve Cast uygulamalarınızda doğru bir şekilde uyguladığınızdan emin olmak için DRM sağlayıcınıza danışmalısınız.

ExoPlayer’ın Web Sitesi güncel belgeler ve duyurular içerir. ExoPlayer ve Cast entegrasyonuyla ilgili sorunlar ExoPlayer'ın GitHub deposunda bildirilebilir.