This post is also available in: Английский
Шифрование контента средствами протокола HTTP Live Streaming
В протоколе HTTP LS предусмотрена возможность шифрования контента и безопасной аутентификации пользователя для получения ключа расшифровки по протоколу HTTPS. Для части разработчиков этих возможностей может быть вполне достаточно.
Apple предоставляет бесплатные инструменты для перекодирования видео в формат HTTP LS, а также для его шифрования. При этом может использоваться как единый ключ для всего контента, так и отдельные ключи для каждого из потоков плейлиста с переменным битрейтом. Также существует возможность зашифровать контент несколькими ключами, которые будут попеременно меняться внутри одного потока. Кроме того, ключи защищены «вектором инициализации», который также может меняться по ходу воспроизведения контента.
На данный момент поддерживается протокол шифрования AES-128. Ссылки на ключи для расшифровки указываются в плейлисте, содержащем перечень чанков видео. Каждый ключ, встреченный клиентов в плейлисте, загружается по протоколу HTTP или HTTPS и используется для расшифровки. На стороне сервера может быть реализована специфическая для вашего приложения логика, с помощью которой контроллируется выдача ключей только тем пользователям, которым разрешено смотреть контент.
Новая версия Adobe Access с поддержкой iOS
Система DRM компании Adobe под названием Flash Access на сегодняшний день является практически единственным решением для защищенной доставки профессионального видео с наибольшим охватом веб-аудитории. Добиться этого она смогла благодаря интеграции с Flash Player — плагином, установленным по статистике Adobe на 99% персональных компьютеров, подключенных к Интернет. Однако, в последнее время в веб оформились две сильные тенденции, которые не играют на руку системе Flash Access. Во-первых, увеличивается число и процентное соотношение пользователей, которые выходят в сеть, используя мобильные устройства, на которых использование Flash осложнено по ряду причин, а зачастую и вовсе невозможно. Во-вторых, интерес разработчиков все больше смещается от проприетарных технологий таких, как Flash и HTTP Dynamic Streaming, к открытым стандартам таким, как HTML5 и HTTP Live Streaming. Компания Adobe, следуя в рамках общей тенденции, выпустила обновление своей системы DRM, которая теперь называется Adobe Access версии 4.0.
Возможности шифрования, реализованные в HTTP LS, послужили основой для реализации функций новой версии Adobe Access с поддержкой HTTP LS и, прежде всего, ориентированной на устройства на iOS. Поддержка iOS — это самая главная и наиболее долгожданная функциональность новой версии. Компанией Adobe заявлена поддержка версий iOS начиная с 4.3 и выше, а также следующих моделей устройств на iOS: iPhone 4 или iPhone 4S; iPad, iPad 2, или новый iPad; iPod Touch 4-го поколения.
Помимо обновления списка поддерживаемых устройств Adobe Access включает следующие функции:
- Единый DRM для самых разнообразных устройств: ПК на Windows, Linux и Mac OS X, мобильные устройства и медиацентры на Android.
- Фильтрация доступа к контенту по устройствам, их типу, ОС, размеру экрана, аппаратным возможностям.
- Простое масштабирование системы DRM при увеличивающейся нагрузке.
- Ротация ключей доступа.
Принцип работы с DRM-сервером
Чтобы защитить контент от несанкционированного просмотра и распространения, владелец контента создает лицензию на каждую единицу контента. Перед началом просмотра приложение запрашивает лицензию у сервера DRM и при необходимости производит аутентификацию пользователя. Из полученной лицензии приложение получает правила и ограничения, заданные правообладателем, которые необходимо соблюсти на стороне клиента, а также ключ для расшифровки контента.
Работа с Adobe Access на iOS
Поставка Adobe Access включает SDK для работы с системой DRM и пример приложения AccessPlayer, использующего этот SDK. SDK представляет собой фреймворк drmNativeInterface для Xcode, который подключается к нативному приложению. Для работы фреймворк требует подключения к приложению фреймворка Security и библиотеки libstdc++. API фреймворка для iOS копирует функциональность API, доступного для Flash-приложений написанных на ActionScript, но синтаксис и имена методов переработы, для того, чтобы лучше следовать принятым в iOS-разработке соглашениям. Кроме того iOS API активно использует синтаксическую конструкцию «блок», доступную в iOS, для задания колбеков для асинхронно выполняющихся методов. Это дает возможность писать более структурированный код и без дополнительных усилий ассоциировать ответы DRM-сервера с конкретной сессией, в отличие от ActionScript, где колбеки назначаются через механизм событий.
Когда пользователь приложения пытается воспроизвести защищенный контент, приложение должно сделать обращение к системе DRM, используя API, предоставляемые SDK. Это обращение состоит из следующих шагов:
- Приложение получает файл метаданных DRM, соответствующий воспроизводимому контенту. Этот файл содержит информацию, необходимую приложению для получения лицензии на просмотр контента.
- Приложение проверяет, была ли необходимая лицензия ранее загружена и сохранена на устройстве. Если да, то приложение переходит к расшифровке и воспроизведению контента.
- Приложение проверяет, необходима ли аутентификация для получения лицензии.
- Если требуется аутентификация, приложение запрашивает у пользователя логин и пароль и отправляет эти данные на сервер лицензий.
- Если требуется регистрация в домене, то приложение выполняет ее. Регистрация в домене позволяет использовать одну и ту же лицензию сразу на нескольких устройствах, которые прошли регистрацию в данном домене.
- После успешной аутентификации, приложение загружает лицензию, кэширует ее на устройстве и переходит к расшифровке и воспроизведению контента. Закэшированная лицензия может быть повторно использована в следующей сессии просмотра.
В простейшем случае код, необходимый для воспроизведения защищенного видеофайла, может выглядеть так:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 -(void) openPlaylist:(NSURL*)m3u8
{
DRMOperationError defError =
^(NSUInteger major, NSUInteger minor, NSError * platformError)
{ NSLog(@"error"); };
DRMManager * manager = [DRMManager sharedManager];
if ([manager isSupportedPlaylist:m3u8]) {
[manager getUpdatedPlaylist url:m3u8
error:defError
updated:^(NSURL * newPlaylist, DRMMetadata * newMetadata) {
m_session = [manager createDRMSession metadata:newMetadata
playlist:newPlaylist error:defError complete:^() {
self.playerItem = [AVPlayerItem playerItemWithURL:playlist];
self.player = [AVPlayer playerWithPlayerItem:playerItem];
[playerView setPlayer:player];
[player play];
}];
}];
}
}
Инициализация взаимодействия с сервером DRM занимает некоторое время в самом начале воспроизведения контента. Чтобы сократить его, можно выполнить инициализацию заранее.
При работе с SDK следует помнить о том, что он скомпилирован специально таким образом, чтобы затруднить отладку. Это было сделано для того, чтобы дополнительно защитить алгоритмы, используемые фреймворком.
Теоретически, благодаря возможности кэшировать лицензию на клиенте, возможна поддержка защищенного оффлайнового просмотра, но на практике iOS не включает встроенных средств для сохранения контента в формате HTTP LS на диск, поэтому их придется реализовать самостоятельно.
* * *
Более полную информацию о возможностях Adobe Access вы можете получить из наших предыдущих статей:
- Adobe Media Server 5 и Adobe Access 4
- Flash Access 3.0: Дополнительные возможности
- Flash Access 3: DRM в Android устройствах
- Adobe Flash Access 3.0
- Flash Access: защита live видео
- Flash Access: DRM для защищенного стриминга
- Adobe DRM для онлайн видео
При подготовке этой статьи были использованы следующие источники:
- Документация, доступная на сайте Adobe Access.