Vereisten
Voordat u offline DRM voor FairPlay implementeert op een iOS 10+-apparaat:
-
Licentievereisten en -configuratie voor Apple FairPlay lezen
- Verkrijg de FPS SDK van het Apple Developer Network. De FPS SDK bevat twee onderdelen:
- De FPS Server SDK, die de Key Security Module (KSM), clientvoorbeelden, een specificatie en een set testvectoren bevat.
- Het FPS-implementatiepakket, dat de D-functiespecificatie bevat, samen met instructies over het genereren van de klantspecifieke persoonlijke sleutel van het FPS-certificaat en de toepassingsgeheime sleutel. Apple geeft het FPS-implementatiepakket alleen uit aan gelicentieerde inhoudsproviders.
- De .der/.cer-certificaatbestanden die u ontvangt als onderdeel van het genereren van het FPS-certificaat bevatten een openbare sleutel en kunnen beschikbaar worden gesteld aan de client. De persoonlijke sleutel (.pfx) moet worden beveiligd in Azure Key Vault of een andere beveiligde locatie.
Een persoonlijke FairPlay-sleutel (.pfx) opslaan in Azure Key Vault
De persoonlijke sleutel (.pfx) die u van Apple ontvangt, moet worden behandeld als een beveiligd certificaat en kan worden opgeslagen in de Azure Key Vault.
- Het PFX-certificaatbestand moet eerst door de beheerder worden geconverteerd naar het base 64-tekstbestand
- Na het converteren kan dit bestand als een beveiligd tekstbestand worden opgeslagen in Azure DevOps Services.
- De tekenreeks kan vervolgens handmatig worden opgeslagen in Azure KeyVault als een 'geheim object' of als onderdeel van een implementatie-/buildscript voor uw oplossing. Een voorbeeld van het opslaan van het persoonlijke FairPlay-certificaat in Azure KeyVault is te zien in de voorbeeldcode van het Gridwich-project
- Sla het wachtwoord voor het PFX-bestand desgewenst op als een geheim in de sleutelkluis.
Voorbeeld van CLI-script
Het bestand met de met Base64 gecodeerde persoonlijke sleutel kopiëren naar 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
Het voorbeeld klonen
Kloon de Media Services .NET-voorbeelden.
git clone https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git
Past de code aan
Wijzig de code in Versleutelen met DRM met behulp van .NET om FairPlay-configuraties toe te voegen.
Notitie
Widevine is niet beschikbaar in de GovCloud-regio.
Vereisten
Voordat u offline DRM voor Widevine op Android-apparaten implementeert, moet u het volgende doen:
Offlinemodus inschakelen
Als u de offlinemodus voor Widevine-licenties wilt inschakelen, configureert u de Widevine-licentiesjabloon. Stel in het object policy_overrides de eigenschap can_persist in op true, zoals wordt weergegeven in ConfigureWidevineLicenseTemplate.
De eenvoudigste manier om een systeemeigen speler-app voor Android-apparaten te ontwikkelen, is met behulp van de Google ExoPlayer SDK, een opensource-SDK voor videospelers. ExoPlayer ondersteunt functies die momenteel niet worden ondersteund door de systeemeigen MediaPlayer-API van Android, waaronder MPEG-DASH en Microsoft Smooth Streaming-leveringsprotocollen.
ExoPlayer versie 2.6 en hoger bevat veel klassen die ondersteuning bieden voor offline afspelen van Widevine DRM. De klasse biedt met name OfflineLicenseHelper
hulpprogrammafuncties om het gebruik van de DefaultDrmSessionManager te vergemakkelijken voor het downloaden, vernieuwen en vrijgeven van offline licenties. De klassen in de SDK-map library/core/src/main/java/com/google/android/exoplayer2/offline/
ondersteunen het downloaden van offline video-inhoud.
De volgende lijst met klassen faciliteert de offlinemodus in de ExoPlayer SDK voor 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
Ontwikkelaars moeten de ExoPlayer-ontwikkelaarshandleiding en de bijbehorende ontwikkelaarsblog raadplegen tijdens het ontwikkelen van een toepassing.
Werken met oudere Android-apparaten
Voor sommige oudere Android-apparaten moet u waarden instellen voor de volgende policy_overrides eigenschappen (gedefinieerd in de Widevine-licentiesjabloon: rental_duration_seconds, playback_duration_seconds en license_duration_seconds. U kunt ze ook instellen op 0
, wat betekent dat er geen tijdsbeperking is.
Waarschuwing
De waarden moeten worden ingesteld om een overloopfout met gehele getallen te voorkomen. Zie en https://github.com/google/ExoPlayer/issues/3112voor meer uitleg over het probleemhttps://github.com/google/ExoPlayer/issues/3150.
Als u de waarden niet expliciet instelt, worden zeer grote waarden toegewezen voor PlaybackDurationRemaining en LicenseDurationRemaining (bijvoorbeeld 9223372036854775807, de maximale positieve waarde voor een 64-bits geheel getal). Als gevolg hiervan lijkt de Widevine-licentie verlopen en wordt de ontsleuteling daarom niet uitgevoerd.
Dit probleem doet zich niet voor op Android 5.0 Lollipop of hoger, omdat Android 5.0 de eerste Android-versie is, die is ontworpen om ARMv8 (Advanced RISC Machine) en 64-bits platforms volledig te ondersteunen, terwijl Android 4.4 KitKat oorspronkelijk is ontworpen ter ondersteuning van ARMv7- en 32-bits platforms, net als bij andere oudere Android-versies.
Xamarin gebruiken om een Android-afspeel-app te bouwen
U kunt Xamarin-bindingen voor ExoPlayer vinden via de volgende koppelingen:
Zie ook de volgende thread: Xamarin-binding.
Chrome-speler-apps voor Android
Vanaf de release van Chrome voor Android v. 62 wordt permanente licentie in EME ondersteund.
Widevine L1 wordt nu ook ondersteund in Chrome voor Android. Hiermee kunt u offline afspeeltoepassingen in Chrome maken als uw eindgebruikers deze (of hogere) versie van Chrome hebben.
Daarnaast heeft Google een PWA-voorbeeld (Progressive Web App) geproduceerd:
Als u uw mobiele Chrome-browser upgradet naar v62 (of hoger) op een Android-telefoon en de hierboven gehoste voorbeeld-app test, ziet u dat zowel online streamen als offline afspelen werken.
De bovenstaande opensource-PWA-app is geschreven in Node.js. Als u uw eigen versie wilt hosten op een Ubuntu-server, moet u rekening houden met de volgende veelvoorkomende problemen die het afspelen kunnen verhinderen:
- CORS-probleem: de voorbeeldvideo in de voorbeeld-app wordt gehost in https://storage.googleapis.com/biograf-video-files/videos/. Google heeft CORS ingesteld voor al hun testvoorbeelden die worden gehost in de Google Cloud Storage-bucket. Ze worden geleverd met CORS-headers, waarbij expliciet de CORS-vermelding wordt opgegeven:
https://biograf-155113.appspot.com
(het domein waarin Google hun voorbeeld host) waardoor toegang door andere sites wordt voorkomen. Als u het probeert, ziet u de volgende HTTP-fout: 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.
- Certificaatprobleem: vanaf Chrome v 58 vereist EME voor Widevine HTTPS. Daarom moet u de voorbeeld-app via HTTPS hosten met een X509-certificaat. Een normaal testcertificaat werkt niet vanwege de volgende vereisten: U moet een certificaat verkrijgen dat voldoet aan de volgende minimale vereisten:
- Chrome en Firefox vereisen dat SAN-Subject alternatieve naam in het certificaat bestaat
- Het certificaat moet een vertrouwde CA hebben en een zelfondertekend ontwikkelingscertificaat werkt niet
- Het certificaat moet een CN hebben die overeenkomt met de DNS-naam van de webserver of gateway
De bestandsindeling smooth streaming (PIFF) met H264/AAC heeft een binding met PlayReady (AES-128 CTR). Het soepele streaming.ismv-bestand, ervan uitgaande dat audio in video is gesmuxeerd, is zelf een fMP4 en kan worden gebruikt voor afspelen. Als vloeiend streamen van inhoud via PlayReady-versleuteling gaat, wordt elk .ismv-bestand een met PlayReady beveiligd MP4-fragment. U kunt een ISMV-bestand met de voorkeursbitsnelheid kiezen en de naam ervan wijzigen als .mp4 om te downloaden.
Er zijn twee opties voor het hosten van de met PlayReady beveiligde MP4 voor progressief downloaden:
- U kunt de MP4 in dezelfde container/mediaservice-asset plaatsen en het Streaming-eindpunt van Azure Media Services gebruiken voor progressief downloaden.
- U kunt de SAS-URL gebruiken voor progressief downloaden rechtstreeks vanuit Azure Storage.
U kunt twee soorten Levering van PlayReady-licenties gebruiken:
- PlayReady-service voor het leveren van licenties in Azure Media Services
- PlayReady-licentieservers die overal worden gehost.
Zie de licentiesjabloon Media Services v3 met PlayReady voor het verkrijgen van een PlayReady-licentie met de AMS-leveringsservice.
Voor het testen van afspelen kunt u een universele Windows-toepassing op Windows 10 gebruiken. In Windows 10 Universal-voorbeelden is er een basisspelervoorbeeld met de naam Adaptive Streaming Sample. Voeg de code toe voor het kiezen van de gedownloade video en gebruik deze als bron in plaats van de adaptieve streamingbron.