Voraussetzungen
Bevor Sie Offline-DRM für FairPlay auf einem iOS 10+-Gerät implementieren:
- Lesen Der Lizenzanforderungen und der Konfiguration von Apple FairPlay
- Rufen Sie das FPS SDK über das Apple Developer Network ab. Das FPS SDK enthält zwei Komponenten:
- FPS Server SDK, das KSM (Key Security Module), Clientbeispiele, eine Spezifikation und eine Reihe von Testvektoren enthält.
- Das FPS-Bereitstellungspaket, das die D-Funktionsspezifikation sowie Anweisungen zum Generieren des kundenspezifischen privaten Schlüssels des FPS-Zertifikats und des geheimen Anwendungsschlüssels enthält. Apple gibt das FPS Deployment Pack nur an lizenzierte Inhaltsanbieter aus.
- Die DER-/CER-Zertifikatdateien, die Sie im Rahmen der Erstellung des FPS-Zertifikats erhalten, enthalten einen öffentlichen Schlüssel und können dem Client zur Verfügung gestellt werden. Der private Schlüssel (PFX) sollte in Azure Key Vault oder an einem anderen sicheren Ort gesichert werden.
Speichern eines privaten FairPlay-Schlüssels (PFX) in Azure Key Vault
Der private Schlüssel (PFX), den Sie von Apple erhalten, sollte als sicheres Zertifikat behandelt werden. Er kann in Azure Key Vault gespeichert werden.
- Die PFX-Zertifikatdatei sollte zuerst vom Administrator in eine Base64-codierte Textdatei konvertiert werden.
- Nach der Konvertierung kann diese Datei in Azure DevOps Services als sichere Textdatei gespeichert werden.
- Die Zeichenfolge kann dann manuell in Azure KeyVault als „Geheimnisobjekt“ oder als Teil eines Bereitstellungs-/Buildskripts für Ihre Lösung gespeichert werden. Ein Beispiel zum Speichern des privaten FairPlay-Zertifikats in Azure KeyVault finden Sie im Beispielcode für das Gridwich-Projekt.
- Speichern Sie das Kennwort für die PFX-Datei optional als Geheimnis im Schlüsseltresor.
CLI-Beispielskript
So kopieren Sie die Base64-codierte Datei des privaten Schlüssels in azure KeyVault:
set -eu
echo key vault : $SHARED_KV_NAME
echo "Copying FairPlay certificate to key vault as secret"
az keyvault secret set --vault-name $SHARED_KV_NAME -n ams-fairPlay-certificate-b64 -f $(FairPlayCertificate.secureFilePath) --output none
Klonen des Beispiels
Klonen Sie die Media Services .NET-Beispiele.
git clone https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git
Bearbeiten des Codes
Ändern Sie den Code in Verschlüsseln mit DRM mithilfe von .NET , um FairPlay-Konfigurationen hinzuzufügen.
Hinweis
Widevine ist in der Region „GovCloud“ nicht verfügbar.
Voraussetzungen
Vor der Implementierung von Offline-DRM für Widevine auf Android-Geräten sollten Sie zunächst folgende Schritte durchführen:
- Machen Sie sich mit den Konzepten vertraut, die zum Schutz von Onlineinhalten mit Widevine DRM eingeführt werden.
- Klonen https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git.
- Machen Sie sich mit dem Google ExoPlayer SDK für Android vertraut. Hierbei handelt es sich um ein Open-Source-Videoplayer-SDK, das die Offlinewiedergabe von durch Widevine DRM geschützten Inhalten unterstützt.
Aktivieren des Offlinemodus
Um den Offlinemodus für Widevine-Lizenzen zu aktivieren, konfigurieren Sie die Widevine-Lizenzvorlage. Legen Sie im policy_overrides-Objekt die can_persist-Eigenschaft auf true fest, wie in ConfigureWidevineLicenseTemplate gezeigt.
Eine native Player-App für Android-Geräte lässt sich am einfachsten mithilfe des Google ExoPlayer SDK (einem Open-Source-Videoplayer-SDK) entwickeln. ExoPlayer unterstützt Features, die bislang von der nativen MediaPlayer-API von Android nicht unterstützt werden. Hierzu zählen unter anderem das MPEG-DASH- und das Microsoft Smooth Streaming-Übermittlungsprotokoll.
Ab Version 2.6 enthält ExoPlayer zahlreiche Klassen, die die Offlinewiedergabe von durch Widevine DRM geschützten Inhalten unterstützen. Insbesondere bietet die OfflineLicenseHelper
-Klasse Hilfsfunktionen, um die Verwendung von DefaultDrmSessionManager zum Herunterladen, Verlängern und Freigeben von Offlinelizenzen zu erleichtern. Die im SDK-Ordner library/core/src/main/java/com/google/android/exoplayer2/offline/
bereitgestellten Klassen unterstützen das Herunterladen von Offlinevideoinhalten.
Folgende Klassen vereinfachen die Verwendung des Offlinemodus im ExoPlayer SDK für Android:
library/core/src/main/java/com/google/android/exoplayer2/drm/OfflineLicenseHelper.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/ErrorStateDrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java
library/core/src/main/java/com/google/android/exoplayer2/offline/SegmentDownloader.java
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloaderConstructorHelper.java
library/core/src/main/java/com/google/android/exoplayer2/offline/Downloader.java
library/dash/src/main/java/com/google/android/exoplayer2/source/dash/offline/DashDownloader.java
Entwickler sollten während der Anwendungsentwicklung das ExoPlayer-Entwicklerhandbuch und den entsprechenden Entwicklerblog heranziehen.
Verwenden älterer Android-Geräte
Für einige ältere Android-Geräte müssen Sie Werte für die folgenden (in der Widevine-Lizenzvorlage definierten) Eigenschaften von policy_overrides festlegen: rental_duration_seconds, playback_duration_seconds und license_duration_seconds. Alternativ können Sie sie auf 0
festlegen, was bedeutet, dass es keine Zeiteinschränkung gibt.
Warnung
Die Werte müssen festgelegt werden, um einen Ganzzahlüberlauffehler zu vermeiden. Weitere Erläuterungen zu diesem Problem finden Sie unter https://github.com/google/ExoPlayer/issues/3150 und https://github.com/google/ExoPlayer/issues/3112.
Wenn Sie die Werte nicht explizit festlegen, werden für PlaybackDurationRemaining und LicenseDurationRemaining sehr große Werte zugewiesen (beispielsweise „9223372036854775807“ – der größtmögliche positive Wert für eine 64-Bit-Ganzzahl). Dadurch scheint die Widevine-Lizenz abgelaufen zu sein, und es findet keine Entschlüsselung statt.
Dieses Problem tritt ab Android 5.0 Lollipop nicht mehr auf, da es sich bei Android 5.0 um die erste Android-Version mit uneingeschränkter Unterstützung von ARMv8 (Advanced RISC Machine) und 64-Bit-Plattformen handelt. Android 4.4 KitKat und ältere Versionen waren dagegen ursprünglich für die Unterstützung von ARMv7 und 32-Bit-Plattformen konzipiert.
Verwenden von Xamarin zum Erstellen einer Android-Wiedergabe-App
Xamarin-Bindungen für ExoPlayer finden Sie unter den folgenden Links:
Weitere Informationen finden Sie in folgendem Thema: Xamarin-Bindung.
Chrome Player-Apps für Android
Ab Chrome für Android v. 62 werden permanente Lizenzen in EME unterstützt.
Widevine L1 wird nun auch in Chrome für Android unterstützt. Dadurch können Sie Offlinewiedergabeanwendungen in Chrome erstellen, wenn Ihre Endbenutzer mindestens über diese Chrome-Version verfügen.
Darüber hinaus hat Google ein Beispiel für progressive Web-App (PWA) erstellt:
Wenn Sie Ihren mobilen Chrome-Browser auf einem Android-Smartphone mindestens auf die Version 62 upgraden und die oben erwähnte gehostete Beispiel-App testen, sehen Sie, dass sowohl das Onlinestreaming als auch die Offlinewiedergabe funktioniert.
Die oben erwähnte Open-Source-PWA-App wurde in Node.js erstellt. Wenn Sie eine eigene Version auf einem Ubuntu-Server hosten möchten, beachten Sie die folgenden allgemeinen Probleme, die die Wiedergabe verhindern können:
- CORS-Problem: Das Beispielvideo in der Beispiel-App wird in https://storage.googleapis.com/biograf-video-files/videos/ gehostet. Google hat CORS für alle Testbeispiele eingerichtet, die im Google Cloud Storage-Bucket gehostet werden. Sie werden mit CORS-Headern bereitgestellt, die explizit den CORS-Eintrag angeben:
https://biograf-155113.appspot.com
(die Domäne, in der Google das Beispiel hostet). Dadurch wird der Zugriff durch andere Sites verhindert. Wenn Sie es versuchen, wird der folgende HTTP-Fehler ausgegeben: Failed to load https://storage.googleapis.com/biograf-video-files/videos/poly-sizzle-2015/mp4/dash.mpd: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https:\//13.85.80.81:8080' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
- Zertifikatsproblem: Ab der Chrome-Version 58 wird von EME für Widevine HTTPS benötigt. Daher muss die Beispiel-App mit einem X.509-Zertifikat über HTTPS gehostet werden. Ein herkömmliches Testzertifikat funktioniert aufgrund der folgenden Anforderungen nicht: Sie müssen ein Zertifikat abrufen, dass die folgenden Mindestanforderungen erfüllt:
- Für Chrome und Firefox muss das Zertifikat die Einstellung für den alternativen Antragstellernamen (Subject Alternative Name, SAN) enthalten.
- Das Zertifikat muss über eine vertrauenswürdige Zertifizierungsstelle verfügen. Ein selbstsigniertes Entwicklungszertifikat kann nicht verwendet werden.
- Der allgemeine Name (Common Name, CN) des Zertifikats muss dem DNS-Namen des Webservers oder Gateways entsprechen.
Das Smooth Streaming-Dateiformat (PIFF) mit H264/AAC bietet eine Bindung mit PlayReady (AES-128-CTR). Die .ismv-Datei für das reibungslose Streaming, vorausgesetzt, audio wird in Video muxed, ist selbst ein fMP4 und kann für die Wiedergabe verwendet werden. Wenn smooth streaming-Inhalte die PlayReady-Verschlüsselung durchlaufen, wird jede ISMV-Datei zu einem durch PlayReady geschützten MP4-Fragment. Sie können eine ISMV-Datei mit der bevorzugten Bitrate auswählen und als .mp4 zum Download umbenennen.
Es gibt zwei Möglichkeiten, die mit PlayReady geschützte MP4-Datei für den progressiven Download bereitzustellen:
- Sie können mp4 im gleichen Container/Mediendienstobjekt platzieren und den Azure Media Services-Streamingendpunkt für den progressiven Download verwenden.
- Sie können die SAS-URL für den progressiven Download direkt aus Azure Storage verwenden.
Es gibt zwei Arten von PlayReady-Lizenzübermittlung:
- PlayReady-Lizenzübermittlungsdienst in Azure Media Services
- An beliebiger Stelle gehosteter PlayReady-Lizenzserver
Informationen zum Abrufen einer PlayReady-Lizenz mit dem AMS-Übermittlungsdienst finden Sie in der Lizenzvorlage Media Services v3 mit PlayReady.
Zum Testen der Wiedergabe können Sie eine universelle Windows-Anwendung unter Windows 10 verwenden. Unter Windows 10 Universal Sample auf GitHub finden Sie ein einfaches Beispiel für einen Player namens Adaptive Streaming Sample. Fügen Sie den Code zur Auswahl des heruntergeladenen Videos hinzu und verwenden Sie es als Quelle (statt der Quelle für adaptives Streaming).