Защита содержимого DASH с помощью Microsoft PlayReady
Реализация защиты содержимого для профилей динамической и по запросу динамической адаптивной потоковой передачи по протоколу HTTP (ISO/IEC 23009-1) с использованием общего шифрования (ISO/IEC 23001-7) и Microsoft PlayReady.
текущей версии
Текущая версия версии 1.3 опубликована 15 февраля 2018 г.
Дополнительные сведения см. в
Абстрактные
С спецификацией ISO/IEC 23009-1 базовый формат файлов мультимедиа ISO по запросу и live DASH можно использовать с спецификацией ISO/IEC 23001-7 , "Common Encryption in ISO base media file format files". Microsoft PlayReady поддерживает iso/IEC 23001-7 и ISO/IEC 23009-1. В этой спецификации описано, как создать файл описания презентации мультимедиа ISO/IEC 23009-1, который сигнализирует об использовании Microsoft PlayReady для ISO/IEC 14496-12 мультимедиа для сценариев динамической и адаптивной потоковой передачи по запросу.
юридическое уведомление
© Корпорация Майкрософт 2018 г. Все права защищены. Этот документ предоставляется "as-is". Сведения, содержащиеся в этом документе, включая URL-адрес и другие ссылки на веб-сайт Интернета, могут изменяться без уведомления. Вы несете риск использования.
Этот документ не предоставляет никаких юридических прав на любую интеллектуальную собственность в любом продукте Майкрософт. Вы можете скопировать и использовать этот документ для внутренних справочных целей. Вы не можете удалить какие-либо уведомления из этого документа.
Содержимое
Секция | Титул |
---|---|
1 | введение |
1.1 | области |
1.2 | Соглашения |
1.3 | терминология , аббревиатуры и акронимы |
1.4 | ссылки |
1.5 | журнал изменений |
2 | схема защиты содержимого PlayReady DASH |
2.1 | элементы дескриптора DASH ContentProtection |
2.2 | рекомендации по реализации и требования |
3 | Пример описания презентации мультимедиа |
3.1 | исправление PRO в сегменте инициализации или содержимого мультимедиа |
3.2 | Включение объекта PlayReady в MPD |
таблицы
Стол | Титул |
---|---|
Таблица 1 | поле шифрования |
Таблица 2 | пример представления KID |
1. Введение
Динамическая адаптивная потоковая передача MPEG по стандарту HTTP [DASH] задает форматы доставки содержимого мультимедиа от HTTP-серверов к HTTP-клиентам. В DASH представление содержимого мультимедиа описывается файлом описания презентации мультимедиа (MPD). MPD предоставляет идентификаторы ресурсов для сегментов, а также контекст для этих ресурсов в презентации мультимедиа.
В dash a Media Presentation состоит из последовательности времени периодов ([DASH], раздела 5.3.2. В течение периода содержимое мультимедиа упорядочивается в набор взаимозаменяемых версий с именем "Наборы адаптации" ([DASH], раздел 5.3.3. Каждый набор адаптации состоит из представлений ([DASH], раздел 5.3.5) — конечные версии компонентов содержимого мультимедиа.
Элемент Дескриптора ContentProtection может быть связан с набором адаптации или представлением, чтобы указать схему шифрования, а для включения получения лицензии DRM можно добавить один или несколько элементов Дескриптора ContentProtection ([DASH], раздел 5.8.4.1.
Область 1.1
Как использовать Microsoft PlayReady в качестве схемы защиты содержимого в файле описания презентации мультимедиа ISO/IEC 23009-1 DASH.
1.2 Соглашения
Ключевые слова "ДОЛЖНЫ", "НЕ ДОЛЖНЫ", "ОБЯЗАТЕЛЬНО", "ДОЛЖНЫ", "ДОЛЖНЫ", "НЕ ДОЛЖНЫ", "НЕ ДОЛЖНЫ", "РЕКОМЕНДУЕТСЯ", "МАЙ" и "НЕОБЯЗАТЕЛЬНО" в этом документе должны быть интерпретированы, как описано в [RFC2119]. Это:
"MUST", "REQUIRED" и "MUST" означает, что определение является абсолютным требованием спецификации.
"НЕ ДОЛЖНЫ" и "НЕ ДОЛЖНЫ" означать, что определение является абсолютным запретом спецификации.
"ДОЛЖНЫ" и "РЕКОМЕНДУЕТСЯ" означают, что могут быть допустимые причины игнорировать конкретный элемент, но полные последствия должны быть поняты и тщательно взвешиваться перед выбором другого курса.
"НЕ СЛЕДУЕТ" и "НЕ РЕКОМЕНДУЕТСЯ" означает, что могут быть допустимые причины, если конкретное поведение приемлемо, но полные последствия должны быть поняты, и дело тщательно взвешивается перед реализацией любого поведения, описанного с этой меткой.
"MAY" и "OPTIONAL" означает, что элемент действительно необязателен.
1.3 Терминология, аббревиатуры и акронимы
Терминология 1.3.1
Срок | Описание |
---|---|
Набор адаптации | В DASH набор взаимозаменяемых версий одного или нескольких компонентов содержимого мультимедиа. |
Защита содержимого (CP) | Процесс защиты защищенного ресурса после его доставки на клиентское устройство. |
Внедренная лицензия | Лицензия, хранящуюся в объекте PlayReady (PRO). |
Внедренное хранилище лицензий (ELS) | Запись в объекте PlayReady (PRO) для хранения внедренных лицензий. |
Глобальный уникальный идентификатор (GUID) | Уникальный номер ссылки, представленный как дефис, разделенный шестнадцатеричной шестнадцатеричной строкой, и обычно хранится в виде 128-разрядного целого числа. |
Сегмент инициализации | Сегмент DASH, содержащий метаданные, необходимые для представления потоков мультимедиа, инкапсулированных в сегментах мультимедиа; в случае ISO-носителя заголовок файла. |
Идентификатор ключа (KID) | UUID, который однозначно идентифицирует ключ, защищающий содержимое, лицензии или другую конфиденциальную информацию; в случае PlayReady, хранящийся в виде GUID. |
Смена клавиш | Периодические изменения ключа шифрования, связанного с носителем. Обычно это означает |
Конечная лицензия | Лицензия, ключ содержимого которой шифруется с помощью ключа содержимого в корневой лицензии. |
Лицензия | Структура данных PlayReady, содержащая политики и зашифрованный ключ содержимого. |
URL-адрес приобретения лицензий (LAURL) | URL-адрес веб-службы приобретения лицензий PlayReady. |
Цепочка лицензий | Цепочка лицензий состоит из корневой лицензии и конечной лицензии. У конечной лицензии может быть несколько корневых лицензий, а у корневой лицензии может быть несколько конечных лицензий. Для каждой пары существует цепочка лицензий. |
Динамический профиль | Профиль динамического формата файла мультимедиа iso base (см. раздел 8.4 [DASH]). Динамический профиль оптимизирован для кодирования в реальном времени, где каждый сегмент фильма может запрашиваться сразу после его кодирования с помощью созданного шаблона URL-адреса. |
Презентация мультимедиа | Коллекция метаданных и данных мультимедиа, которые можно скачать и отобразить в виде презентации мультимедиа, как определено в ISO/IEC 23009-1. |
Описание презентации мультимедиа (MPD) | Официальное описание XML-документа о презентации мультимедиа, определенной в ISO/IEC 23009-1. |
Сегмент мультимедиа | Сегмент DASH, соответствующий формату мультимедиа и обеспечивающий воспроизведение, возможно, в сочетании с другими сегментами мультимедиа и (или) сегментом инициализации. |
Окно фильма ('moov') | В формате файла базового носителя ISO поле, вложенное поле которого определяет метаданные для презентации мультимедиа [ISOBFF]. |
Поле фрагмента фильма (moof) | В формате файла базового носителя ISO поле фрагмента фильма расширяет представление мультимедиа во времени [ISOBFF], и содержится в сегменте мультимедиа DASH. |
Профиль по запросу | Формат файла базового носителя ISO по запросу (см. раздел 8.3 [DASH]). Профиль по запросу обеспечивает базовую поддержку содержимого по запросу. Каждое представление предоставляется в виде одного сегмента, подсегменты выравниваются по представлениям набора адаптации, а подсегменты начинаются с точки доступа к потоку, соответствующей сегменту фильма. |
Период | Интервал презентации мультимедиа. |
Объект PlayReady (PRO) | Двоичный объект, содержащий переменное количество записей, включая при необходимости записи PRH и ELS. Эти записи содержат сведения, связанные с лицензиями и приобретением лицензий (см. [PRO]). |
Поле заголовка для конкретной системы защиты (pssh) | В формате файла базового носителя ISO поле "Конкретный заголовок системы защиты" содержит метаданные, необходимые определенной системе защиты содержимого для получения лицензии и расшифровки содержимого мультимедиа [ISOBFF]. |
Представление | Один из альтернативных вариантов компонента содержимого мультимедиа в течение определенного периода, например ISO-файл мультимедиа. Он описывается элементом MPD Representation ([DASH], раздел 5.3.5. |
Заголовок PlayReady (PRH) | Запись в объекте PlayReady (PRO), содержащая метаданные, необходимые для расшифровки содержимого мультимедиа, включая один или несколько идентификаторов ключей и URL-адреса приобретения лицензий (см. [PRH]). |
Корневая лицензия | Лицензия, ключ содержимого которой используется для шифрования ключа содержимого в конечной лицензии |
Сегмент | В DASH элемент в MPD, который ссылается на ресурс мультимедиа с HTTP-URL и необязательным диапазоном байтов. |
Индекс сегмента | Диапазон времени до сопоставления индексов диапазона байтов в сегменте мультимедиа отдельно от MPD, определенный как поле "sidx" мультимедиа ISO. |
Точка доступа потока (SAP) | Позиция в представлении, которая позволяет воспроизводить сегмент мультимедиа, используя только данные представления из этой позиции вперед. |
Подсегмент | В DASH это единица в сегменте мультимедиа, индексированная индексом сегмента сегмента. Сегмент фильма рассматривается как подсегмент в профиле DASH по запросу, но сегмент в динамическом профиле DASH. |
Поле "Отслеживание шифрования" | В формате файла базового носителя ISO поле "Отслеживание шифрования" ("tenc") описывает параметры шифрования по умолчанию для трека [CENC], [ISOBFF]. |
UUID | Математически уникальный идентификатор, представленный как число или строка, указанные в [X.667] |
Видео по запросу (VOD) | Система, позволяющая конечным пользователям выбирать и просматривать видео по запросу. Для презентации VOD можно использовать как динамический профиль DASH, так и профиль DASH по запросу. |
1.3.2 Аббревиатуры и акронимы
Аббр. | Значение |
---|---|
CP | Защита содержимого |
ТИРЕ | Динамическая адаптивная потоковая передача по протоколу HTTP |
ELS | Внедренное хранилище лицензий |
GUID | Глобальный уникальный идентификатор |
КОЗЛЁНОК | Идентификатор ключа |
LAURL | URL-адрес приобретения лицензий |
MPD | Описание презентации мультимедиа |
PRH | Заголовок PlayReady |
ПРОФЕССИОНАЛ | Объект PlayReady |
СОК | Точка доступа потока |
UUID | Универсальный уникальный идентификатор |
VOD | Видео по запросу |
1.4 Ссылки
1.4.1 Нормативные ссылки
Код | Справочник по нормативным актам |
---|---|
[CENC] | ISO/IEC ПИИС 23001-7:2016 "Информационные технологии — технологии MPEG systems — часть 7. Общее шифрование в файлах формата файлов мультимедиа ISO", https://www.iso.org/standard/68042.html |
[DASH] | ISO/IEC 23009-1:2014, Второй выпуск, "Информационная технология — динамическая адаптивная потоковая передача по протоколу HTTP (DASH) — часть 1. Описание презентации мультимедиа и форматы сегментов", http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip |
[EME] | "Зашифрованные расширения мультимедиа", рекомендация W3C 18 сентября 2017 г.https://www.w3.org/TR/encrypted-media/ |
[PRH] | "Microsoft PlayReady Header, см. спецификации заголовка PlayReady |
[PRO] | "Объект Microsoft PlayReady, см. спецификации заголовка PlayReady |
[RFC2119] | "Ключевые слова для использования в RFCs для указания уровней требований", S. Брэднер, март 1997 года, http://www.ietf.org/rfc/rfc2119 |
[RFC3629] | "UTF-8, формат преобразования ISO 10646", F. Yergeau, ноябрь 2003 года, http://tools.ietf.org/html/rfc3629 |
[RFC4122] | "Универсально уникальное пространство имен IDentifier (UUID), P. Leach, M. Mealling, R. Salz, июль 2005 года,http://www.ietf.org/rfc/rfc4122.txt |
[X.667] | "Информационная технология — взаимодействие с открытыми системами — процедуры для работы центров регистрации OSI: создание и регистрация универсальных уникальных идентификаторов (UUID) и их использование в качестве компонентов идентификаторов объектов ASN.1" серии X ITU-T рекомендацияhttp://www.itu.int/rec/T-REC-X.667-201210-I/en |
Информационные ссылки 1.4.2
Код | Информационный справочник |
---|---|
[CPSID] | Форуме по отрасли DASH, "Идентификаторы, относящиеся к системе",http://dashif.org/identifiers/content_protection/ |
[DASHIF] | Форум по отрасли DASH, "Рекомендации по реализации: точки взаимодействия DASH-IF", 07 сентября 2017 г., версия 4.1,https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf |
[ISOBFF] | ISO/IEC 14496-12, Четвертый выпуск (исправленная версия 2012-09-15), "Информационная технология — кодирование звуковых визуальных объектов — часть 12: формат файла базового носителя ISO",http://standards.iso.org/ittf/PubliclyAvailableStandards/c061988_ISO_IEC_14496-12_2012.zip |
1.5 Журнал изменений
Версия | Дата | Подробности |
---|---|---|
Версия 1.3 | 15 февраля 2018 г. | Уточните поддержку 16-байтовых векторов инициализации (16-байтовых IV). |
Версия 1.2 | 8 октября 2014 г. | 1) Изменения для выпуска CENC 2nd 2) Изменения, связанные с элементами дескриптора ДЭШ MPD ContentProtection 3) Изменения в терминологии для добавления и уточнения терминов 4) Изменения в нормативных и информативных ссылках на последние версии 5) Уточняйте представление и эндианность В полях ISOBFF, PRO и PlayReady. |
Версия 1.1 | 18 февраля 2013 г. | Уточнение представления PlayReady SystemID. PlayReady SystemID — 9a04f079-9840-4286-ab92-e65be0885f95. Представление big endian = {0x9A, 0x04, 0xF0, 0x79, 0x98, 0x40, 0x42, 0x86, 0xAB, 0x92, 0xE6, 0x5B, 0xE0, 0x88, 0x5F, 0x95}. Малое представление = {0x79, 0xF0, 0x04, 0x9A, 0x40, 0x98, 0x86, 0x42, 0xAB, 0x92, 0xE6, 0x5B, 0xE0, 0x88, 0x5F, 0x95}. |
Версия 1.0 | 17 июля 2012 г. | Начальная версия |
2. Схема защиты содержимого PlayReady DASH
Microsoft PlayReady поддерживает новые стандарты ISO/IEC 23009-1 [DASH] и ISO/IEC 23001-7 [CENC] стандарты. В этой спецификации подробно описано, как создать файл описания презентации мультимедиа DASH, который сигнализирует об использовании Microsoft PlayReady для представлений мультимедиа базового формата мультимедиа ISO ([DASH], раздела 8.3) и Live ([DASH], раздела 8.4) адаптивной потоковой передачи.
Четыре сценария, которые являются основной частью этой спецификации, являются VOD или динамические презентации мультимедиа:
зашифровано с одним ключом
где содержимое зашифровано, и некоторые содержимое находится в ясном месте
с поворотом ключей без внедренных конечных лицензий
с поворотом ключей с внедренными конечными лицензиями
2.1 Элементы дескриптора DASH ContentProtection
DASH определяет два типа элементов дескриптора ContentProtection для мультимедиа ISO ([DASH] разделов 5.3.7.2-Table 9, 5.8.5.2 и 5.8.4.1):
- С
@schemeIdUri=”urn:mpeg:dash:mp4protection:2011” @value=”<scheme>”
- С
@schemeIdUri=”urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx” @value=”DRMNAME version”
Первый тип дескриптора указывает на четыре символьного кода ("4CC") схемы шифрования, содержащейся в поле сведений о схеме защиты (schi') в каждом зашифрованном треке мультимедиа ISO. Этот тип дескриптора всегда должен присутствовать, чтобы игроки знали, что содержимое зашифровано, и может определить, можно ли расшифровать схему шифрования перед попыткой скачивания и воспроизведения.
Второй тип дескриптора указывает строку UUID для конкретной системы DRM, которая может предоставить лицензию и ключ расшифровки для связанного набора адаптации. Спецификации приложений, такие как DASH Industry Forum, DVB и DECE, ограничивают все представления в наборе адаптации для совместного использования одних и тех же ключей и лицензий, чтобы обеспечить простое адаптивное переключение, которое достигается путем ограничения дескрипторов ContentProtection с уровня представления MPD. Строка UUID равна полю SystemID, указанному в поле сведений о конкретной системе защиты мультимедиа ISO (pssh), которое может присутствовать в поле "Фильм" ("moov") файла или сегмента инициализации DASH.
примечание Поле pssh включает SystemID, UUID [X.667], который однозначно определяет систему защиты содержимого. PlayReady SystemID — 9a04f079-9840-4286-ab92-e65be0885f95.
Значения SystemID для систем DRM регистрируются по адресу: https://dashif.org/identifiers/content_protection/
Каждый элемент AdaptationSet МОЖЕТ перечислить несколько дескрипторов DRM, чтобы указать, что лицензии доступны для нескольких систем DRM. Каждая система DRM может указывать элементы и атрибуты в собственном пространстве имен и делать их необязательными или обязательными в дескрипторах с помощью SystemID.
Второй выпуск Common Encryption ([CENC] раздел 11) указывает необязательный элемент cenc:pssh, который можно использовать всеми дескрипторами DrM ContentProtection для улучшения взаимодействия. Он также указывает атрибут cenc:default_KID, рекомендуемый для включения в дескриптор mp4protection, чтобы определить лицензию, необходимую для всех систем. Элемент cenc:pssh содержит полную структуру поля pssh, поэтому обрабатывается одинаково API зашифрованного расширения мультимедиа (EME) в веб-браузерах [EME].
Системы DRM могут предоставлять сведения о приобретении лицензий в:
- Элемент cenc:pssh в дескрипторе ContentProtection в MPD
- Поле pssh в поле "moov" файла или сегмента инициализации
- Оба приведенных выше элемента (в этом случае элемент cenc:pssh имеет приоритет)
В зависимости от рабочего процесса может оказаться более эффективным внедрение сведений о приобретении лицензий в поле pssh в каждом файле в наборе адаптации во время кодирования или упаковки; или может оказаться более эффективным внедрение элемента cenc:pssh в MPD во время предложения потоковой презентации. Для динамической потоковой передачи лучше использовать cenc:pssh в MPD, чтобы включить раннее приобретение лицензий, а не активировать множество одновременных запросов лицензий в то время, когда первый сегмент инициализации и pssh одновременно поставляется в возможно миллионы зрителей. Сведения о приобретении лицензий в MPD позволяют различным службам потоковой передачи использовать разные серверы лицензий, изменять их с течением времени и т. д. без создания отдельных файлов мультимедиа и управления ими.
В случае PlayReady объект PlayReady (PRO) [PRO] может содержаться в элементе cenc:pssh, элементе mspr:pro или поле pssh для включения приобретения лицензий. Элемент mspr:pro определяется Microsoft PlayReady и включает только сведения PRO [PRO], а не структуру поля, включенную в pssh и cenc:pssh. Включая mspr:pro и cenc:pssh, позволит старым игрокам, включая проигрывателя на основе Silverlight, и новых игроков, включая веб-страницы, используя скрипт для воспроизведения защищенных презентаций DASH в браузерах HTML5.
Примечание По всей этой спецификации mspr имеет значение urn:microsoft:playready, определенное xmlns:mspr="urn:microsoft:playready".
2.1.1 Правильный PRO в сегменте инициализации или содержимом мультимедиа
Если есть сегмент инициализации, содержащий правильный PRO, или если содержимое мультимедиа содержит поле PlayReady "pssh" с правильным PRO, то следующий элемент ContentProtection Descriptor с идентификатором системы защиты содержимого PlayReady [CPSID] должен использоваться в элементе AdaptationSet в MPD, чтобы указать доступность лицензии PlayReady:
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”/>
PlayReady поддерживает стандарт Common Encryption [CENC]. Если метаданные приобретения лицензии хранятся в сегменте инициализации или содержимом мультимедиа pssh, элемент Descriptor PlayReady ContentProtection ДОЛЖЕН присутствовать.
Следующий элемент Descriptor ContentProtection ДОЛЖЕН присутствовать в каждом защищенном наборе адаптации, а один экземпляр указывает схему шифрования для всех DRM, поддерживающих схему cenc.
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc"/>
2.1.2, включая объект PlayReady в MPD
Существует несколько ситуаций, когда объект PlayReady [PRO] может потребоваться включить в элемент Descriptor PlayReady ContentProtection. Например:
Презентация, в которой отсутствует поле PlayReady "pssh"
Презентация, в которой pro найден в поле PlayReady "pssh", необходимо переопределить
Чтобы определить PlayReady как схему защиты содержимого и включить pro в элемент ContentProtection Descriptor, рекомендуется использовать синтаксис cenc:pssh в соответствии с [CENC] и синтаксис mspr:pro для обратной совместимости следующим образом:
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
<cenc:pssh>
<!-- *base64-encoded PlayReady ‘pssh’ complete box* -->
</cenc:pssh>
<mspr:pro>
<!-- *base64-encoded PlayReady Object* -->
</mspr:pro>
</ContentProtection>
Следующее правило должно следовать при включении поля PlayReady "pssh" и PRO в элементе PlayReady ContentProtection Descriptor:
Если cenc:pssh или mspr:pro включен в элемент Descriptor PlayReady ContentProtection:
Если pro включен в поле заголовка для конкретной системы защиты (pssh) в содержимом мультимедиа содержимого, то строковое значение в кодировке KID base64 (значение тега KID [PRO]) в pro, которое входит в оба параметра cenc:pssh или mspr:pro, должно быть эквивалентно значению строки в кодировке KID base64 в этом pro, который включен в поле pssh.
Если существует сегмент инициализации для представления, содержащего pssh, то строковое значение в кодировке KID base64 в PRO, которое входит в оба cenc:pssh или mspr:pro для этого представления, должно быть эквивалентно значению строки в кодировке KID base64 в этом pro, который входит в поле pssh сегмента инициализации. Обратите внимание, что сегмент инициализации может быть копией заголовка файла содержимого хранимого носителя, содержащегося в тексте ОТВЕТА HTTP, но он также может быть динамически создан и никогда не сохранен в виде файла.
Если содержимое мультимедиа содержит поле PlayReady "pssh" с pro, содержащим LAURL, и что LAURL отличается от LAURL в элементе ContentProtection Descriptor, элемент ContentProtection Descriptor должен иметь приоритет.
2.1.3, включая поля поля "Отслеживание шифрования" в MPD
Общее шифрование указывает ключ, используемый для шифрования каждого примера носителя (или не используется) с идентификаторами ключей (KID) в каждом сегменте фильма. Некоторые сведения, такие как default_KID в поле отслеживания шифрования ('tenc') полезно сигнализировать в MPD, чтобы определить, какая лицензия требуется.
Могут быть периоды презентации мультимедиа, за которыми незашифровываются периоды, за которыми шифруются периоды. Файлы мультимедиа и потоки могут включать как зашифрованные, так и незашифрованные разделы. Кроме того, идентификатор ключа (KID) может меняться с периода на период или с раздела на раздел. Ключевые изменения в разделах трека сигнализируются с помощью примеров группы ISO Media и полей описания группы примеров в каждом сегменте фильма. Дополнительные сведения о примерах групп и доступе к диапазонам шифрования initialization Vectors и subsample с помощью полей saio и saiz см. в [CENC], указывающих на примеры вспомогательных сведений.
Параметры по умолчанию для общих сведений о шифровании кодируются в поле шифрования трека ('tenc') (см. [ISOBFF] и [CENC]) хранится в поле отслеживания (trak') в заголовке ISO-файла и сегменте инициализации. Идентификатор ключа по умолчанию (KID) в поле "Отслеживание шифрования" (default_KID поле) также должен быть передан в элементе ContentProtection Descriptor, связанном с набором адаптации презентации мультимедиа. Cenc:default_KID может использоваться для идентификации лицензии, которая может расшифровывать сегменты мультимедиа, на которые ссылается родительский элемент AdaptationSet.
Чтобы включить идентификатор ключа по умолчанию (KID) в элемент Descriptor Common Encryption ContentProtection, используйте следующий атрибут cenc:default_KID, указанный в [CENC]:
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="da9b5994-600c-2ad0-f96d-f12725780978"/>
Поле default_KID в "tenc" представляет собой большой массив 16 байтов и определяется выше для хранения в атрибуте cenc:default_KID в элементе Common Encryption ContentProtection Descriptor в виде строки UUID.
Если элемент Дескриптора ContentProtection ссылается на несколько треков, и они используют разные идентификаторы ключей по умолчанию в разных полях "tenc", атрибут cenc:default_KID ДОЛЖЕН хранить разделенный пробелом список разных значений default_KID.
Атрибут cenc:default_KID МОЖЕТ также содержаться в элементе Descriptor PlayReady ContentProtection.
В таблице 1 ниже перечислены поля, указанные в поле шифрования отслеживания мультимедиа ISO ('tenc') (см. раздел 9.2, [CENC]). Элементы ниже таблицы 1, где определено в пространстве имен mspr для первого выпуска Common Encryption (mspr:IsEncrypted, mspr:IV_size и mspr:kid), но устарели и функционально заменяются cenc:default_KID, указанными во втором выпуске Common Encryption [CENC]. Поля IV_size и IsEncrypted в поле шифрования отслеживания ('tenc') используются во время расшифровки, но не требуются в элементах дескриптора MPD ContentProtection.
примечание значение KID в mspr:kid — это малозакодированное маленьким эндианским идентификатором GUID для default_KID массива байтов, определенного для хранения большого UUID. Все поля из поля "Отслеживание шифрования" могут быть скопированы в MPD, но для получения лицензии необходимо только default_KID.
Таблица 1. Отслеживание полей поля шифрования
элемент | по умолчанию | описание |
---|---|---|
default_IsEncrypted | 1 | Флаг, указывающий состояние шифрования примеров в группе выборок. Допустимые значения: 0 (не зашифровано) и 1 (зашифровано). |
default_IV_size | 8 | Размер в байтах поля "Вектор инициализации" (IV). — PlayReady версии 1, 2, 3 поддерживают 0 и 8. — PlayReady версии 4 и более поздней поддержки 0, 8 и 16. Если default_IsEncrypted =1, default_IV_size не должно иметь значение 0. Так как не все игроки с поддержкой PlayReady поддерживают 16 векторов инициализации байтов, рекомендуется использовать только default_IV_size из 8 для зашифрованного содержимого, если служба должна достичь playReady версии 1/2/3. |
default_KID | Нет | 16-байтовый (128-разрядный) идентификатор ключа, который однозначно идентифицирует ключ, необходимый для расшифровки связанных примеров. Идентификатор ключа обрабатывается как UUID в соответствии с [CENC] Обратите внимание, что в отличие от KID в заголовке PlayReady [PRH], "tenc" default_KID хранится в виде массива 16 байтов, содержащего упорядоченный большой байт байтов, 128-разрядное целое число, эквивалентное двоичному значению (раздел 6.2) и числом (раздел 6.3) представления UUID, указанным в [X.667]. |
Примечание. формат default_KID в поле "Отслеживание шифрования" отличается от формата значения KID, внедренного в PRO в cenc:pssh, mspr:pro и mspr:kid. Дополнительные сведения см. в разделе 2.2.5, [CENC], а также [PRO].
Чтобы определить PlayReady как схему защиты содержимого и включить поля "Отслеживание шифрования" в MPD, используйте следующий синтаксис:
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
<mspr:IsEncrypted>1</mspr:IsEncrypted>
<mspr:IV_size>8</mspr:IV_size>
<mspr:kid>2ptZlGAMKtD5bfEnJXgJeA==</mspr:kid>
</ContentProtection>
Следующие правила должны соблюдаться при включении атрибута cenc:default_KID в элементе Descriptor Common Encryption ContentProtection и поля Track Encryption Box в элементе PlayReady ContentProtection Descriptor:
Строка KID в атрибуте cenc:default_KID в элементе Common Encryption ContentProtection Descriptor ДОЛЖЕН быть эквивалентен default_KID UUID в поле "Шифрование отслеживания" для этой дорожки.
Значение mspr:IsEncrypted, mspr:IV_size и/или mspr:kid в элементе Дескриптора PlayReady ContentProtection должно быть эквивалентно полям default_IsEncrypted, default_IV_size или default_KID поля в поле шифрования отслеживания для этого трека.
Если mspr:pro и cenc:pssh включены в элемент Descriptor PlayReady ContentProtection (см. раздел 2.1.2) с полями Track Encryption Box:
КИД, внедренный в pro в mspr:pro и cenc:pssh-элементы, должны быть эквивалентны default_KID в поле шифрования трека.
КИД в атрибуте cenc:default_KID в элементе Common Encryption ContentProtection Descriptor и mspr:kid в элементе PlayReady ContentProtection Descriptor, эквивалентно default_KID в поле шифрования отслеживания этого трека.
примечание Обратите внимание, что default_KID в поле шифрования отслеживания интерпретируется как двоичный или числовый UUID, хранящийся в виде массива 16 байтов больших байтов, в виде дефисированной строки UUID в cenc:default_KID, а также в виде строки base64, закодированной из представления GUID байтов байтов в PRO и mspr:kid; но все они должны быть альтернативными представлениями одного и того же UUID. См. раздел 2.2.5.
2.2 Рекомендации по реализации и требования
Объект PlayReady (PRO) [PRO] МОЖЕТ быть включен в поле закодированного заголовка системы защиты мультимедиа ("pssh") [ISOBFF], сегмент инициализации или закодированный в самом MPD.
Поле "pssh" может быть вставлено в поле "Фильм" ("moov") или в поле фрагмента фильма (moof). Например, поле pssh можно вставить в поле "moov", чтобы включить использование сегментов инициализации ([DASH], раздел 5.3.9.5.2. Поле pssh может быть вставлено в каждое поле moof для передачи конечных лицензий, индексированных KID для смены ключей.
Примеры группы и вспомогательные сведения должны храниться в любом сегменте фильма, который ссылается на него. Поле описания группы примеров ('pp') должно присутствовать в каждом поле "moof", когда присутствует поле "Пример для группирования" (sbgp). Пример вспомогательной информации Смещение ('saio') и пример вспомогательного размера информации ('saiz') должен присутствовать в каждом сегменте фильма каждого трека, содержащего поле шифрования трека ('tenc'), с допустимыми указателями на пример вспомогательных сведений.
2.2.1 Общие
Элемент Дескриптора PlayReady ContentProtection может быть связан с наборами адаптации или их представлениями, но для простого адаптивного переключения и соответствия спецификациям приложения DASH элемент PlayReady ContentProtection Descriptor должен содержаться в элементе AdaptiveSet, а не в элементах Представления. Это проверяет, что для всех сегментов в наборе адаптации можно использовать одну лицензию и конфигурацию расшифровки.
Рекомендуется включить дескриптор PlayReady ContentProtection и обязательно включить дескриптор CONTENTProtection DASH MP4 со значением cenc в MPD.
Это позволяет drms, которые имеют возможность "cenc" и имеют сведения о приобретении лицензий в приложении, или в MPD, или в "pssh" в сегменте инициализации, чтобы определить, что содержимое является Common Encrypted, определить необходимую лицензию (с помощью default_KID), получить лицензию и расшифровать носитель.
Рекомендуется включить атрибут @value с именем и версией MSPR 2.0 в дополнение к UUID в Дескриптор PlayReady ContentProtection для распознавания человека. Например:
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="da9b5994-600c-2ad0-f96d-f12725780978"/>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”/>
2.2.2 Приоритет расположения PRO
Когда клиентское приложение находит PRO в MPD, оно должно иметь приоритет над pro, содержащимся в сегменте инициализации (см. дополнительные требования к сегменту инициализации PRO в версии 2.2.3).
Когда клиентское приложение находит PRO в MPD, заголовок Rights Management, содержащийся в том, что PRO должен иметь приоритет над заголовком Rights Management в PRO, содержавшемся в поле pssh в поле "moov" содержимого мультимедиа.
Когда клиентское приложение находит pro в сегменте инициализации, оно должно иметь приоритет над pro, содержащимся в поле pssh в заголовке поля "moov" содержимого мультимедиа (см. дополнительные требования сегмента инициализации PRO в версии 2.2.3).
2.2.3 Где включить PRO
Pro должен присутствовать в сегменте MPD или инициализации. Это МОЖЕТ присутствовать в обоих. В MPD он ДОЛЖЕН присутствовать как в элементе mspr:pro, так и в элементе cenc:pssh в дескрипторе Защиты содержимого PlayReady (mspr:pro для устаревших игроков).
Pro в сегменте инициализации или MPD МОЖЕТ включать заголовок Rights Management.
Независимо от того, используется ли сегмент инициализации, рекомендуется включить правильный PRO, чтобы данные заголовка Rights Management можно было получить без скачивания сегмента инициализации.
2.2.4 Что включить в MPD PRO
Pro может включать заголовок Rights Management и (или) внедренное хранилище лицензий (ELS).
Рекомендуется, чтобы MPD PRO включал заголовок Rights Management.
Не рекомендуется включать ELS, если он не требуется в рамках домена DRM или схемы цепочки лицензий.
2.2.5 KID Byte Order
Идентификаторы ключей (KID) в PlayReady хранятся в массиве байтов, отформатированном в виде GUID (DWORD, WORD, WORD, 8-BYTE массива), в малом порядке байтов, который затем кодировка Base64 для хранения в виде строки в PRO. Оба сервера лицензий PlayReady и клиенты PlayReady в экосистеме PlayReady ожидают, что KID в лицензии PRO и PlayReady — это небольшое представление порядка байтов [GUID].
Эквивалентный KID можно представить как строку UUID ([X.667] section 6.4) или массив байтов, содержащий UUID в двоичном двоичном коде байтового байтового кода (раздел 6.2) или число (раздел 6.3), как указано в [X.667]. Общее шифрование [CENC] и DASH используют эти представления в атрибуте cenc:default_KID (строка 6.4), поле шифрования отслеживания ("tenc") и "seig" Sample Group Description Box (sgpd') (6.2 binary or 6.3 number byte array).
В результате, если не существует изменения, клиент должен преобразовать конечную часть массива байтов KIDs, чтобы сопоставить его с лицензией PlayReady.
Чтобы преобразовать идентификаторы KID в атрибут cenc:default_KID и [ISOBFF] в PlayReady KID, используйте следующий пример кода:
// Create a PlayReady GUID from the KID value in ISOBFF box.
// Since the PlayReady Server always runs on an Intel processor,
// this will be a little endian representation.
// e.g. KID in Track Encryption Box is:
// {f81d4fae-7dec-11d0-a765-00a0c91e6bf6}
byte[] tencKidBytes = new byte[] {
0xf8, 0x1d, 0x4f, 0xae,
0x7d, 0xec,
0x11, 0xd0,
0xa7, 0x65,
0x00, 0xa0, 0xc9, 0x1e, 0x6b, 0xf6
};
Byte[] prKidBytes = new byte[16];
// Swap the endianness of the GUID value:
// - Reverse bytes 0 to 3,
// - swap bytes 4 and 5,
// - swap bytes 6 and 7, and
// - copy bytes 8-15 as-is without swapping
ConvertEndianness(tencKidBytes, prKidBytes);
Guid prKid = new Guid(prKidBytes);
void ConvertEndianness(byte[] original, byte[] guidBytes)
{
System.Array.Copy(original, guidBytes, 16);
Swap(ref guidBytes, 0, 3);
Swap(ref guidBytes, 1, 2);
Swap(ref guidBytes, 4, 5);
Swap(ref guidBytes, 6, 7);
}
void Swap(ref byte[] bytes, int pos1, int pos2)
{
byte temp = bytes[pos1];
bytes[pos1] = bytes[pos2];
bytes[pos2] = temp;
}
таблице 2 — пример представления KID
параметра |
типа |
представление |
---|---|---|
KID | Шестнадцатеричное число UUID BE | f81d4fae7dec1d0a76500a0c91e6bf6 Раздел 6.3 [X.667] |
атрибут cenc:default_KID | Шестнадцатеричная строка UUID с дефисами | "f81d4fae-7dec-11d0-a765-00a0c91e6bf6" Раздел 6.4 [X.667] |
KID в полях ISOBFF | Массив байтов UUID BE | Шестнадцатеричное представление : { 0xf8, 0x1d, 0x4f, 0xae, 0x7d, 0xec, 0x11, 0xd0, 0xa7, 0x65, 0x00, 0xa0, 0xc9, 0x1e, 0x6b, 0xf6 } Раздел 6.2 [X.667] |
KID в PRO | Строка Base64 массива GUID LE Byte | "rk8d+Ox90BGnZQCgyR5r9g=" (Шестнадцатеричное представление данных до кодировки Base64 — { 0xae, 0x4f, 0x1d, 0xf8, 0xec, 0x7d, 0xd0, 0x11, 0xa7, 0x65, 0x00, 0xa0, 0xc9, 0x1e, 0x6b, 0xf6 }) |
mspr:kid | Строка Base64 default_KID массива байтов в поле "tenc" | "+B1Prn3sEdCnZQCgyR5r9g=" (Шестнадцатеричное представление данных до кодировки Base64 — { 0xf8, 0x1d, 0x4f, 0xae, 0x7d, 0xec, 0x11, 0xd0 0xa7, 0xd0, 0x65, 0x00, 0xa0, 0xc9, 0x1e, 0x6b, 0xf6 }) |
KID в лицензии PlayReady | Массив байтов GUID LE | Шестнадцатеричное представление : { 0xae, 0x4f, 0x1d, 0xf8, 0xec, 0x7d, 0xd0, 0x11, 0xa7, 0x65, 0x00, 0xa0, 0xc9, 0x1e, 0x6b, 0xf6 } |
3. Пример описания презентации мультимедиа
3.1 Правильный PRO в сегменте инициализации или содержимом мультимедиа
См. раздел 2.1.1 выше.
<?xml version="1.0" encoding="utf-8"?>
<MPD
xmlns="urn:mpeg:DASH:schema:MPD:2011"
xmlns:cenc="urn:mpeg:cenc:2013"
minBufferTime="PT2.00S"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
type="static">
<Period>
<AdaptationSet mimeType="audio/mp4">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="0b630844-cb17-496a-9700-3702e1d23ee2"/>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
</ContentProtection>
<Representation bandwidth="134878" id="audio">
<SegmentList duration="4000" timescale="1000">
<Initialization sourceURL="audio/init.mp4"/>
<SegmentURL media="audio/seg-0000.m4f"/>
<SegmentURL media="audio/seg-0001.m4f"/>
<SegmentURL media="audio/seg-0002.m4f"/>
</SegmentList>
</Representation>
</AdaptationSet>
</Period>
</MPD>
3.2 Включение объекта PlayReady (PRO) в MPD
См. раздел 2.1.2 выше.
<?xml version="1.0" encoding="utf-8"?>
<MPD
xmlns="urn:mpeg:DASH:schema:MPD:2011"
xmlns:cenc="urn:mpeg:cenc:2013"
xmlns:mspr="urn:microsoft:playready"
minBufferTime="PT4.00S"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
type="static">
<Period>
<AdaptationSet mimeType="audio/mp4">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="0b630844-cb17-496a-9700-3702e1d23ee2"/>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
<cenc:pssh>AAAAAJoE8HmYQEKGq5LmW+CIX5UAAALq6gIAAAEAAQDgAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AUgBBAGgAagBDAHgAZgBMAGEAawBtAFgAQQBEAGMAQwA0AGQASQArADQAZwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBxAGgASwBXAEgASgBhAEwAMAAxAEkAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALgBkAHkAbgBkAG4AcwAuAG8AcgBnAC8AYwBvAG4AdABvAHMAbwBzAHMAcAByAC8AcgBpAGcAaAB0AHMAbQBhAG4AYQBnAGUAcgAuAGEAcwBtAHgAPAAvAEwAQQBfAFUAUgBMAD4APABEAFMAXwBJAEQAPgBpAEsARwBsAFcARwA0AEQAWABVAHEANAB3AGIAVwBnAFIATgBMAFIASgBnAD0APQA8AC8ARABTAF8ASQBEAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</cenc:pssh>
<mspr:pro>6gIAAAEAAQDgAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AUgBBAGgAagBDAHgAZgBMAGEAawBtAFgAQQBEAGMAQwA0AGQASQArADQAZwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBxAGgASwBXAEgASgBhAEwAMAAxAEkAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALgBkAHkAbgBkAG4AcwAuAG8AcgBnAC8AYwBvAG4AdABvAHMAbwBzAHMAcAByAC8AcgBpAGcAaAB0AHMAbQBhAG4AYQBnAGUAcgAuAGEAcwBtAHgAPAAvAEwAQQBfAFUAUgBMAD4APABEAFMAXwBJAEQAPgBpAEsARwBsAFcARwA0AEQAWABVAHEANAB3AGIAVwBnAFIATgBMAFIASgBnAD0APQA8AC8ARABTAF8ASQBEAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</mspr:pro>
</ContentProtection>
<Representation bandwidth="134878" id="audio">
<SegmentList duration="4000" timescale="1000">
<Initialization sourceURL="audio/init.mp4"/>
<SegmentURL media="audio/seg-0000.m4f"/>
<SegmentURL media="audio/seg-0001.m4f"/>
<SegmentURL media="audio/seg-0002.m4f"/>
</SegmentList>
</Representation>
</AdaptationSet>
</Period>
</MPD>