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.