Widevine — это технология DRM, разработанная Google для защиты видеоконтента от неавторизованного копирования на мобильных устройствах, Smart TV и веб-платформах. Шифрование контента выполняется через модуль CDM, который поддерживается на 4 миллиардах устройств по всему миру. Технология Widevine обеспечивает совместимость с Android, iOS, Chrome и Smart TV, позволяя сервисам стриминга защищать премиум-контент на любых платформах.
Главное
Widevine — это проприетарная технология DRM, приобретённая Google в 2010 году и ставшая стандартом де-факто для защиты видеоконтента в экосистеме Android. Она используется крупнейшими стриминговыми сервисами, включая Netflix, Amazon Prime Video, Disney+ и Hulu, для предотвращения неавторизованного копирования и распространения контента.
Widevine поддерживает шифрование по стандарту AES-128 CBC с использованием ключей контента, которые передаются только авторизованным устройствам через защищённый канал лицензирования. Система обеспечивает сквозную защиту от момента шифрования на сервере до декодирования на устройстве пользователя.
Компания Widevine Technologies была основана в 1999 году и изначально разрабатывала решения для защиты контента на кабельных телевизионных платформах. После приобретения Google в 2010 году технология была адаптирована для мобильных платформ и интегрирована в ОС Android начиная с версии 4.4 KitKat. С 2015 года Widevine стал обязательным компонентом сертификации Google Mobile Services.
В 2018 году Google представила Widevine Modular DRM, которая позволила производителям устройств реализовывать разные уровни защиты аппаратно без изменения кода ОС. Сегодня Widevine Modular поддерживается на более чем 4 миллиардах устройств и является основным DRM-механизмом на Android.
Архитектура Widevine состоит из трёх ключевых компонентов: Content Decryption Module (CDM), сервера лицензий и средства шифрования контента. CDM выполняет дешифровку на стороне клиента и взаимодействует с аппаратным Trusted Execution Environment (TEE) для безопасного хранения ключей.
Сервер лицензий Google управляет выдачей ключей на основе политик контент-провайдера, которые определяют ограничения по времени, количеству устройств и качеству воспроизведения. Инструмент шифрования подготавливает контент на стороне провайдера, упаковывая его в формат MPEG-DASH или HLS с шифрованием CENC.
Процесс защиты начинается с этапа упаковки контента, когда медиафайл шифруется с использованием ключа контента на сервере провайдера. Зашифрованный поток передаётся на устройство пользователя через CDN, где CDM запрашивает лицензию у сервера лицензий.
Сервер лицензий проверяет аутентичность устройства и право доступа к контенту. Если проверка проходит успешно, сервер выдаёт лицензию с ключом, который CDM использует для расшифровки. Лицензия может содержать ограничения по времени просмотра и разрешению.
Обмен лицензиями в Widevine реализован через протокол EME (Encrypted Media Extensions) в браузерах или через SDK на мобильных платформах. Запрос лицензии формируется CDM и отправляется на сервер лицензий по HTTPS, что обеспечивает защиту от перехвата ключей в транзите.
Сервер обрабатывает запрос и возвращает лицензию, которая также зашифрована и может быть расшифрована только CDM устройства. Аппаратное связывание ключа с конкретным устройством предотвращает его перенос на другие платформы.
Widevine использует стандарты Common Encryption (CENC), определённые в ISO/IEC 23001-7, что обеспечивает совместимость с форматами MPEG-DASH и HLS. Шифрование AES-128 в режиме CTR или CBC применяется для защиты медиапотоков.
Для ключевой деривации используется HKDF (HMAC-based Key Derivation Function), что позволяет генерировать уникальные ключи для каждого сегмента контента. Поддержка HLS в Widevine добавлена с версии Modular 2.0, что расширило совместимость с платформами 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 определяет три уровня безопасности, которые различаются по способу выполнения криптографических операций и обработки контента. Уровень L1 обеспечивает максимальную защиту, L3 — минимальную, L2 занимает промежуточное положение.
| Уровень | Тип защиты | Требования к устройству | Максимальное разрешение |
|---|---|---|---|
| L1 | Аппаратная | TEE на уровне SoC | 4K Ultra HD |
| L2 | Гибридная | TEE для ключей, софт для видео | 1080p |
| L3 | Программная | Только программный CDM | 720p |
Уровень L1 требует наличия Trusted Execution Environment (TEE) на аппаратном уровне, где выполняются все криптографические операции. Ключи контента никогда не покидают TEE, что исключает их извлечение даже при компрометации основной ОС.
Устройства с сертификацией L1 могут воспроизводить контент в качестве 4K и HDR, так как расшифрованный видеопоток передаётся напрямую в защищённый видеовыход без доступа со стороны пользовательских процессов.
Уровень L3 выполняет все криптографические операции программно в обычном пользовательском пространстве. Это наименее безопасный режим, при котором ключи могут быть извлечены из оперативной памяти устройства.
Widevine L3 ограничивает качество воспроизведения до 720p, что делает его пригодным для просмотра на младших устройствах или десктопных браузерах без аппаратной защиты.
fun getSecurityLevel(): String {
val mediaDrm = MediaDrm(UUID.fromString(
"edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
))
val level = mediaDrm.getPropertyString(
"securityLevel"
)
return level.ifEmpty { "L3" }
}
Интеграция Widevine в мобильные приложения выполняется через стандартные API MediaDrm (Android) и AVContentKeySession (iOS). В большинстве случаев разработчику не требуется напрямую работать с DRM — библиотеки плееров, такие как ExoPlayer и AVPlayer, обрабатывают лицензирование автоматически.
На Android Widevine интегрируется через класс MediaDrm, который предоставляет прямой доступ к CDM. Для стриминговых приложений рекомендуется использовать ExoPlayer с модулем DrmSessionManager, который автоматически управляет запросами лицензий.
При инициализации плеера необходимо указать UUID схемы Widevine (`edef8ba9-79d6-4ace-a3c8-27dcd51d21ed`) и URL сервера лицензий, который предоставляет контент-провайдер. ExoPlayer самостоятельно обрабатывает цикл запроса и обновления лицензий.
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()
На веб-платформах Widevine работает через Media Source Extensions (MSE) и Encrypted Media Extensions (EME). Браузеры на основе Chromium поддерживают Widevine CDM встроенно, и разработчику достаточно инициализировать сессию EME с правильной конфигурацией.
Для работы с Widevine в браузере необходимо указать инициатор лицензии с типом keySystem `com.widevine.alpha`. После создания экземпляра MediaKeys браузер автоматически обрабатывает запросы лицензий.
При интеграции Widevine важно корректно обрабатывать ошибки лицензирования, которые возникают при отсутствии прав доступа, истечении подписки или несовместимости устройства. Ошибка TYPE_EXPIRED_LICENSE требует обновления лицензии через повторный запрос к серверу, а TYPE_OUTPUT_NOT_ALLOWED указывает на несовместимость видеовыхода с политиками DRM.
Рекомендуется реализовать механизм повторных попыток с экспоненциальной задержкой при временных сетевых ошибках и показывать пользователю понятное сообщение при постоянных отказах лицензирования. Логирование ошибок DRM-сессий помогает контент-провайдерам выявлять проблемы с устройствами и оптимизировать политики.
Widevine конкурирует с FairPlay от Apple и PlayReady от Microsoft, формируя три основных DRM-решения на рынке мобильных платформ. Каждая технология имеет свои преимущества и ограничения, связанные с экосистемой платформы.
| Характеристика | Widevine | FairPlay | PlayReady |
|---|---|---|---|
| Разработчик | Apple | Microsoft | |
| Основная платформа | Android, Chrome | iOS, tvOS, Safari | Windows, Xbox, UWP |
| Максимальный уровень | L1 (4K) | Эквивалент L1 (4K) | SL3000 (4K) |
| Аппаратная защита | TEE | Secure Enclave | TPM + TEE |
Выбор DRM зависит от целевых платформ приложения. Для Android-first проектов Widevine является естественным выбором, так как он предустановлен на всех сертифицированных устройствах с Google Mobile Services и не требует дополнительной лицензионной платы.
Для кросс-платформенных проектов часто используется мульти-DRM подход с использованием агрегаторов лицензий, таких как Axinom, EZDRM и Vualto, которые предоставляют единый API для работы со всеми тремя DRM-системами. Это снижает сложность интеграции и централизует управление лицензиями.
Часто задаваемые вопросы
Widevine — это технология DRM от Google, предназначенная для защиты цифрового видеоконтента от неавторизованного копирования. Она используется стриминговыми сервисами для шифрования видео и управления доступом к нему через систему лицензирования.
Widevine поддерживает три уровня безопасности: L1 с аппаратным шифрованием в TEE, L2 с гибридным подходом и L3 с полностью программной реализацией. L1 позволяет воспроизводить контент в 4K, L3 ограничен качеством 720p.
Проверить уровень Widevine на Android можно через класс MediaDrm, запросив свойство securityLevel. Для этого создаётся экземпляр MediaDrm с UUID Widevine и вызывается getPropertyString, или используются сторонние приложения типа DRM Info.
Widevine разработан Google для Android и Chrome, а FairPlay — для iOS, tvOS и Safari. Оба поддерживают аппаратное шифрование и 4K, но Widevine шире распространён на Android-устройствах, а FairPlay является стандартом де-факто в экосистеме Apple.
Для использования Widevine в мобильном приложении отдельная лицензия не требуется — технология встроена в сертифицированные устройства Android и Chrome. Плата взимается только с контент-провайдеров за использование сервера лицензий.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также