Widevine es una tecnología DRM desarrollada por Google para proteger el contenido de video contra la copia no autorizada en dispositivos móviles, Smart TV y plataformas web. El cifrado de contenido se realiza a través del módulo CDM, que es compatible con 4 mil millones de dispositivos en todo el mundo. La tecnología Widevine garantiza la compatibilidad con Android, iOS, Chrome y Smart TV, permitiendo a los servicios de streaming proteger contenido premium en cualquier plataforma.
Puntos clave
Widevine es una tecnología DRM propietaria adquirida por Google en 2010 y se ha convertido en el estándar de facto para proteger contenido de video en el ecosistema Android. Es utilizada por los principales servicios de streaming, incluyendo Netflix, Amazon Prime Video, Disney+ y Hulu, para prevenir la copia y distribución no autorizada de contenido.
Widevine admite cifrado AES-128 CBC utilizando claves de contenido que se transmiten solo a dispositivos autorizados a través de un canal de licencias seguro. El sistema proporciona protección de extremo a extremo desde el cifrado en el servidor hasta la decodificación en el dispositivo del usuario.
Widevine Technologies fue fundada en 1999 y originalmente desarrolló soluciones para la protección de contenido en plataformas de televisión por cable. Después de ser adquirida por Google en 2010, la tecnología fue adaptada para plataformas móviles e integrada en el sistema operativo Android a partir de la versión 4.4 KitKat. Desde 2015, Widevine ha sido un componente obligatorio de la certificación de Google Mobile Services.
En 2018, Google presentó Widevine Modular DRM, que permitió a los fabricantes de dispositivos implementar diferentes niveles de protección por hardware sin modificar el código del sistema operativo. Hoy en día, Widevine Modular es compatible con más de 4 mil millones de dispositivos y es el mecanismo DRM principal en Android.
La arquitectura de Widevine consta de tres componentes clave: el Content Decryption Module (CDM), el servidor de licencias y la herramienta de cifrado de contenido. CDM realiza el descifrado en el lado del cliente e interactúa con el Trusted Execution Environment (TEE) del hardware para el almacenamiento seguro de claves.
El servidor de licencias de Google gestiona la emisión de claves según las políticas del proveedor de contenido, que definen restricciones de tiempo, número de dispositivos y calidad de reproducción. La herramienta de cifrado prepara el contenido en el lado del proveedor, empaquetándolo en formato MPEG-DASH o HLS con cifrado CENC.
El proceso de protección comienza en la etapa de empaquetado del contenido, cuando el archivo de medios se cifra utilizando una clave de contenido en el servidor del proveedor. El flujo cifrado se transmite al dispositivo del usuario a través de CDN, donde el CDM solicita una licencia al servidor de licencias.
El servidor de licencias verifica la autenticidad del dispositivo y el derecho de acceso al contenido. Si la verificación es exitosa, el servidor emite una licencia con una clave que el CDM utiliza para el descifrado. La licencia puede contener restricciones de tiempo de visualización y resolución.
El intercambio de licencias en Widevine se implementa a través del protocolo EME (Encrypted Media Extensions) en navegadores o mediante SDK en plataformas móviles. La solicitud de licencia es generada por el CDM y enviada al servidor de licencias a través de HTTPS, garantizando la protección contra la interceptación de claves en tránsito.
El servidor procesa la solicitud y devuelve una licencia que también está cifrada y solo puede ser descifrada por el CDM del dispositivo. La vinculación por hardware de la clave a un dispositivo específico evita su transferencia a otras plataformas.
Widevine utiliza los estándares Common Encryption (CENC) definidos en ISO/IEC 23001-7, garantizando la compatibilidad con los formatos MPEG-DASH y HLS. El cifrado AES-128 en modo CTR o CBC se utiliza para proteger los flujos de medios.
Para la derivación de claves se utiliza HKDF (HMAC-based Key Derivation Function), que permite generar claves únicas para cada segmento de contenido. El soporte para HLS en Widevine se agregó con la versión Modular 2.0, ampliando la compatibilidad con las plataformas de Apple.
@Throws
fun requestLicense(): ByteArray {
val drmSessionManager = mediaDrm.createSession(
sessionId,
List("keyRequestType", "init")
)
val request = mediaDrm.getKeyRequest(
sessionId,
schemeData.get("mimeType"),
KeyType.STREAMING,
mutableMapOf()
)
return licenseService.acquire(request.data)
}
Widevine define tres niveles de seguridad que difieren en la forma en que se realizan las operaciones criptográficas y se procesa el contenido. El nivel L1 proporciona la máxima protección, L3 la mínima y L2 ocupa una posición intermedia.
| Nivel | Tipo de protección | Requisitos del dispositivo | Resolución máxima |
|---|---|---|---|
| L1 | Hardware | TEE a nivel de SoC | 4K Ultra HD |
| L2 | Híbrida | TEE para claves, software para video | 1080p |
| L3 | Software | Solo CDM por software | 720p |
El nivel L1 requiere un Trusted Execution Environment (TEE) a nivel de hardware, donde se realizan todas las operaciones criptográficas. Las claves de contenido nunca salen del TEE, evitando su extracción incluso si el sistema operativo principal está comprometido.
Los dispositivos con certificación L1 pueden reproducir contenido en calidad 4K y HDR, ya que el flujo de video descifrado se envía directamente a una salida de video protegida sin acceso desde los procesos del usuario.
El nivel L3 realiza todas las operaciones criptográficas por software dentro del espacio de usuario normal. Este es el modo menos seguro, donde las claves pueden extraerse de la RAM del dispositivo.
Widevine L3 limita la calidad de reproducción a 720p, lo que lo hace adecuado para visualización en dispositivos de gama baja o navegadores de escritorio sin protección por hardware.
fun getSecurityLevel(): String {
val mediaDrm = MediaDrm(UUID.fromString(
"edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
))
val level = mediaDrm.getPropertyString(
"securityLevel"
)
return level.ifEmpty { "L3" }
}
La integración de Widevine en aplicaciones móviles se realiza a través de las API estándar MediaDrm (Android) y AVContentKeySession (iOS). En la mayoría de los casos, el desarrollador no necesita trabajar directamente con DRM — las bibliotecas de reproductores como ExoPlayer y AVPlayer manejan las licencias automáticamente.
En Android, Widevine se integra a través de la clase MediaDrm, que proporciona acceso directo al CDM. Para aplicaciones de streaming, se recomienda usar ExoPlayer con el módulo DrmSessionManager, que gestiona automáticamente las solicitudes de licencias.
Al inicializar el reproductor, debe especificar el UUID del esquema Widevine (`edef8ba9-79d6-4ace-a3c8-27dcd51d21ed`) y la URL del servidor de licencias proporcionada por el proveedor de contenido. ExoPlayer maneja el ciclo de solicitud y renovación de licencias automáticamente.
val drmLicenseUrl = "https://license.service.com/wv"
val mediaItem = MediaItem.Builder()
.setUri(Uri.parse(streamUrl))
.setDrmKeyRequestUrl(drmLicenseUrl)
.setDrmKeyRequestHeaders(
mapOf("Authorization" to token)
)
.build()
val exoPlayer = ExoPlayer.Builder(context)
.build()
exoPlayer.setMediaItem(mediaItem)
exoPlayer.prepare()
En plataformas web, Widevine funciona a través de Media Source Extensions (MSE) y Encrypted Media Extensions (EME). Los navegadores basados en Chromium tienen Widevine CDM incorporado, y el desarrollador solo necesita inicializar una sesión EME con la configuración correcta.
Para usar Widevine en un navegador, debe especificar un iniciador de licencia con el tipo keySystem `com.widevine.alpha`. Después de crear una instancia de MediaKeys, el navegador maneja automáticamente las solicitudes de licencia.
Al integrar Widevine, es importante manejar correctamente los errores de licencias que ocurren por falta de derechos de acceso, vencimiento de suscripción o incompatibilidad del dispositivo. El error TYPE_EXPIRED_LICENSE requiere actualizar la licencia mediante una nueva solicitud al servidor, mientras que TYPE_OUTPUT_NOT_ALLOWED indica incompatibilidad de la salida de video con las políticas DRM.
Se recomienda implementar un mecanismo de reintentos con retroceso exponencial para errores de red temporales y mostrar al usuario un mensaje claro para fallos de licencia permanentes. El registro de errores de sesiones DRM ayuda a los proveedores de contenido a identificar problemas con dispositivos y optimizar las políticas.
Widevine compite con FairPlay de Apple y PlayReady de Microsoft, formando las tres principales soluciones DRM en el mercado de plataformas móviles. Cada tecnología tiene sus propias ventajas y limitaciones relacionadas con el ecosistema de la plataforma.
| Característica | Widevine | FairPlay | PlayReady |
|---|---|---|---|
| Desarrollador | Apple | Microsoft | |
| Plataforma principal | Android, Chrome | iOS, tvOS, Safari | Windows, Xbox, UWP |
| Nivel máximo | L1 (4K) | Equivalente a L1 (4K) | SL3000 (4K) |
| Protección por hardware | TEE | Secure Enclave | TPM + TEE |
La selección de DRM depende de las plataformas objetivo de la aplicación. Para proyectos centrados en Android, Widevine es la opción natural, ya que viene preinstalado en todos los dispositivos certificados con Google Mobile Services y no requiere tarifas de licencia adicionales.
Para proyectos multiplataforma, a menudo se utiliza un enfoque multi-DRM con agregadores de licencias como Axinom, EZDRM y Vualto, que proporcionan una API unificada para trabajar con los tres sistemas DRM. Esto reduce la complejidad de la integración y centraliza la gestión de licencias.
Preguntas frecuentes
Widevine es una tecnología DRM de Google diseñada para proteger el contenido de video digital contra la copia no autorizada. Los servicios de streaming la utilizan para cifrar video y gestionar el acceso a través de un sistema de licencias.
Widevine admite tres niveles de seguridad: L1 con cifrado por hardware en TEE, L2 con un enfoque híbrido y L3 con implementación totalmente por software. L1 permite la reproducción de contenido en 4K, L3 está limitado a calidad 720p.
Puede verificar el nivel de Widevine en Android a través de la clase MediaDrm solicitando la propiedad securityLevel. Para ello, cree una instancia de MediaDrm con el UUID de Widevine y llame a getPropertyString, o use aplicaciones de terceros como DRM Info.
Widevine es desarrollado por Google para Android y Chrome, mientras que FairPlay es para iOS, tvOS y Safari. Ambos admiten cifrado por hardware y 4K, pero Widevine está más extendido en dispositivos Android, mientras que FairPlay es el estándar de facto en el ecosistema de Apple.
Para usar Widevine en una aplicación móvil, no se requiere una licencia separada — la tecnología está incorporada en dispositivos Android certificados y Chrome. Solo se cobran tarifas a los proveedores de contenido por usar el servidor de licencias.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también