Prerequisiti
Prima di implementare DRM offline per FairPlay in un dispositivo iOS 10+:
- Leggere configurazione e requisiti di licenza di Apple FairPlay
- Ottieni l'SDK FPS dalla Rete degli sviluppatori Apple. FPS SDK contiene due componenti:
- FPS Server SDK, che contiene il modulo KSM (Key Security Module), esempi client, una specifica e un set di vettori di test.
- Il Pacchetto di distribuzione FPS, che contiene la specifica della funzione D, insieme alle istruzioni su come generare la chiave privata specifica del certificato FPS e la chiave privata specifica dell'applicazione. Apple rilascia il pacchetto di distribuzione FPS solo ai provider di contenuti con licenza.
- I file di certificato .der/.cer ricevuti come parte della generazione del certificato FPS contengono una chiave pubblica e possono essere resi disponibili al client. La chiave privata (con estensione pfx) deve essere protetta in Azure Key Vault o in un'altra posizione sicura.
Archiviare una chiave privata FairPlay (pfx) in Azure Key Vault
La chiave privata (pfx) ricevuta da Apple deve essere considerata come un certificato sicuro e può essere archiviata in Azure Key Vault.
- Il file di certificato pfx deve essere prima convertito nel file di testo base 64 dall'amministratore
- Dopo la conversione, questo file può essere archiviato in Azure DevOps Services come file di testo protetto.
- La stringa può quindi essere archiviata manualmente in Azure KeyVault come "oggetto segreto" o come parte di uno script di distribuzione/compilazione per la soluzione. Un esempio di archiviazione del certificato privato FairPlay in Azure KeyVault è disponibile nel codice di esempio del progetto Gridwich
- Facoltativamente, memorizzare la password per il file .pfx come segreto nel deposito chiavi.
Script CLI di esempio
Per copiare il file di chiave privata con codifica Base64 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
Clonare l'esempio
Clonare gli esempi di Servizi multimediali .Net.
git clone https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git
Modificare il codice
Modificare il codice in Criptografare con DRM usando .NET per aggiungere configurazioni FairPlay.
Nota
Widevine non è disponibile nell'area GovCloud.
Prerequisiti
Prima di implementare DRM offline per Widevine nei dispositivi Android, è necessario prima di tutto:
Abilitare la modalità offline
Per abilitare la modalità offline per le licenze Widevine, configurare il modello di licenza Widevine. Nell'oggetto policy_overrides, impostare la proprietà can_persist a true, come illustrato in ConfigureWidevineLicenseTemplate.
Il modo più semplice per sviluppare un'app lettore nativo per dispositivi Android consiste nell'usare Google ExoPlayer SDK, un SDK del lettore video open source. ExoPlayer supporta funzionalità attualmente non supportate dall'API MediaPlayer nativa di Android, inclusi i protocolli di distribuzione di MPEG-DASH e Microsoft Smooth Streaming.
ExoPlayer versione 2.6 e successive include molte classi che supportano la riproduzione DRM Widevine offline. In particolare, la classe OfflineLicenseHelper
fornisce funzioni di utilità per facilitare l'uso di DefaultDrmSessionManager per il download, il rinnovo e il rilascio di licenze offline. Le classi fornite nella cartella SDK library/core/src/main/java/com/google/android/exoplayer2/offline/
supportano il download di contenuti video offline.
L'elenco seguente di classi facilita la modalità offline in ExoPlayer SDK per 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
Gli sviluppatori devono fare riferimento alla guida per sviluppatori di ExoPlayer e al corrispondente blog per sviluppatori durante lo sviluppo di un'applicazione.
Uso di dispositivi Android meno recenti
Per alcuni dispositivi Android meno recenti, è necessario impostare i valori per le proprietà di policy_overrides seguenti (definite nel modello di licenza Widevine : rental_duration_seconds, playback_duration_secondse license_duration_seconds. In alternativa, è possibile impostarli su 0
, il che significa che non esiste alcuna restrizione temporale.
Avvertimento
I valori devono essere impostati per evitare un bug di overflow di numero intero. Per altre informazioni sul problema, vedere https://github.com/google/ExoPlayer/issues/3150 e https://github.com/google/ExoPlayer/issues/3112.
Se non imposti i valori in modo esplicito, verranno assegnati valori molto grandi per PlaybackDurationRemaining e LicenseDurationRemaining, ad esempio 9223372036854775807, ovvero il valore positivo massimo per un intero a 64 bit. Di conseguenza, la licenza Widevine viene visualizzata scaduta e quindi la decrittografia non si verificherà.
Questo problema non si verifica in Android 5.0 Lollipop o versioni successive poiché Android 5.0 è la prima versione di Android, progettata per supportare completamente ARMv8 (Advanced RISC Machine) e piattaforme a 64 bit, mentre Android 4.4 KitKat è stato originariamente progettato per supportare le piattaforme ARMv7 e a 32 bit come con altre versioni precedenti di Android.
App del lettore Chrome per Android
A partire dalla versione di Chrome per Android v. 62, è supportata la licenza permanente in EME. Widevine L1 è ora supportato anche in Chrome per Android. Ciò consente di creare applicazioni di riproduzione offline in Chrome se gli utenti finali hanno questa versione (o successiva) di Chrome.
Google ha inoltre prodotto un esempio di app Web progressiva (PWA):
Se si aggiorna il browser Chrome per dispositivi mobili a v62 (o versione successiva) su un telefono Android e si testa l'app di esempio ospitata sopra, si noterà che funziona sia lo streaming online che la riproduzione offline.
L'app PWA open source precedente viene creata in Node.js. Se si vuole ospitare la propria versione in un server Ubuntu, tenere presente i problemi comuni seguenti che possono impedire la riproduzione:
- Problema CORS: il video di esempio nell'app di esempio è ospitato in https://storage.googleapis.com/biograf-video-files/videos/. Google ha configurato CORS per tutti i relativi esempi di test ospitati nel bucket google Cloud Storage. Questi sono resi disponibili con intestazioni CORS, che specificano in modo esplicito la voce CORS
https://biograf-155113.appspot.com
(il dominio in cui Google ospita l'esempio), impedendo l'accesso da altri siti. Se si prova, verrà visualizzato l'errore HTTP seguente: 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.
- Problema del certificato: a partire da Chrome v 58, EME per Widevine richiede HTTPS. È quindi necessario ospitare l'app di esempio su HTTPS con un certificato X509. Un certificato di test consueto non funziona a causa dei requisiti seguenti: è necessario ottenere un certificato che soddisfi i requisiti minimi seguenti:
- Per Chrome e Firefox, nel certificato deve essere definita l'impostazione relativa al nome alternativo del soggetto (SAN).
- Il certificato deve avere una CA attendibile e un certificato di sviluppo autofirmato non funziona
- Il certificato deve avere un cn corrispondente al nome DNS del server Web o del gateway
Il formato di file Smooth Streaming con H264/AAC ha un'integrazione con PlayReady (AES-128 CTR). Il Smooth Streaming con estensione ismv (presupponendo che sia stato eseguito il muxing dell'audio nel video) è esso stesso un file MP4 frammentato (fMP4) e può essere usato per la riproduzione. Se il contenuto smooth streaming passa attraverso la crittografia PlayReady, ogni file con estensione ismv diventa un frammento MP4 protetto da PlayReady. È possibile scegliere un file con estensione ismv con la velocità in bit preferita e rinominarlo come .mp4 per il download.
Per il download progressivo sono disponibili due opzioni per l'hosting del file MP4 protetto da PlayReady:
- È possibile inserire il file MP4 nello stesso asset contenitore/servizio multimediale e usare l'endpoint di streaming di Servizi multimediali di Azure per il download progressivo.
- È possibile usare l'SAS URL per il scaricamento progressivo direttamente da Archiviazione di Azure.
È possibile usare due tipi di recapito delle licenze PlayReady:
- Servizio di distribuzione delle licenze PlayReady in Servizi multimediali di Azure
- Server delle licenze PlayReady che sono ospitati ovunque.
Per ottenere una licenza PlayReady con il servizio di distribuzione AMS, vedere il modello di licenza Servizi multimediali v3 con PlayReady.
Per i test di riproduzione, puoi usare un'applicazione di Windows universale in Windows 10. Negli esempi di applicazioni universali di Windows 10 è disponibile un esempio di lettore di base denominato Adaptive Streaming Sample. Aggiungere il codice per scegliere il video scaricato e usarlo come origine, anziché come origine del flusso adattivo.