Sistemas DRM
Widevine, PlayReady, FairPlay y WisePlay hacen lo mismo para fabricantes distintos. Estas son las diferencias que te van a afectar.
Por qué necesitas más de uno #
Ningún sistema DRM funciona en todos los dispositivos, y no es un problema técnico que vaya a resolverse: cada uno pertenece a un fabricante que lo incorpora en su propio hardware y software. Apple no instala Widevine en un iPhone, ni Google instala FairPlay en Android.
Para llegar a todo el mundo hay que cifrar el contenido de forma que varios sistemas puedan abrirlo, cada uno con su propia licencia. Eso es lo que hace el estándar Common Encryption: un mismo archivo cifrado, varias cabeceras de protección, una por sistema.
Con tres cubres prácticamente todo
En Airi eso es la lista drmSystems al crear una clave. Cada sistema que añades genera los datos de protección correspondientes; la clave de cifrado es la misma para todos.
De un vistazo #
| Widevine | PlayReady | FairPlay | WisePlay | |
|---|---|---|---|---|
| Fabricante | Microsoft | Apple | Huawei | |
| Dónde reproduce | Android, Chrome, Firefox, Edge, Android TV, Chromecast, muchos televisores | Windows, Xbox, Edge, televisores Samsung y LG, descodificadores | iPhone, iPad, Mac (Safari), Apple TV | Dispositivos Huawei y HarmonyOS |
| Formato de streaming | DASH y HLS | DASH y HLS | Solo HLS | DASH y HLS |
| Esquemas de cifrado | cenc y cbcs | cenc y cbcs (desde PlayReady 4) | Solo cbcs | cenc y cbcs |
| Señalización | Caja pssh | Caja pssh + cabecera de protección | EXT-X-KEY con URI skd:// — no hay pssh | Caja pssh |
| Niveles de seguridad | L1 / L2 / L3 | SL150 / SL2000 / SL3000 | Sin niveles nombrados | Niveles 1 a 3 |
| Control de HDCP | Sí | Sí | Distinto (ver abajo) | Sí |
La fila que más problemas causa es la de esquemas de cifrado
cbcs. Si empaquetas en cenc para Widevine y PlayReady, los dispositivos Apple no podrán reproducir tu contenido, hagas lo que hagas con las licencias. Está explicado en Esquemas de cifrado.Widevine #
- Fabricante
- System ID
edef8ba9-79d6-4ace-a3c8-27dcd51d21ed- En Airi
"widevine"
Es el sistema con más alcance: Android, los navegadores de escritorio basados en Chromium, Firefox, la mayoría de televisores conectados y los dispositivos Chromecast. Si solo vas a activar uno para empezar, activa este.
L1, L2 y L3
Widevine clasifica los dispositivos según cuánta parte del proceso ocurre dentro de un entorno seguro de hardware (un TEE), fuera del alcance del sistema operativo:
- L1 — el descifrado y la decodificación de vídeo ocurren dentro del hardware seguro. Es lo que exigen los estudios para 4K y, muchas veces, para 1080p.
- L2 — el descifrado va en hardware seguro, pero la decodificación no. Poco frecuente en la práctica.
- L3 — todo en software. El dispositivo no tiene hardware seguro, o no lo expone. Es el caso de casi todos los navegadores de escritorio.
Chrome en un ordenador es L3
Lo que configuras en Airi
El campo security_level de la política va del 1 al 5 y expresa lo que el dispositivo debe cumplir para recibir la licencia. No es lo mismo que la etiqueta L1/L2/L3, aunque se correspondan a grandes rasgos:
| `security_level` | Qué exige | Equivale más o menos a |
|---|---|---|
| 1 | Criptografía en software | L3 — cualquier dispositivo |
| 2 | Criptografía en software, con la clave protegida | |
| 3 | Criptografía dentro del hardware seguro | Territorio L1 |
| 4 | Además, decodificación en hardware seguro | |
| 5 | Toda la cadena en hardware, hasta la salida de vídeo | L1 estricto |
HDCP
HDCP protege el cable entre el dispositivo y la pantalla, para que no se pueda grabar la señal con un capturador. Se configura con hdcp:
HDCP_NONE— sin exigencia. Lo que permite reproducir en monitores viejos y en máquinas virtuales.HDCP_V1— protección básica; la cumple casi cualquier pantalla moderna.HDCP_V2_2— lo habitual para 4K. Deja fuera bastantes televisores y adaptadores anteriores a 2015.HDCP_NO_DIGITAL_OUTPUT— prohíbe cualquier salida digital. Solo pantalla integrada.
También puedes cortar la salida analógica con disable_analog_output, y controlar la duración de la licencia y de la reproducción offline con license_duration_seconds, playback_duration_seconds y can_persist.
PlayReady #
- Fabricante
- Microsoft
- System ID
9a04f079-9840-4286-ab92-e65be0885f95- En Airi
"playready"
Cubre el mundo Microsoft —Windows, Xbox, Edge— y, sobre todo, buena parte de los televisores conectados y descodificadores de operador. Muchos televisores Samsung y LG traen PlayReady además de, o en lugar de, Widevine.
Niveles de seguridad
| Nivel | Qué es | Cuándo usarlo |
|---|---|---|
150 | Solo desarrollo y pruebas. No ofrece protección real. | Nunca en producción. |
2000 | Implementación en software. El nivel más extendido. | Lo normal para SD y HD. |
3000 | Implementación en hardware seguro. | Para 4K y cuando el estudio lo exija. |
SL150 no protege nada
Una particularidad
PlayReady, además de la caja pssh, devuelve una cabecera de protección (protectionHeader) que algunos empaquetadores necesitan por separado. La encontrarás en el campo drmSystemsData de la respuesta, junto al pssh.
Ojo también con el tipo: en PlayReady el nivel de seguridad es una cadena de texto ("2000"), no un número. Es la vocabulario del propio sistema y lo respetamos tal cual para que puedas contrastar cualquier traza con lo que tienes configurado.
FairPlay Streaming #
- Fabricante
- Apple
- System ID
94ce86fb-07ff-4f43-adb8-93d2fa968ca2- En Airi
"fairplay"
El único camino para llegar a iPhone, iPad, Mac con Safari y Apple TV. También el más distinto de los cuatro: si algo se comporta de forma rara en tu integración, casi siempre es FairPlay.
FairPlay no devuelve pssh, y no es un error
pssh dentro del vídeo. FairPlay no usa ese mecanismo: la señalización va en la etiqueta EXT-X-KEY del manifiesto HLS, con una URI skd://. Por eso en nuestra respuesta verás uriExtXKey en lugar de pssh. Es exactamente lo que tu empaquetador espera.Tres restricciones que conviene conocer antes de empezar
- Solo HLS. FairPlay no funciona sobre DASH. Si publicas únicamente DASH, los dispositivos Apple se quedan fuera.
- Solo
cbcs. No admitecenc. Este es el motivo principal por el que hoy se recomienda empaquetar encbcs. - Necesitas un certificado de Apple. El servidor de licencias FairPlay requiere un certificado emitido por Apple a tu cuenta de desarrollador. Se solicita desde tu cuenta de Apple Developer y lo configura tu proveedor de DRM.
Qué se puede configurar
FairPlay no tiene niveles de seguridad numerados como Widevine o PlayReady. Su modelo de protección de salida lo gestiona el propio sistema operativo. Lo que sí controlas son las duraciones y la persistencia:
rental_duration_seconds— cuánto vale la licencia desde que se emite.playback_duration_seconds— cuánto dura la ventana desde que se empieza a reproducir.persistence_is_allowed— si se permite descargar para ver sin conexión.lease_duration— para licencias de tipo préstamo.
WisePlay #
- Fabricante
- Huawei
- System ID
3d5e6d35-9b9a-41e8-b843-dd3c6e72c42c- En Airi
"wiseplay"
El sistema de Huawei, presente en sus móviles con HMS, en HarmonyOS y en sus televisores. Importa sobre todo en el mercado chino y allí donde los dispositivos Huawei tienen peso, porque esos equipos no traen los servicios de Google y por tanto no traen Widevine.
Si tu audiencia está en Europa o América, es muy probable que no lo necesites. Actívalo solo si sabes que lo necesitas: cada sistema que añades no cuesta más dinero —el precio va por clave, no por sistema—, pero sí añade una pieza más que mantener y depurar.
Se configura con security_level (1 a 3), license_type (ONLINE o PERSISTENT) y license_duration_seconds. Internamente maneja fechas absolutas de inicio y caducidad, que calculamos por ti a partir de la duración.
Esquemas de cifrado: cenc y cbcs #
Esta es la decisión técnica que más caro sale equivocar, porque cambiarla obliga a volver a cifrar todo el catálogo.
Common Encryption define dos formas de cifrar los mismos bytes de vídeo:
| `cenc` | `cbcs` | |
|---|---|---|
| Cómo cifra | AES en modo CTR, la muestra completa | AES en modo CBC, por patrones (cifra un bloque de cada diez) |
| Widevine | Sí | Sí |
| PlayReady | Sí | Desde PlayReady 4 |
| FairPlay | No | Sí |
| WisePlay | Sí | Sí |
Un archivo cifrado en cenc no lo puede abrir FairPlay
cbcs, o mantener dos copias cifradas del catálogo.PlayReady en navegador suele admitir solo `cenc`
cbcs no significa que el cliente que tienes delante lo haga. Medido en Edge sobre Windows: EME acepta la robustez 3000, y aun así el cliente no admite cbcs. El servidor concede la licencia correcta, el reproductor la recibe, y no puede descifrar. Compruébalo en tu propio equipo desde la demo.
Y hay una trampa mayor esperando debajo: en Windows no hay un cliente PlayReady, hay dos, y el nombre del sistema de claves decide cuál te atiende. com.microsoft.playready a secas te da el de software, cuyo certificado dice SecurityLevel: 2000 por muy capaz que sea la máquina. El de hardware solo responde si lo nombras: com.microsoft.playready.recommendation.3000. Medido en el mismo equipo, el mismo día: por el primero, el servidor rechaza la clave SL3000; por el segundo, la concede y el 1080p reproduce. Si pides hardware con el cliente de software, la negativa que recibes describe al mensajero, no al aparato — y en Shaka el nombre se cambia con drm.keySystemsMapping, no con preferredKeySystems.Y hay un segundo motivo, que no depende del navegador
ALGID=AESCTR, es decir, cifrado en modo CTR — aunque el contenido esté empaquetado en cbcs, que es CBC. Lo comprobamos pidiéndosela de todas las formas posibles y no cambia. Un cliente PlayReady que sí supiera leer cbcs recibiría igualmente una cabecera diciéndole que el vídeo es CTR. Si necesitas PlayReady, empaqueta en cenc: no es solo una limitación de Edge, es también lo único que la cabecera sabe describir.Qué elegir
Depende de si necesitas PlayReady y Apple a la vez, y la respuesta honesta es que con un solo juego de archivos no siempre se puede.
| Tu caso | Qué empaquetar |
|---|---|
| Web y Android, sin Apple ni PlayReady | cbcs o cenc, da igual. Widevine hace los dos. |
| Necesitas Apple | cbcs obligatorio para el HLS que sirve a FairPlay. |
| Necesitas PlayReady en navegador | cenc, porque muchos clientes de Edge no leen cbcs. |
| Necesitas los dos | Dos empaquetados: DASH en cenc para Widevine y PlayReady, HLS en cbcs para FairPlay. Es lo que hacen los servicios grandes. |
Las claves son las mismas en los dos empaquetados: pides una vez y cifras dos. Lo que se duplica es el almacenamiento, no el coste de claves ni de licencias.
La elección no pasa por Airi
Cómo elegir para tu caso #
Un catálogo normal, audiencia occidental
Widevine, PlayReady y FairPlay, empaquetado en cbcs. Nivel Equilibrado para 1080p y por debajo, Estricto solo si sirves 4K o el estudio lo exige.
Solo web, sin Apple
Widevine y PlayReady bastan. Ten presente que si algún día quieres llegar a Safari o a iPhone tendrás que reempaquetar, así que empaquetar ya en cbcs es una precaución barata.
Contenido con licencia de estudio
El contrato manda: normalmente exige hardware para 4K y a veces para 1080p. Configura una clave por calidad y aplica el nivel que te pidan a cada una — es exactamente el caso para el que existen las claves por calidad.
Mercado chino o dispositivos Huawei
Añade WisePlay a los tres anteriores. Los equipos Huawei recientes no tienen Widevine.