Prerrequisitos
Antes de implementar DRM sin conexión para FairPlay en un dispositivo iOS 10 o superior:
- Lee los requisitos y la configuración de licencias de Apple FairPlay.
- Obtener 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 el paquete de implementación de FPS únicamente a los 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 se 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 un archivo de texto codificado en base 64.
- Una vez convertido, este archivo se puede almacenar en Azure DevOps Services como un archivo de texto seguro.
- Después, la cadena se puede almacenar en Azure KeyVault manualmente 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.
Script de la CLI de ejemplo
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
Clone los ejemplos de .Net de Media Services.
git clone https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git
Modificará el código
Modifique el código de Encrypt with DRM using .NET (Cifrar con DRM mediante .NET ) para agregar configuraciones de FairPlay.
Nota
Widevine no está disponible en la región de Azure GovCloud.
Prerrequisitos
Antes de implementar DRM para Widevine en dispositivos Android, debe hacer lo siguiente:
Habilitación del modo sin conexión
Para habilitar el modo sin conexión para licencias de Widevine, configure la plantilla de licencia de Widevine. En el objeto policy_overrides , establezca la propiedad can_persist en true, como se muestra en ConfigureWidevineLicenseTemplate.
La manera más fácil de desarrollar una aplicación de reproductor nativa para dispositivos Android consiste en usar el SDK de ExoPlayer de Google, un SDK de reproductor de vídeo de código abierto. ExoPlayer admite características que no son actualmente compatibles con la API de MediaPlayer nativa de Android, como los protocolos de entrega MPEG-DASH y Smooth Streaming de Microsoft.
La versión 2.6 de ExoPlayer (y posteriores) incluyen muchas clases que admiten la reproducción de Widevine DRM sin conexión. En concreto, la OfflineLicenseHelper
clase 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 library/core/src/main/java/com/google/android/exoplayer2/offline/
SDK 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 ExoPlayer Developer Guide (Guía para desarrolladores de ExoPlayer) y el correspondiente Developer Blog (Blog de desarrolladores) durante el desarrollo de una aplicación.
Trabajo 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 0
en , 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 más información sobre el problema, consulte https://github.com/google/ExoPlayer/issues/3150 y https://github.com/google/ExoPlayer/issues/3112.
Si no se establecen explícitamente, se asignarán valores muy elevados para PlaybackDurationRemaining y LicenseDurationRemaining (por ejemplo, 9223372036854775807, que es el valor positivo máximo para un entero de 64 bits). Como resultado, la licencia de Widevine aparece caducada y, por tanto, no se realizará el descifrado.
Este problema no se produce en Android 5.0 Lollipop ni en versiones posteriores, ya que Android 5.0 es la primera versión de Android que se ha diseñado para admitir completamente ARMv8 (Advanced RISC Machine) y las plataformas de 64 bits, mientras que Android 4.4 KitKat se diseñó originalmente para admitir ARMv7 y plataformas de 32 bits como en otras versiones anteriores de Android.
Uso de Xamarin para compilar una aplicación de reproducción de Android
Puede encontrar enlaces de Xamarin para ExoPlayer con los siguientes vínculos:
Vea también el siguiente subproceso: Enlace Xamarin.
Aplicaciones de reproductor de Chrome para Android
A partir de la versión 62 de Chrome para Android , se admite la licencia persistente en EME. Ahora también se admite Widevine L1 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 una superior) de Chrome.
Además, Google ha producido un ejemplo de aplicación web progresiva (PWA):
Si actualiza el explorador Chrome móvil a la versión 62 (o posterior) en un teléfono Android y prueba la aplicación de ejemplo hospedada anterior, verá que funciona tanto el streaming en línea como el streaming sin conexión.
La aplicación de PWA de código abierto anterior se creó en Node.js. Si desea hospedar su propia versión en un servidor de Ubuntu, tenga en cuenta los siguientes problemas habituales 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 proporcionan con encabezados CORS, especificando explícitamente la entrada CORS:
https://biograf-155113.appspot.com
(el dominio en el que Google hospeda su ejemplo) impidiendo el acceso de cualquier otro sitio. Si lo 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 la versión 58 de Chrome, 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: Es necesario obtener un certificado que cumpla con los siguientes requisitos mínimos:
- Chrome y Firefox requieren que existan los parámetros de SAN (nombre alternativo del firmante) en el certificado
- El certificado debe tener una entidad de certificación de confianza y un certificado de desarrollo autofirmado no sirve para ello
- El certificado debe tener un CN que coincida con el nombre de DNS del servidor web o de la puerta de enlace
El formato de archivo de streaming con velocidad de transmisión adaptable (PIFF) con H264/AAC tiene un enlace con PlayReady (AES-128 CTR). El archivo .ismv de streaming suave, suponiendo que el audio se muxa en el vídeo, es en sí mismo un fMP4 y se puede usar 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 cambiar su nombre como .mp4 para su descarga.
Existen dos opciones para hospedar los archivos MP4 protegidos por PlayReady para su descarga progresiva:
- Puede colocar 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.
Se pueden usar dos tipos de entrega de licencias de PlayReady:
- Servicio de entrega de licencias de PlayReady en Azure Media Services
- Servidores de licencia 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 la prueba 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. Agrega el código para elegir el vídeo descargado y úsalo como origen, en lugar del origen de streaming adaptable.