Prerequisiti
Prima di implementare la tecnologia DRM offline per FairPlay in un dispositivo iOS 10 o versioni successive:
- Leggere i requisiti di licenza e la configurazione di Apple FairPlay
- Ottenere FPS SDK da Apple Developer Network. Questo SDK è costituito da due componenti:
- FPS Server SDK, che contiene il modulo KSM (Key Security Module), esempi di 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 FPS Deployment Pack ai soli 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 per il 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 (con estensione pfx) in Azure Key Vault
La chiave privata (con estensione pfx) ricevuta da Apple deve essere considerata come un certificato sicuro e può essere archiviata nel Key Vault di Azure.
- Il file di certificato pfx deve essere prima convertito in file di testo base 64 dall'amministratore
- Una volta convertito, questo file può essere archiviato in Azure DevOps Services come file di testo sicuro.
- 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, archiviare la password per il file pfx come segreto nell'insieme di credenziali delle chiavi.
Script dell'interfaccia della riga di comando 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 Crittografa con DRM usando .NET per aggiungere configurazioni FairPlay.
Nota
Widevine non è disponibile nell'area GovCloud.
Prerequisiti
Prima di implementare la tecnologia DRM offline per Widevine su dispositivi Android, è necessario:
- Acquisire familiarità con i concetti relativi alla protezione di contenuto online con Widevine DRM.
- Clonare https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git.
- È necessario modificare il codice in Encrypt with DRM using .NET (Eseguire la crittografia con DRM usando .NET) per aggiungere configurazioni Widevine.
- Acquisire familiarità con Google ExoPlayer SDK per Android, un SDK per lettori video open source in grado di supportare la riproduzione offline con tecnologia Widevine DRM.
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 su true, come illustrato in ConfigureWidevineLicenseTemplate.
Il modo più semplice per sviluppare un'app lettore nativa per dispositivi Android è quello di usare Google ExoPlayer SDK, un SDK per lettori video open source. ExoPlayer supporta le funzionalità attualmente non supportate dall'API MediaPlayer nativa di Android, inclusi i protocolli di distribuzione MPEG-DASH e Microsoft Smooth Streaming.
ExoPlayer versione 2.6 e successive include molte classi che supportano la riproduzione offline con Widevine DRM. In particolare, la OfflineLicenseHelper
classe 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 library/core/src/main/java/com/google/android/exoplayer2/offline/
SDK supportano il download di contenuti video offline.
Di seguito sono elencate le classi di ExoPlayer SDK per Android che facilitano la modalità offline:
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
Quando creano un'applicazione, gli sviluppatori possono fare riferimento alla guida per sviluppatori di ExoPlayer e al blog corrispondente.
Uso con dispositivi Android meno recenti
Per alcuni dispositivi Android meno recenti, è necessario impostare i valori per le proprietà policy_overrides seguenti, definite nel modello di licenza Widevine: rental_duration_seconds, playback_duration_seconds e license_duration_seconds. In alternativa, è possibile impostarli su 0
, il che significa che non esiste alcuna restrizione temporale.
Avviso
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 i valori non vengono impostati in modo esplicito, verranno assegnati valori molto grandi per PlaybackDurationRemaining e LicenseDurationRemaining , ad esempio 9223372036854775807, ovvero il valore positivo massimo per un numero intero a 64 bit. Di conseguenza, la licenza Widevine risulterà scaduta e la decrittografia non verrà eseguita.
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.
Usare Xamarin per creare un'app di riproduzione Android
È possibile trovare i binding Xamarin per ExoPlayer usando i collegamenti seguenti:
Vedere anche il thread seguente relativo al binding Xamarin.
App lettore su browser Chrome per Android
A partire dalla versione di Chrome per Android v. 62, è supportata la licenza permanente in EME. In Chrome per Android è ora supportato anche Widevine L1. È così possibile creare applicazioni per la riproduzione offline in Chrome che gli utenti finali possono usare se dispongono di questa o di una versione successiva del browser.
Google ha inoltre prodotto un esempio di App Web progressiva (PWA):
Se si aggiorna il browser Chrome per dispositivi mobili alla versione 62 o successiva su uno smartphone Android e si testa l'app di esempio ospitata su Google, si noterà che è possibile usare entrambe le modalità di streaming online e riproduzione offline.
Questa app PWA open source è stata creata in Node.js. Se si vuole ospitare una versione personalizzata su un server Ubuntu, tenere presenti i seguenti problemi comunemente riscontrati 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 gli esempi di test ospitati nel bucket di 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 di certificato: a partire da Chrome versione 58, EME per Widevine richiede HTTPS. È pertanto necessario ospitare l'app di esempio su HTTPS con un certificato X509. Un normale certificato di test non è in grado di soddisfare i requisiti. È 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. Non è possibile usare un certificato di sviluppo autofirmato.
- Il certificato deve inoltre avere un nome comune (CN) corrispondente al nome DNS del server Web o del gateway.
Il formato di file SMOOTH Streaming (PIFF) con H264/AAC ha un'associazione con PlayReady (AES-128 CTR). Il file con estensione ismv smooth streaming, presupponendo che l'audio sia muxed nel video, è di per sé un 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.
Sono disponibili due opzioni per l'hosting di file MP4 protetti da PlayReady per il download progressivo:
- È possibile inserire MP4 nello stesso asset di contenitore/servizio multimediale e usare l'endpoint di streaming di Servizi multimediali di Azure per il download progressivo.
- È possibile usare l'URL di firma di accesso condiviso per il download progressivo direttamente da Archiviazione di Azure.
Sono disponibili due tipi di distribuzioni di licenze PlayReady:
- Servizio di distribuzione delle licenze PlayReady in Servizi multimediali di Azure
- Server licenze PlayReady ospitati in qualsiasi posizione.
Per ottenere una licenza PlayReady con il servizio di distribuzione AMS, vedere il modello di licenza Di Servizi multimediali v3 con PlayReady.
Per i test di riproduzione, è possibile 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 la scelta del video scaricato e usarlo come origine, anziché come origine di streaming adattiva.