Förutsättningar
Innan du implementerar offline-DRM för FairPlay på en iOS 10+-enhet:
- Läs licenskrav och konfiguration för Apple FairPlay
- Hämta FPS SDK från Apple Developer Network. FPS SDK innehåller två komponenter:
- FPS Server SDK, som innehåller KSM (Key Security Module), klientexempel, en specifikation och en uppsättning testvektorer.
- FPS-distributionspaketet, som innehåller D-funktionsspecifikationen, tillsammans med instruktioner om hur du genererar den kundspecifika privata nyckeln för FPS-certifikatet och programhemlighetsnyckeln. Apple utfärdar endast FPS-distributionspaketet till licensierade innehållsleverantörer.
- De .der/.cer certifikatfiler som du får som en del av genereringen av FPS-certifikatet innehåller en offentlig nyckel och kan göras tillgängliga för klienten. Den privata nyckeln (.pfx) ska skyddas i Azure Key Vault eller på en annan säker plats.
Lagra en privat FairPlay-nyckel (.pfx) i Azure Key Vault
Den privata nyckel (.pfx) som du får från Apple ska behandlas som ett säkert certifikat och kan lagras i Azure Key Vault.
- .pfx-certifikatfilen ska först konverteras till en base 64-textfil av administratören
- När den här filen har konverterats kan den lagras i Azure DevOps Services som en säker textfil.
- Strängen kan sedan lagras i Azure KeyVault manuellt som ett "hemligt objekt" eller som en del av ett distributions-/byggskript för din lösning. Ett exempel på lagring av det privata FairPlay-certifikatet i Azure KeyVault finns i Exempelkoden för Gridwich-projektet
- Du kan också lagra lösenordet för .pfx-filen som en hemlighet i nyckelvalvet.
Exempel på CLI-skript
Så här kopierar du den base64-kodade privata nyckelfilen till 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
Klona exemplet
Klona Media Services .Net-exemplen.
git clone https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git
Ändra koden
Ändra koden i Kryptera med DRM med hjälp av .NET för att lägga till FairPlay-konfigurationer.
Anteckning
Widevine är inte tillgängligt i GovCloud-regionen.
Förutsättningar
Innan du implementerar offline-DRM för Widevine på Android-enheter bör du först:
Aktivera offlineläge
Om du vill aktivera offlineläge för Widevine-licenser konfigurerar du Widevine-licensmallen. I objektet policy_overrides anger du egenskapen can_persist till true, som du ser i ConfigureWidevineLicenseTemplate.
Det enklaste sättet att utveckla en inbyggd spelarapp för Android-enheter är att använda Google ExoPlayer SDK, en SDK för videospelare med öppen källkod. ExoPlayer stöder funktioner som för närvarande inte stöds av Androids inbyggda MediaPlayer API, inklusive MPEG-DASH och Microsoft Smooth Streaming-leveransprotokoll.
ExoPlayer version 2.6 och senare innehåller många klasser som stöder Widevine DRM-uppspelning offline. I synnerhet OfflineLicenseHelper
tillhandahåller klassen verktygsfunktioner för att underlätta användningen av DefaultDrmSessionManager för nedladdning, förnyelse och lansering av offlinelicenser. Klasserna i SDK-mappen library/core/src/main/java/com/google/android/exoplayer2/offline/
stöder nedladdning av offlinevideoinnehåll.
Följande lista över klasser underlättar offlineläge i 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
Utvecklare bör referera till ExoPlayer Developer Guide och motsvarande utvecklarblogg under utvecklingen av ett program.
Arbeta med äldre Android-enheter
För vissa äldre Android-enheter måste du ange värden för följande policy_overrides egenskaper (definieras i Widevine-licensmallen: rental_duration_seconds, playback_duration_seconds och license_duration_seconds. Du kan också ställa in dem på 0
, vilket innebär att det inte finns någon tidsbegränsning.
Varning
Värdena måste anges för att undvika ett heltalsspillfel. Mer förklaring av problemet https://github.com/google/ExoPlayer/issues/3150 finns i och https://github.com/google/ExoPlayer/issues/3112.
Om du inte uttryckligen anger värdena tilldelas mycket stora värden för PlaybackDurationRemaining och LicenseDurationRemaining (till exempel 9223372036854775807, vilket är det maximala positiva värdet för ett 64-bitars heltal). Därför verkar Widevine-licensen ha upphört att gälla och därför sker inte dekrypteringen.
Det här problemet uppstår inte på Android 5.0 Lollipop eller senare eftersom Android 5.0 är den första Android-versionen, som har utformats för att fullt ut stödja ARMv8 (Advanced RISC Machine) och 64-bitarsplattformar, medan Android 4.4 KitKat ursprungligen utformades för att stödja ARMv7- och 32-bitarsplattformar som med andra äldre Android-versioner.
Använda Xamarin för att skapa en Android-uppspelningsapp
Du hittar Xamarin-bindningar för ExoPlayer med hjälp av följande länkar:
Se även följande tråd: Xamarin-bindning.
Chrome-spelarappar för Android
Från och med lanseringen av Chrome för Android v. 62 stöds beständig licens i EME.
Widevine L1 stöds nu också i Chrome för Android. På så sätt kan du skapa offlineuppspelningsprogram i Chrome om slutanvändarna har den här (eller högre) versionen av Chrome.
Dessutom har Google tagit fram ett PWA-exempel (Progressive Web App):
Om du uppgraderar webbläsaren Chrome till v62 (eller senare) på en Android-telefon och testar den värdbaserade exempelappen ovan ser du att både onlineuppspelning och offlineuppspelning fungerar.
Ovanstående PWA-app med öppen källkod har skapats i Node.js. Om du vill vara värd för din egen version på en Ubuntu-server bör du tänka på följande vanliga problem som kan förhindra uppspelning:
- CORS-problem: Exempelvideon i exempelappen finns i https://storage.googleapis.com/biograf-video-files/videos/. Google har konfigurerat CORS för alla testexempel som finns i Google Cloud Storage-bucketen. De hanteras med CORS-huvuden och anger uttryckligen CORS-posten:
https://biograf-155113.appspot.com
(domänen där Google är värd för deras exempel) förhindrar åtkomst från andra webbplatser. Om du försöker visas följande HTTP-fel: 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.
- Certifikatproblem: Från och med Chrome v 58 kräver EME för Widevine HTTPS. Därför måste du vara värd för exempelappen via HTTPS med ett X509-certifikat. Ett vanligt testcertifikat fungerar inte på grund av följande krav: Du måste skaffa ett certifikat som uppfyller följande minimikrav:
- Chrome och Firefox kräver att inställningen SAN-Subject alternativt namn finns i certifikatet
- Certifikatet måste ha en betrodd certifikatutfärdare och ett självsignerat utvecklingscertifikat fungerar inte
- Certifikatet måste ha ett CN som matchar DNS-namnet på webbservern eller gatewayen
Filformatet Smooth Streaming (PIFF) med H264/AAC har en bindning med PlayReady (AES-128 CTR). Den smooth streaming .ismv-filen, förutsatt att ljud är muxed i video, är i sig en fMP4 och kan användas för uppspelning. Om smidigt strömmande innehåll går igenom PlayReady-kryptering blir varje .ismv-fil ett PlayReady-skyddat MP4-fragment. Du kan välja en .ismv-fil med önskad bithastighet och byta namn på den som .mp4 för nedladdning.
Det finns två alternativ för att vara värd för PlayReady-skyddad MP4 för progressiv nedladdning:
- Du kan placera MP4 i samma container/medietjänsttillgång och använda Azure Media Services-slutpunkten för direktuppspelning för progressiv nedladdning.
- Du kan använda SAS-URL:en för progressiv nedladdning direkt från Azure Storage.
Du kan använda två typer av PlayReady-licensleverans:
- PlayReady-licensleveranstjänst i Azure Media Services
- PlayReady-licensservrar som finns var som helst.
Information om hur du skaffar en PlayReady-licens med AMS-leveranstjänsten finns i licensmallen Media Services v3 med PlayReady.
För uppspelningstestning kan du använda ett universellt Windows-program på Windows 10. I Windows 10 Universal-exempel finns det ett grundläggande spelarexempel som heter Adaptive Streaming Sample. Lägg till koden för att välja den nedladdade videon och använd den som källa i stället för den anpassningsbara strömningskällan.