Prérequis
Avant de mettre en œuvre DRM hors connexion pour FairPlay sur un appareil iOS 10+, vous devez :
- Lire les exigences et la configuration de la licence FairPlay Apple
- Obtenez le Kit SDK FPS d’Apple Developer Network. Le Kit SDK FPS contient deux composants :
- le Kit SDK du serveur FPS, qui contient le module de sécurité de clés (KSM), des exemples clients, une spécification et un ensemble de vecteurs de test ;
- Le pack de déploiement FPS, qui contient la spécification de la fonction D, ainsi que des instructions sur la façon de générer la clé privée spécifique au client du certificat FPS et la clé secrète d’application. Apple publie le pack de déploiement FPS uniquement aux fournisseurs de contenu sous licence.
- Les fichiers de certificat .der/.cer que vous recevez dans le cadre de la génération du certificat FPS contiennent une clé publique et peuvent être mis à la disposition du client. La clé privée (.pfx) doit être sécurisée dans Azure Key Vault ou un autre emplacement sécurisé.
Stocker une clé privée FairPlay (.pfx) dans Azure Key Vault
La clé privée (.pfx) que vous recevez d’Apple doit être traitée comme un certificat sécurisé et peut être stockée dans Azure Key Vault.
- Le fichier de certificat .pfx doit d’abord être converti en fichier texte de base 64 par l’administrateur
- Une fois converti, ce fichier peut être stocké dans Azure DevOps Services en tant que fichier texte sécurisé.
- La chaîne peut ensuite être stockée manuellement dans Azure Key Vault sous la forme d’un « objet secret », ou dans le cadre d’un script de déploiement ou de build pour votre solution. Pour voir un exemple de stockage du certificat privé FairPlay dans Azure Key Vault, consultez l’exemple de code du projet Gridwich.
- Si vous le souhaitez, vous pouvez stocker le fichier .pfx comme un secret dans le coffre de clés.
Exemple de script CLI
Pour copier le fichier de clé privée encodé en base64 dans 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
Clonage de l’exemple
Clonez les exemples Media Services .Net.
git clone https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git
Modifier ce code.
Modifiez le code dans Chiffrer avec DRM à l’aide de .NET pour ajouter des configurations FairPlay.
Notes
Widevine n’est pas disponible dans la région GovCloud.
Prérequis
Avant de mettre en œuvre la DRM hors connexion pour Widevine sur des appareils Android, vous devez, tout d’abord :
- Vous familiariser avec les concepts présentés pour la protection du contenu en ligne à l’aide de la DRM de Widevine.
- Clonez https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git.
- Vous familiariser avec le kit de développement logiciel (SDK) Google ExoPlayer pour Android, un kit de développement logiciel (SDK) de lecteur vidéo open source capable de prendre en charge la lecture de la DRM de Widevine hors connexion.
Activer le mode hors connexion
Pour activer le mode hors connexion pour les licences Widevine, configurez le modèle de licence Widevine. Dans l’objet policy_overrides , définissez la propriété can_persist sur true, comme indiqué dans ConfigureWidevineLicenseTemplate.
Le moyen le plus simple de développer une application de lecteur natif pour les appareils Android est d’utiliser le Kit de développement logiciel (SDK) Google ExoPlayer, un kit de développement logiciel du lecteur vidéo open source. ExoPlayer prend en charge des fonctionnalités qui ne sont actuellement pas prises en charge par l'API MediaPlayer native d'Android, notamment les protocoles de remise MPEG-DASH et Microsoft Smooth Streaming.
ExoPlayer version 2.6 et version supérieure inclut de nombreuses classes qui prennent en charge la lecture de la DRM de Widevine hors connexion. En particulier, la OfflineLicenseHelper
classe fournit des fonctions utilitaires pour faciliter l’utilisation de DefaultDrmSessionManager pour le téléchargement, le renouvellement et la libération de licences hors connexion. Les classes fournies dans le dossier library/core/src/main/java/com/google/android/exoplayer2/offline/
SDK prennent en charge le téléchargement de contenu vidéo hors connexion.
Les classes suivantes permettent le mode hors connexion dans le SDK ExoPlayer pour 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
Les développeurs doivent référencer le Guide du développeur ExoPlayer et Blog des développeurs correspondant pendant le développement d’une application.
Utilisation des anciens appareils Android
En ce qui concerne certains anciens appareils Android, vous devez définir des valeurs pour les propriétés policy_overrides suivantes (définies dans le modèle de licence Widevine : rental_duration_seconds, playback_duration_seconds et license_duration_seconds. Vous pouvez également les définir sur 0
, ce qui signifie qu’il n’y a aucune restriction de temps.
Avertissement
Les valeurs doivent être définies pour éviter un bogue de dépassement de capacité d’entier. Pour en savoir plus sur le problème, consultez https://github.com/google/ExoPlayer/issues/3150 et https://github.com/google/ExoPlayer/issues/3112.
Si vous ne définissez pas explicitement les valeurs, des valeurs très élevées pour PlaybackDurationRemaining et LicenseDurationRemaining seront affectées (par exemple, 9223372036854775807, qui est la valeur positive maximale pour un entier de 64 bits). Par conséquent, la licence Widevine s’affiche comme expirée, le déchiffrement n’a donc pas lieu.
Ce problème ne se produit pas sur Android Lollipop 5.0 ou version ultérieure, Android 5.0 étant la première version Android conçue pour prendre entièrement en charge des plateformes ARMv8 (Advanced RISC Machine) et 64 bits, tandis qu’Android 4.4 KitKat a été conçu à l’origine pour prendre en charge des plateformes ARMv7 et 32 bits comme pour d’autres versions Android plus anciennes.
Utiliser Xamarin pour créer une application de lecture Android
Vous pouvez rechercher des liaisons Xamarin pour ExoPlayer à l’aide des liens suivants :
Consultez également le thread suivant : Liaison Xamarin.
Applications du lecteur Chrome pour Android
À partir de la version de Chrome pour Android v. 62, la licence persistant dans EME est prise en charge.
Widevine L1 est maintenant également pris en charge dans Chrome pour Android. Cela vous permet de créer des applications de lecture hors connexion dans Chrome si vos utilisateurs finaux disposent de cette version de Chrome (ou version ultérieure).
En outre, Google a produit un exemple d’application web progressive (PWA) :
Si vous mettez à niveau votre navigateur Chrome mobile sur la v62 (ou version ultérieure) sur un téléphone Android et testez l’exemple d’application hébergée ci-dessus, vous constaterez que la lecture en continu en ligne et la lecture hors connexion fonctionnent.
L’application PWA open source ci-dessus a été créée dans Node.js. Si vous souhaitez héberger votre propre version sur un serveur Ubuntu, tenez compte des problèmes fréquemment rencontrés suivants qui peuvent empêcher la lecture :
- Problème CORS : l’échantillon vidéo de l’exemple d’application est hébergé dans https://storage.googleapis.com/biograf-video-files/videos/. Google a défini CORS pour tous les exemples de test hébergés dans le compartiment de stockage Cloud de Google. Ils sont pris en charge avec les en-têtes CORS, en spécifiant explicitement l’entrée CORS :
https://biograf-155113.appspot.com
(domaine dans lequel Google héberge ses exemples) empêchant l’accès par d’autres sites. Si vous essayez, vous verrez l'erreur HTTP suivante : 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.
- Problème de certificat : À partir de Chrome v58, EME pour Widevine nécessite HTTPS. Par conséquent, vous devez héberger l’exemple d’application via le protocole HTTPS avec un certificat X509. Les certificats de test habituels ne fonctionnent pas en raison des exigences suivantes : Vous devez obtenir un certificat répondant aux exigences minimales suivantes :
- Chrome et Firefox exige que le paramètre Nom alternatif de l’objet SAN existe dans le certificat
- Le certificat doit avoir une certification approuvée et un certificat auto-signé de développement ne fonctionne pas
- Le certificat doit avoir un CN correspondant au nom DNS de la passerelle ou du serveur web
Le format de fichier de diffusion en continu lisse (PIFF) avec H264/AAC possède une liaison avec PlayReady (AES-128 CTR). Le fichier .ismv de streaming fluide, en supposant que l’audio est muxé dans la vidéo, est lui-même un fMP4 et peut être utilisé pour la lecture. Si le contenu de streaming fluide passe par le chiffrement PlayReady, chaque fichier .ismv devient un fragment MP4 protégé par PlayReady. Vous pouvez choisir un fichier .ismv avec le débit par défaut et le renommer en .mp4 pour téléchargement.
Deux options sont disponibles pour héberger le fichier MP4 protégé PlayReady pour le téléchargement progressif :
- Vous pouvez placer le MP4 dans la même ressource conteneur/service multimédia et utiliser le point de terminaison de streaming Azure Media Services pour le téléchargement progressif.
- Vous pouvez utiliser l’URL SAP pour le téléchargement progressif directement à partir du Stockage Azure.
Vous pouvez utiliser deux systèmes de distribution de licences PlayReady :
- Service de livraison de licences PlayReady dans Azure Media Services
- Les serveurs de licences PlayReady où qu’ils soient hébergés.
Pour obtenir une licence PlayReady avec le service de livraison AMS, consultez le modèle de licence Media Services v3 avec PlayReady.
Pour tester la lecture, vous pouvez utiliser une application Windows universelle sur Windows 10. Dans Exemples Windows 10 Universel se trouve un exemple de lecteur de base appelé Exemple de diffusion en continu adaptative. Ajoutez le code pour choisir la vidéo téléchargée et l’utiliser comme source, au lieu de la source de diffusion en continu adaptative.