Prerrequisitos
Antes de implementar DRM sin conexión para FairPlay en un dispositivo iOS 10+:
- Lea Configuración y requisitos de licencia de FairPlay de Apple
- Obtenga el SDK de FPS de Apple Developer Network. El SDK de FPS contiene dos componentes:
- El SDK de FPS Server, que contiene el Módulo de seguridad de claves (KSM), ejemplos de cliente, una especificación y un conjunto de vectores de prueba.
- El paquete de implementación de FPS, que contiene la especificación de la función D, junto con instrucciones sobre cómo generar la clave privada específica del cliente de FPS Certificate y la clave secreta de aplicación. Apple emite fps Deployment Pack solo a proveedores de contenido con licencia.
- Los archivos de certificado .der/.cer que recibe como parte de la generación del certificado FPS contienen una clave pública y se pueden poner a disposición del cliente. La clave privada (.pfx) debe protegerse en Azure Key Vault u otra ubicación segura.
Almacenamiento de una clave privada de FairPlay (.pfx) en Azure Key Vault
La clave privada (.pfx) que recibe de Apple debe tratarse como un certificado seguro y se puede almacenar en Azure Key Vault.
- El administrador debe convertir primero el archivo de certificado .pfx en el archivo de texto base 64.
- Una vez convertido, este archivo se puede almacenar en Azure DevOps Services como un archivo de texto seguro.
- La cadena se puede almacenar manualmente en Azure KeyVault como un "objeto secreto" o como parte de un script de implementación o compilación para la solución. Se puede ver un ejemplo de almacenamiento del certificado privado de FairPlay en Azure KeyVault en el código de ejemplo del proyecto de Gridwich
- Opcionalmente, almacene la contraseña del archivo .pfx como un secreto en el almacén de claves.
Ejemplo de script CLI
Para copiar el archivo de clave privada codificada en Base64 en 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
Clonación del ejemplo
Clona los ejemplos de Media Services .Net.
git clone https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git
Modificación del código
Modifique el código en Codificación con DRM mediante .NET para agregar configuraciones de FairPlay.
Nota
Widevine no está disponible en la región govCloud.
Prerrequisitos
Antes de implementar DRM sin conexión para Widevine en dispositivos Android, primero debe:
- Familiarícese con los conceptos introducidos para la protección de contenido en línea mediante DRM de Widevine.
- Clone https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git.
- Familiarícese con el SDK de Google ExoPlayer para Android, un SDK de reproductor de vídeo de código abierto capaz de admitir la reproducción drm de Widevine sin conexión.
Habilitar el modo sin conexión
Para habilitar el modo sin conexión para las licencias de Widevine, configure la plantilla de licencias de Widevine. En el objeto policy_overrides, establezca la propiedad can_persist en true, tal como se muestra en ConfigureWidevineLicenseTemplate.
La manera más fácil de desarrollar una aplicación de reproductor nativa para dispositivos Android es usar el SDK de ExoPlayer de Google, un SDK de reproductor de vídeo de código abierto. ExoPlayer admite características que actualmente no son compatibles con la API nativa de MediaPlayer de Android, incluidos los protocolos de entrega MPEG-DASH y Microsoft Smooth Streaming.
ExoPlayer versión 2.6 y versiones posteriores incluyen muchas clases que admiten la reproducción de DRM de Widevine sin conexión. En concreto, la clase OfflineLicenseHelper
proporciona funciones de utilidad para facilitar el uso de DefaultDrmSessionManager para descargar, renovar y liberar licencias sin conexión. Las clases proporcionadas en la carpeta sdk library/core/src/main/java/com/google/android/exoplayer2/offline/
admiten la descarga de contenido de vídeo sin conexión.
La siguiente lista de clases facilita el modo sin conexión en el SDK de ExoPlayer para 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
Los desarrolladores deben consultar la Guía para desarrolladores de ExoPlayer y el correspondiente Blog de desarrolladores durante el desarrollo de una aplicación.
Trabajar con dispositivos Android más antiguos
En algunos dispositivos Android antiguos, debe configurar los valores de las siguientes propiedades de policy_overrides (que se definen en la plantilla de la licencia de Widevine: rental_duration_seconds, playback_duration_seconds y license_duration_seconds. Como alternativa, puede establecerlos en 0
, lo que significa que no hay ninguna restricción de tiempo.
Advertencia
Los valores se deben configurar para evitar un error de desbordamiento de enteros. Para obtener más explicación sobre el problema, consulte https://github.com/google/ExoPlayer/issues/3150 y https://github.com/google/ExoPlayer/issues/3112.
Si no establece explícitamente los valores, se asignarán valores muy grandes para PlaybackDurationRemaining y LicenseDurationRemaining (por ejemplo, 9223372036854775807, que es el valor positivo máximo de un entero de 64 bits). Como resultado, la licencia de Widevine aparece expirada y, por tanto, no se producirá el descifrado.
Este problema no se produce en Android 5.0 Lollipop o posterior desde Android 5.0 es la primera versión de Android, que se ha diseñado para admitir completamente ARMv8 (Advanced RISC Machine) y plataformas de 64 bits, mientras que Android 4.4 KitKat se diseñó originalmente para admitir ARMv7 y plataformas de 32 bits como con otras versiones anteriores de Android.
Aplicaciones de reproductor de Chrome para Android
A partir del lanzamiento de Chrome para Android v. 62, se admite la licencia persistente en EME. Widevine L1 ahora también se admite en Chrome para Android. Esto le permite crear aplicaciones de reproducción sin conexión en Chrome si los usuarios finales tienen esta versión (o superior) de Chrome.
Además, Google ha producido un ejemplo de aplicación web progresiva (PWA):
- Código fuente
- de versión hospedada en Google (solo funciona en Chrome v 62 y versiones posteriores en dispositivos Android)
Si actualiza el explorador Chrome móvil a v62 (o superior) en un teléfono Android y prueba la aplicación de ejemplo hospedada anterior, verá que el streaming en línea y la reproducción sin conexión funcionan.
La aplicación PWA de código abierto anterior se crea en Node.js. Si desea hospedar su propia versión en un servidor Ubuntu, tenga en cuenta los siguientes problemas comunes que pueden impedir la reproducción:
- Problema de CORS: el vídeo de ejemplo de la aplicación de ejemplo se hospeda en https://storage.googleapis.com/biograf-video-files/videos/. Google ha configurado CORS para todos sus ejemplos de prueba hospedados en el cubo de Google Cloud Storage. Se sirven con encabezados CORS, especificando explícitamente la entrada CORS:
https://biograf-155113.appspot.com
(el dominio en el que google hospeda su ejemplo) evitando el acceso por cualquier otro sitio. Si intenta, verá el siguiente error HTTP: 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 de certificado: a partir de Chrome v 58, EME para Widevine requiere HTTPS. Por lo tanto, debe hospedar la aplicación de ejemplo a través de HTTPS con un certificado X509. Un certificado de prueba habitual no funciona debido a los siguientes requisitos: Debe obtener un certificado que cumpla los siguientes requisitos mínimos:
- Chrome y Firefox requieren que la configuración de Nombre Alternativo SAN-Subject exista en el certificado.
- El certificado debe provenir de una autoridad de certificación de confianza y un certificado de desarrollo autofirmado no funciona.
- El certificado debe tener un CN que coincida con el nombre DNS del servidor web o la puerta de enlace.
El formato de archivo de streaming con velocidad de transmisión adaptable con H264/AAC tiene un enlace con PlayReady (AES-128 CTR). El archivo .ismv de streaming con velocidad de transmisión adaptable, siempre que el audio se multiplexe en el vídeo, es en sí un archivo fMP4 y puede usarse para la reproducción. Si el contenido de streaming sin problemas pasa por el cifrado de PlayReady, cada archivo .ismv se convierte en un fragmento mp4 protegido de PlayReady. Puede elegir un archivo .ismv con la velocidad de bits preferida y cambiarle el nombre como .mp4 para su descarga.
Hay dos opciones para hospedar el MP4 protegido de PlayReady para descarga progresiva:
- Puede colocar el MP4 en el mismo recurso de servicio de contenedor o multimedia y usar el punto de conexión de streaming de Azure Media Services para la descarga progresiva.
- Puede usar la dirección URL de SAS para la descarga progresiva directamente desde Azure Storage.
Puede usar dos tipos de entrega de licencias de PlayReady:
- Servicio de entrega de licencias de PlayReady en Azure Media Services
- Servidores de licencias de PlayReady hospedados en cualquier lugar.
Para obtener una licencia de PlayReady con el servicio de entrega de AMS, consulte la plantilla de licencia de Media Services v3 con PlayReady.
Para las pruebas de reproducción, puedes usar una aplicación universal de Windows en Windows 10. En los ejemplos universales de Windows 10, encontrará un reproductor básico de ejemplo denominado Ejemplo de streaming adaptable. Agregue el código para elegir el vídeo descargado y úselo como origen, en lugar del origen de streaming adaptable.