Integration von ExoPlayer

Dieses Dokument bietet einen Überblick über die Integration von Warteschlangen und DRM Support.

Verbesserungen der digitalen Rechteverwaltung

Demo für ExoPlayer-Cast wurde aktualisiert, um die DRM-Konfiguration auf strukturierte Weise mit MediaInfo von ExoPlayer an eine Empfängeranwendung. Cast-Beispiel verwendet auch einen Demoempfänger, der den gleichen Code in dieser Übersicht enthält. die DRM-Unterstützung zu testen. Wenn Sie jedoch DRM-geschützt erstellen und hosten Sie Ihre eigenen Web Receiver:

Bevor Sie beginnen, sollten Sie sich mit den Dokumentation zur Unterstützung der digitalen Rechteverwaltung in Google Cast und ExoPlayer. In dieser Übersicht erfahren Sie, um die ExoPlayer DRM-Konfiguration mit einem Web Receiver zu verbinden. Weitere Informationen zur Nutzung von DRM in ExoPlayer ExoPlayer-Website

DRM-Konfiguration bereitstellen

Die ExoPlayer-Demo-App enthält Beispielcode, der zeigt, wie DRM zur Verfügung gestellt wird -Konfiguration als Teil eines MediaItems. Sie können vier Optionen konfigurieren:

  • Headers – ein Wörterbuch mit Headern, die auf die HTTPS-Anfrage für die DRM-Lizenz abzurufen.
  • Lizenz-URL: Die URL, über die die Lizenz erworben wurde.
  • Schutzsystem: das DRM-Schutzsystem, das zum Schutz der Inhalte, z. B. Widevine.

Die DRM-Konfiguration, die Sie für ExoPlayer angeben, wird an Ihren Empfänger gesendet Anwendung als Property in customData in der MediaInformation -Objekt im Rahmen einer Ladeanfrage. Standardmäßig wird diese Eigenschaft als exoPlayerConfig, was der folgenden Definition entspricht.

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

Ersteinrichtung

Je nach verwendeter DRM-Lösung müssen Sie möglicherweise eine licenseRequestHandler konfigurieren. und mediaPlaybackInfoHandler. Mit licenseRequestHandler können Sie wie CAF eine Lizenz von Ihrem Lizenzschlüsselserver anfordert. Die Mit mediaPlaybackInfoHandler können Sie Folgendes ändern: PlaybackConfig pro Medienelement, wenn zum Beispiel jeder Inhalt ein eine andere Lizenzserver-URL.

Um eine Kopie von ExoPlayerConfig aus jedem Ladeanfrageobjekt zu erfassen, erstellen Sie in Ihrer Web Receiver SDK-Anwendung ein Abfangen von Ladeanfragen.

Der erste Schritt besteht darin, die Handler vor dem Streamen zu registrieren. .

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

Abfangfunktion für Ladeanfragen

Beim Abfangen von Ladeanfragen handelt es sich um einen Callback, mit dem Sie eine Anfrage zum Streamen des Streams, bevor CAF versucht, ein Medienelement zu laden. Wichtig ist, dass es , die vor dem Handler für die Lizenzanforderung und dem Handler für die Medienwiedergabedaten aufgerufen wurden.

Dem Interceptor von Ladeanfragen wird ein LoadRequestData-Wert übergeben. -Objekt, das die von Ihrer App gesendete Exo Player-Konfiguration enthält. Sie können Dieses Objekt als globale Variable zur Verwendung in Ihrem Lizenzanfrage-Handler speichern und der Info-Handler für die Medienwiedergabe.

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

Handler für Lizenzanfragen

Mit dem Lizenzanfrage-Handler können Sie die HTTPS-Anfrage im Web anpassen Der Empfänger sendet an Ihren Lizenzserver. Dem Handler wird ein NetworkRequestInfo-Element übergeben, mit dem Sie dann HTTP-Header, Cookies oder sogar ändern Sie die URL. Der Handler sollte dieses Objekt zurückgeben.

Wenn du z. B. deiner Lizenzanfrage benutzerdefinierte Header hinzufügen musst, könnte einen Lizenzanfrage-Handler ähnlich dem folgenden erstellen:

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

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

    return networkRequestInfo;
}

Handler für Informationen zur Medienwiedergabe

Mit dem Handler für Medienwiedergabeinformationen kannst du Änderungen an deiner Wiedergabe vornehmen pro Medienelement. Dem Handler wird ein LoadRequestData-Element übergeben, und PlaybackConfig, sollte eine Wiedergabekonfiguration zurückgegeben werden. Der Handler für die Medienwiedergabe aufgerufen wird, bevor jedes gestreamte Element geladen wird. Wenn du Lizenz-URLs pro Inhalt hattest, und das Schutzsystem vor dem Laden ändern.

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

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

    return playbackConfig;
}

Weitere Ressourcen

Jede DRM-Implementierung ist benutzerdefiniert. Dieser Code dient zu Demonstrationszwecken. . Wenden Sie sich an Ihren DRM-Anbieter, um sicherzustellen, DRM in Ihren ExoPlayer- und Cast-Anwendungen implementiert.

Die ExoPlayer-Website enthält die aktuelle Dokumentation. und Ankündigungen. Mögliche Probleme mit ExoPlayer und der Cast-Integration im ExoPlayer GitHub zu erstellen.