Dieses Dokument bietet einen Überblick über die Unterstützung für die Warteschlangen- und DRM-Einbindung.
DRM-Verbesserungen
Die ExoPlayer-Cast-Demo wurde aktualisiert und enthält jetzt eine strukturierte Methode zur Weitergabe der DRM-Konfiguration mithilfe des MediaInfo
von ExoPlayer an eine Empfängeranwendung. Im Cast-Beispiel wird auch ein Demoempfänger verwendet, der denselben Code in dieser Übersicht enthält, sodass Sie die DRM-Unterstützung testen können. Wenn Sie jedoch DRM-geschützte Inhalte streamen möchten, sollten Sie Ihren eigenen Web Receiver erstellen und hosten.
Bevor du beginnst, solltest du dich mit der Dokumentation zur DRM-Unterstützung in Google Cast und ExoPlayer vertraut machen. In dieser Übersicht erfahren Sie, wie Sie die ExoPlayer-DRM-Konfiguration mit einem Web Receiver verbinden. Informationen zur Verwendung von DRM in ExoPlayer finden Sie auf der offiziellen ExoPlayer-Website.
DRM-Konfiguration bereitstellen
Die ExoPlayer-Demo-App enthält Beispielcode, der zeigt, wie die DRM-Konfiguration als Teil eines MediaItems bereitgestellt wird. Folgende vier Optionen können konfiguriert werden:
- Headers: Ein Wörterbuch der Header, die auf die HTTPS-Anfrage zum Abrufen der DRM-Lizenz angewendet werden.
- License URL (Lizenz-URL): Die URL, über die die Lizenz erworben wurde.
- Protection System: Das DRM-Schutzschema, das zum Schutz der Inhalte verwendet wird, z. B. Widevine.
Die DRM-Konfiguration, die du ExoPlayer zur Verfügung stellst, wird als Teil einer Ladeanfrage als Attribut in customData
für das Objekt MediaInformation
an deine Empfängeranwendung gesendet. Standardmäßig heißt dieses Attribut 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
und eine mediaPlaybackInfoHandler
konfigurieren. Mit licenseRequestHandler
kannst du anpassen, wie CAF eine Lizenz von deinem Lizenzschlüsselserver anfordert. Mit mediaPlaybackInfoHandler
können Sie PlaybackConfig
für einzelne Medienelemente ändern, wenn beispielsweise für jeden Inhalt eine andere Lizenzserver-URL verwendet werden muss.
Erstellen Sie in Ihrer Web Receiver SDK-Anwendung einen Interceptor für Ladeanfragen, um eine Kopie von ExoPlayerConfig
aus jedem Ladeanfrageobjekt zu erfassen.
Der erste Schritt besteht darin, die Handler zu registrieren, bevor Sie Ihre Cast-Anwendung starten.
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});
Anfrage-Abfanggerät laden
Das Abfangen von Ladeanfragen ist ein Callback, mit dem Sie eine Cast-Ladeanfrage aufrufen und ändern können, bevor CAF versucht, ein Medienelement zu laden. Wichtig ist, dass sie vor dem Lizenzanforderungsaussteller und dem Info-Handler zur Medienwiedergabe aufgerufen wird.
Dem Interceptor der Ladeanfrage wird ein LoadRequestData
-Objekt übergeben, das die von deiner App gesendete Exo Player-Konfiguration enthält. Du kannst dieses Objekt als globale Variable zur Verwendung in deinem Lizenzanfrage-Handler und Info-Handler für die Medienwiedergabe speichern.
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 kannst du die HTTPS-Anfrage, die WebReceiver an deinen Lizenzserver stellt, anpassen. An den Handler wird ein NetworkRequestInfo
-Objekt übergeben, mit dem Sie dann HTTP-Header hinzufügen, Cookies einfügen oder sogar die URL ändern können. Der Handler sollte dieses Objekt zurückgeben.
Wenn Sie Ihrer Lizenzanfrage beispielsweise benutzerdefinierte Header hinzufügen müssen, können Sie einen Lizenzanfrage-Handler wie diesen erstellen:
licenseRequestHandler(networkRequestInfo) {
if (!exoPlayerConfig) {
return networkRequestInfo;
}
networkRequestInfo.headers =
exoPlayerConfig.headers ? exoPlayerConfig.headers : undefined;
return networkRequestInfo;
}
Info-Handler für die Medienwiedergabe
Mit dem Info-Handler für die Medienwiedergabe können Sie Änderungen an Ihrer Wiedergabekonfiguration für einzelne Elemente vornehmen. Wenn dem Handler ein LoadRequestData
und ein PlaybackConfig
übergeben werden, sollten Sie eine Wiedergabekonfiguration zurückgeben. Der Info-Handler für die Medienwiedergabe wird aufgerufen, bevor jedes gestreamte Element geladen wird. Wenn Sie inhaltsspezifische Lizenz-URLs hatten, können Sie diese 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 und dieser Code dient nur zu Demonstrationszwecken. Wenden Sie sich an Ihren DRM-Anbieter, um sicherzustellen, dass Sie die digitale Rechteverwaltung in Ihren ExoPlayer- und Cast-Anwendungen korrekt implementiert haben.
Auf der ExoPlayer-Website finden Sie die aktuelle Dokumentation und Ankündigungen. Probleme mit ExoPlayer und dessen Cast-Integration können im GitHub-Repository von ExoPlayer gemeldet werden.