Поделиться через


Спецификация заголовка PlayReady

1. Введение

Эта спецификация применяется к любому конечному продукту, созданному с помощью пакета SDK для сервера PlayReady, комплекта переноса устройств PlayReady, Windows, Xbox, Windows Phone и Silverlight.

1.1. История изменений

Версия Изменить
8 сентября 2021 г. Добавьте необязательный атрибут LICENSEREQUESTED в узел PROTECTINFO.
1 ноября 2017 г. Добавьте раздел "Требования к синтаксису". Исправлены несколько примеров с неправильным порядком атрибутов (атрибуты должны находиться в алфавитном порядке).
12 июля 2017 г. Добавьте раздел PlayReady Header 4.3.0.0, поддерживаемый начиная с PlayReady версии 4.
Добавьте требование синтаксиса, которое должно быть явно закрыто закрывающим тегом для всех УЗЛОВ XML
10 апреля 2015 г. Добавление раздела PlayReady Header 4.2.0.0, поддерживаемого начиная с PlayReady версии 3
Сентябрь 2011 г. Добавление раздела PlayReady Header 4.1.0.0, поддерживаемого начиная с PlayReady версии 2
Август 2008 г. Исходная версия, документируя заголовок PlayReady 4.0.0.0, поддерживаемый в PlayReady версии 1

2. PlayReady Object (PRO)

Объект PlayReady (PRO) содержит следующие поля.

Имя поля Тип поля Размер (биты) Описание
Длина DWORD 32 Длина объекта PlayReady в байтах. Это значение не должно превышать 15 килобайт (КБ).
Число записей объектов PlayReady WORD 16 Указывает количество записей объектов PlayReady в объекте PlayReady.
Записи объектов PlayReady Массив BYTE Различается Содержит переменное число записей, содержащих сведения, связанные с лицензиями и приобретением лицензий.

2.1. Записи объектов PlayReady

Объект PlayReady состоит из дополнительных вложенных объектов, называемых записями объектов PlayReady. Записи объектов PlayReady содержат следующие поля.

Имя поля Тип поля Размер (биты) Описание
Тип записи WORD 16 Указывает тип данных, хранящихся в значении записи.
Длина записи WORD 16 Задает размер в байтах значения записи.
Значение записи Массив BYTE Различается Содержимое объекта зависит от значения типа записи.

Поле "Тип записи" имеет одно из следующих значений.

Тип значения Описание
0x0001 Указывает, что запись содержит заголовок PlayReady (PRH).
0x0002 Зарезервировано.
0x0003 Указывает внедренное хранилище лицензий (ELS).

2.2. Примеры объектов PlayReady

На следующем рисунке показан сегментованный MP4-файл с объектом PlayReady, содержащим заголовок PlayReady:

PlayReady Object in MP4

На следующем рисунке показано шестнадцатеричное представление этого MP4-файла:

PlayReady Object Hex Dump

3. Заголовок PlayReady (PRH)

Заголовок PlayReady (PRH) используется клиентом для поиска или получения лицензии на содержимое, в который он хранится. Кодируется с помощью UTF-16.

Матрица поддержки версий 3.1

  Заголовок PlayReady версии 4.3.0.0 Заголовок PlayReady версии 4.2.0.0 Заголовок PlayReady версии 4.1.0.0 Заголовок PlayReady версии 4.0.0.0
Клиенты
на основе пакета SDK для PlayReady 4.0 (см. примечание 1)
Клиенты
на основе пакета SDK для PlayReady 3.0 (см. примечание 2)
 
Клиенты
на основе пакета SDK для PlayReady 2.x (см. примечание 3)
   
Клиенты
на основе пакета SDK для PlayReady 1.x (см. примечание 4)
     

Примечания.

  1. Xbox One версии 1709 или более поздней — клиенты PlayReady 4.X.
  2. Windows 10 (все версии) и Xbox One версии 1703 или более поздней — клиенты PlayReady 3.X. Новейшие устройства, не являющиеся Windows (например, смарт-телевизоры), выпущенные после 2017 г., — это клиенты PlayReady 3.X.
  3. Silverlight и Windows 8, 8.1 — клиенты PlayReady 2.X. Большинство устройств, отличных от Windows (например, смарт-телевизоров), выпущенных в период с 2011 по 2017 год, являются клиентами PlayReady 2.X.
  4. Большинство устройств, отличных от Windows (например, смарт-телевизоров), выпущенных в период с 2008 по 2011 год, являются клиентами PlayReady 1.X.

3.2. Требования к синтаксису

3.2.1. Канонизировано

XML-код должен быть канонизирован.

3.2.2. Все имена узлов и атрибутов чувствительны к регистру

Поддерживается

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>

Не поддерживается

<KID value="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<kid VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </kid>

3.2.3. Закрывающие теги должны быть явными

Все УЗЛЫ XML должны быть явно закрыты закрывающим тегом, включая узлы внутри узла CUSTOMATTRIBUTES.

Поддерживается

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>

Не поддерживается

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> <CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </CUSTOMATTRIBUTES>

3.2.4. Атрибуты пространства имен

Все атрибуты пространства имен должны отображаться перед атрибутами, не являющихся пространствами имен.

Поддерживается

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">

Не поддерживается

<WRMHEADER version="4.3.0.0" xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader>

3.2.5. Алфавитный порядок

Все атрибуты должны быть в алфавитном порядке, в том числе в узлах в узле CUSTOMATTRIBUTES.

Поддерживается

<KID ALGID="AESCBC" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode BarAttribute="Bar" FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>

Не поддерживается

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg==" ALGID="AESCBC"> </KID>
<CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo" BarAttribute="Bar"> </MyNode> </CUSTOMATTRIBUTES>

3.3. v4.3.0.0

Заголовок PlayReady версии 4.3.0.0 появился в PlayReady версии 4.0 в сентябре 2017 года для поддержки ключей AESCBC в заголовке. Эта поддержка обеспечивает шифрование содержимого в режиме CBC, в частности для общих режимов шифрования cbcs. Это также повышает взаимодействие клиентов PlayReady с другими системами DRM, а также с существующим содержимым.

3.3.1. Различия с другими версиями

Начиная с версии 4.0, пакеты SDK и клиенты PlayReady могут обрабатывать версии 4.0, 4.1, 4.2 и 4.3. Пакеты SDK PlayReady до версии 4.0 возвращают ошибку "неподдерживаемая версия" при указании заголовков версии 4.3.

Формат заголовка PlayReady версии 4.3.0.0 имеет следующие изменения по сравнению с версией 4.2.0.0:

  • Атрибут версии элемента WRMHEADER имеет строку 4.3.0.0.
  • Атрибут ALGID , расположенный внутри элемента KID , может отсутствовать в запросе на получение лицензии. Корпорация Майкрософт рекомендует, чтобы атрибут ALGID содержал допустимое значение в заголовке, включенном в содержимое.
  • Если атрибут ALGID присутствует в любом элементе KID и имеется несколько элементов KID в элементе KIDS , все элементы KID должны включать атрибут ALGID , а значения атрибута должны совпадать.
  • Атрибут ALGID , расположенный внутри элемента KID, теперь может иметь значение AESCBC, в дополнение к AESCTR, при условии, что:
    • Если атрибут ALGID имеет значение AESCBC, атрибут CHECKSUM не должен быть включен.

3.3.2. Примеры

Ниже приведен пример заголовка PlayReady 4.3.0.0 с ключами AESCBC:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID ALGID="AESCBC" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="></KID>
        <KID ALGID="AESCBC" VALUE="tuhDoKUN7EyxDPtMRNmhyA=="></KID>
      </KIDS>
    </PROTECTINFO>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
  </DATA>
</WRMHEADER>

Ниже приведен пример заголовка PlayReady 4.3.0.0 с отсутствующим ALGID:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="></KID>
      </KIDS>
    </PROTECTINFO>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

3.3.3. Формат

Заголовок PlayReady версии 4.3.0.0 имеет следующий синтаксис:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
      <PROTECTINFO LICENSEREQUESTED="true">
        <KIDS>
          <KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
        </KIDS>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID> base64-encoded guid </DS_ID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

Теги описаны ниже.

Имя тега Обязательно Описание
WRMHEADER Да Самый внешний элемент объекта заголовка. Он может содержать один элемент DATA и должен содержать один атрибут версии. Версия заголовка — 4.3.0.0. Каждый раз, когда корпорация Майкрософт определяет новые обязательные теги или атрибуты, с этими тегами или атрибутами связывается новый номер версии. Если версия больше, чем версия, для которой был написан клиентский код, код клиента должен завершиться ошибкой, так как он подразумевает, что заголовок содержит обязательные теги, которые клиент не понимает. Если версия меньше или равна той, для которой был написан клиентский код, чем клиентский код, можно безопасно пропустить какие-либо теги или атрибуты, которые он не понимает.
DATA Нет Элемент контейнера для данных заголовка, включая сторонние теги. В элемент WRMHEADER может быть включено не более одного элемента DATA.
PROTECTINFO Нет Указывает ноль или один элемент KIDS . В элемент DATA может быть включен не более одного элемента PROTECTINFO. При необходимости включает атрибут LICENSEREQUESTED.
LICENSEREQUESTED Нет Указывает, запрашивает ли приобретение лицензии по крайней мере одну лицензию. Должно быть установлено значение true или false, если оно присутствует, и предполагается, что оно имеет значение true, если оно отсутствует. Этот атрибут игнорируется версиями PlayReady до версии 4.5. Приложение пакета SDK для сервера PlayReady может игнорировать этот атрибут; это только информационный параметр.
ДЕТЕЙ Нет Указывает один или несколько элементов KID , которые могут использоваться для создания объектов расшифровки для связанного содержимого. Под узлом PROTECTINFO может существовать один или ноль элементов KIDS.
РЕБЕНОК Нет Содержит все ключевые данные для данной лицензии. Если узел KIDS присутствует, под узлом KIDS должен существовать один или несколько элементов KID. Элемент KID содержит следующие атрибуты.

ALGID: необязательно. Указывает алгоритм шифрования. Может иметь значение "AESCTR", "AESCBC" или "COCKTAIL".

CHECKSUM: необязательно. Только для ключей AESCTR. Содержит контрольную сумму, вычисляемую с помощью атрибута KID VALUE и ключа содержимого. Дополнительные сведения см. в разделе "Алгоритм контрольной суммы ключей" этого документа.

Если этот узел существует в XML WRMHeader, его значение данных должно быть пустым.

ЗНАЧЕНИЕ: обязательный аргумент. Содержит значение GUID идентификатора ключа в кодировке Base64. Обратите внимание, что это значение GUID (DWORD, WORD, WORD, массив 8-BYTE) должно быть небольшим порядком байтов в конце.
LA_URL Нет Содержит URL-адрес веб-службы приобретения лицензии. Разрешены только абсолютные URL-адреса. В элемент DATA может быть включен не более одного элемента LA_URL.

Если этот узел существует в XML WRMHeader, его значение данных не должно быть пустым.
LUI_URL Нет Содержит URL-адрес веб-страницы приобретения лицензий без автоматического отображения. Разрешены только абсолютные URL-адреса. В элемент DATA может включаться не более одного LUI_URL элемента.

Если этот узел существует в XML WRMHeader, его значение данных не должно быть пустым.
DS_ID Нет Идентификатор службы для доменной службы. В элемент DATA может быть включен только один элемент DS_ID.

Если этот узел существует в XML WRMHeader, его значение данных не должно быть пустым.
CUSTOMATTRIBUTES Нет Автор содержимого может добавить настраиваемый XML-код внутри этого элемента. Код Майкрософт не выполняет никаких действий с данными, содержащимися в этом элементе. В элемент DATA может быть включен не более одного элемента CUSTOMATTRIBUTES.

Если этот узел существует в XML WRMHeader, его значение данных не должно быть пустым.
DECRYPTORSETUP Нет Этот тег может содержать только значение ONDEMAND. Если этот тег присутствует в узле DATA и его значение имеет значение ONDEMAND, оно указывает приложению, что он не должен ожидать, что полная цепочка лицензий для содержимого будет доступна для приобретения или уже присутствует на клиентском компьютере перед настройкой графа мультимедиа. Если этот тег не задан, он указывает, что приложение может принудительно применить лицензию для приобретения или уже присутствовать на клиентском компьютере перед настройкой графа мультимедиа. В элемент DATA может включаться не более одного элемента DECRYPTORSETUP.

3.4. v4.2.0.0

Заголовок PlayReady версии 4.2.0.0 появился в PlayReady версии 3.0 в апреле 2015 года, чтобы разрешить несколько ИДЕНТИФИКАТОРов в одном заголовке. Это означает, что для шифрования одного ресурса можно использовать несколько ключей, например, если звуковые дорожки должны быть зашифрованы с помощью другого ключа, отличного от видеодорожок.

3.4.1. Различия с другими версиями

Пакеты SDK playReady 3.0 и более поздние версии Клиенты могут обрабатывать версии 4.0, 4.1 и версии 4.2 PlayReady Headers. Предыдущие пакеты SDK PlayReady возвращают ошибку "неподдерживаемая версия" при предоставлении заголовков версии 4.2. При использовании заголовка версии 4.2 клиент должен знать, какую версию сервера она использует с помощью настраиваемого механизма для конкретного приложения. Пакеты SDK PlayReady не предоставляют собственный способ получения сведений об этой версии.

Формат заголовка PlayReady версии 4.2.0.0 имеет следующие изменения по сравнению с версией 4.1.0.0:

  • Атрибут версии элемента WRMHEADER имеет строку "4.2.0.0".
  • Элемент KID , расположенный внутри элемента PROTECTINFO , переименован в KIDS и по-прежнему является необязательным.
  • Несколько элементов KID находятся внутри элемента KIDS .

3.4.2. Пример

Заголовок PlayReady 4.2.0.0 с двумя ключами AESCTR:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.2.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID ALGID="AESCTR" CHECKSUM="xNvWVxoWk04=" VALUE="0IbHou/5s0yzM80yOkKEpQ=="></KID>
        <KID ALGID="AESCTR" CHECKSUM="GnKaQIRacPU=" VALUE="/qgG2xbs4k2SKCxx6bhWqw=="></KID>
      </KIDS>
    </PROTECTINFO>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
  </DATA>
</WRMHEADER>

3.4.3. Формат

Заголовок PlayReady версии 4.2.0.0 имеет следующий синтаксис:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.2.0.0">
  <DATA>
      <PROTECTINFO>
        <KIDS>
          <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
        </KIDS>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID> base64-encoded guid </DS_ID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

Теги описаны ниже.

Имя тега Обязательно Описание
WRMHEADER Да Внешний элемент объекта заголовка. Он может содержать один элемент DATA и должен содержать один атрибут версии. Версия заголовка — 4.2.0.0. Каждый раз, когда корпорация Майкрософт определяет новые обязательные теги или атрибуты, с этими тегами или атрибутами связывается новый номер версии. Если версия больше, чем версия, для которой был написан клиентский код, код клиента должен завершиться ошибкой, так как он подразумевает, что заголовок содержит обязательные теги, которые клиент не понимает. Если версия меньше или равна этой версии, для которой был написан клиентский код, то клиентский код может безопасно пропустить любые теги или атрибуты, которые он не понимает.
DATA Нет Элемент контейнера для данных заголовка, включая сторонние теги. В элемент WRMHEADER может быть включен только один элемент DATA.
PROTECTINFO Нет Указывает ноль или один элемент KIDS . В элемент DATA может включаться не более одного элемента PROTECTINFO.
ДЕТЕЙ Нет Указывает один или несколько элементов KID , которые могут использоваться для создания объектов расшифровки для связанного содержимого. Один или ноль элементов KIDS могут существовать в узле PROTECTINFO .
РЕБЕНОК Нет Содержит все ключевые данные для данной лицензии. Если узел KIDS присутствует, один или несколько элементов KID должны существовать под узлом KIDS . Элемент KID содержит следующие атрибуты.

ALGID: обязательный аргумент. Указывает алгоритм шифрования. Необходимо задать значение AESCTR или COCKTAIL

CHECKSUM: Optional. Содержит контрольную сумму, вычисленную с помощью параметра KID VALUE и ключа содержимого. Дополнительные сведения см. в разделе "Алгоритм контрольной суммы ключей " этого документа.

Если этот узел существует в XML WRMHeader, его значение данных должно быть пустым.

ЗНАЧЕНИЕ: обязательный аргумент. Содержит значение GUID идентификатора ключа в кодировке Base64. Обратите внимание, что это значение GUID (DWORD, WORD, WORD, массив 8-BYTE) должно быть небольшим порядком байтов конца.
LA_URL Нет Содержит URL-адрес веб-службы приобретения лицензии. Разрешены только абсолютные URL-адреса. В элемент DATA может быть включено не более одного LA_URL элемента.

Если этот узел существует в XML WRMHeader, его значение данных не должно быть пустым.
LUI_URL Нет Содержит URL-адрес веб-страницы приобретения лицензий без автоматического отображения. Разрешены только абсолютные URL-адреса. В элемент DATA может включаться не более одного LUI_URL элемента.

Если этот узел существует в XML WRMHeader, его значение данных не должно быть пустым.
DS_ID Нет Идентификатор службы для доменной службы. В элемент DATA может быть включено не более одного элемента DS_ID.

Если этот узел существует в XML WRMHeader, его значение данных не должно быть пустым.
CUSTOMATTRIBUTES Нет Автор содержимого может добавить произвольный XML-код внутри этого элемента. Код Майкрософт не выполняет никаких действий с данными, содержащимися в этом элементе. В элемент DATA может быть включен не более одного элемента CUSTOMATTRIBUTES.

Если этот узел существует в XML WRMHeader, его значение данных не должно быть пустым.
DECRYPTORSETUP Нет Этот тег может содержать только значение ONDEMAND. Если этот тег присутствует в узле DATA и его значение имеет значение ONDEMAND, оно указывает приложению, что он не должен ожидать, что полная цепочка лицензий для содержимого будет доступна для приобретения или уже присутствует на клиентском компьютере перед настройкой графа мультимедиа. Если этот тег не задан, он указывает, что приложение может принудительно применить лицензию для приобретения или уже присутствовать на клиентском компьютере перед настройкой графа мультимедиа. В элемент DATA может включаться не более одного элемента DECRYPTORSETUP.

3.5. v4.1.0.0

Заголовок PlayReady версии 4.1.0.0 появился в PlayReady версии 2.0 в сентябре 2011 года для поддержки динамических линейных потоков с масштабируемыми конечными лицензиями, внедренными в поток. Для этого типа потока клиенты должны привязать масштабируемую корневую лицензию без знания ключа шифрования содержимого, который будет использоваться в расшифровке.

3.5.1. Различия с другими версиями

Пакеты SDK для PlayReady 2.0 и более поздние версии Клиенты могут обрабатывать версии заголовков PlayReady версии 4.0 и 4.1. Предыдущие пакеты SDK PlayReady возвращают ошибку "неподдерживаемая версия" при указании заголовков версии 4.1.

Формат заголовка PlayReady версии 4.1.0.0 имеет следующие изменения по сравнению с версией 4.0.0.0:

  • Атрибут версии элемента WRMHEADER имеет строку "4.1.0.0".
  • Элемент DATA содержит необязательный элемент DECRYPTORSETUP .
  • Элемент KID находится внутри элемента PROTECTINFO и является необязательным, а не обязательным.
  • Элемент KID содержит атрибуты ALGID (обязательно), CHECKSUM (необязательно) и VALUE (обязательно).
  • Элемент KEYLEN удален. Атрибут KEYLEN ранее использовался для неоднозначности лицензий на коктейли с разными ключами длины. Заголовок версии 4.1 нарушает возможность поддерживать все, кроме 8-байтовых коктейльных клавиш. Если вы используете коктейльные ключи, которые не являются 8-байтами, необходимо использовать заголовки версии 4.0.
  • Элементы ALGID и CHECKSUM были удалены, так как их данные содержатся в атрибутах элемента KID .

3.5.2. Формат

Заголовок PlayReady версии 4.1.0.0 имеет следующий синтаксис:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.1.0.0">
  <DATA>
      <PROTECTINFO>
        <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID> base64-encoded guid </DS_ID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

Теги описаны ниже.

Имя тега Обязательно Описание
WRMHEADER Да Внешний элемент объекта заголовка. Он может содержать один элемент DATA и должен содержать один атрибут версии. Версия заголовка — 4.1.0.0. Каждый раз, когда корпорация Майкрософт определяет новые обязательные теги или атрибуты, с этими тегами или атрибутами связывается новый номер версии. Если версия больше, чем версия, для которой был написан клиентский код, код клиента должен завершиться ошибкой, так как он подразумевает, что заголовок содержит обязательные теги, которые клиент не понимает. Если версия меньше или равна этой версии, для которой был написан клиентский код, то клиентский код может безопасно пропустить любые теги или атрибуты, которые он не понимает.
DATA Нет Элемент контейнера для данных заголовка, включая сторонние теги. В элемент WRMHEADER может быть включено не более одного элемента DATA.
PROTECTINFO Нет Указывает ноль или один элемент KID , который может использоваться для создания объектов расшифровки для связанного содержимого. В элемент DATA может включаться не более одного элемента PROTECTINFO.
РЕБЕНОК Нет Содержит все ключевые данные для данной лицензии. Один или ноль элементов KID могут существовать в узле PROTECTINFO . Элемент KID содержит следующие атрибуты.

ЗНАЧЕНИЕ: обязательный аргумент. Содержит значение GUID идентификатора ключа в кодировке Base64. Обратите внимание, что это значение GUID (DWORD, WORD, WORD, массив 8-BYTE) должно быть небольшим порядком байтов конца.

ALGID: обязательный аргумент. Указывает алгоритм шифрования. Необходимо задать значение "AESCTR" или "COCKTAIL"

CHECKSUM: Optional. Содержит контрольную сумму, вычисленную с помощью параметра KID VALUE и ключа содержимого. Дополнительные сведения см. в разделе "Алгоритм контрольной суммы ключей " этого документа.

Если этот узел существует в XML WRMHeader, его значение данных должно быть пустым.
LA_URL Нет Содержит URL-адрес веб-службы приобретения лицензии. Разрешены только абсолютные URL-адреса. В элемент DATA может быть включено не более одного LA_URL элемента.

Если этот узел существует в XML WRMHeader, его значение данных не должно быть пустым.
LUI_URL Нет Содержит URL-адрес веб-страницы приобретения лицензий без автоматического отображения. Разрешены только абсолютные URL-адреса. В элемент DATA может включаться не более одного LUI_URL элемента.

Если этот узел существует в XML WRMHeader, его значение данных не должно быть пустым.
DS_ID Нет Идентификатор службы для доменной службы. В элемент DATA может быть включено не более одного элемента DS_ID.

Если этот узел существует в XML WRMHeader, его значение данных не должно быть пустым.
CUSTOMATTRIBUTES Нет Автор содержимого может добавить произвольный XML-код внутри этого элемента. Код Майкрософт не выполняет никаких действий с данными, содержащимися в этом элементе. В элемент DATA может быть включен только один элемент CUSTOMATTRIBUTES.

Если этот узел существует в XML WRMHeader, его значение данных не должно быть пустым.
DECRYPTORSETUP Нет Этот тег может содержать только значение ONDEMAND. Если этот тег присутствует в узле DATA и его значение имеет значение ONDEMAND, оно указывает приложению, что он не должен ожидать, что полная цепочка лицензий для содержимого будет доступна для приобретения или уже присутствует на клиентском компьютере перед настройкой графа мультимедиа. Если этот тег не задан, он указывает, что приложение может принудительно применить лицензию для приобретения или уже присутствовать на клиентском компьютере перед настройкой графа мультимедиа. В элемент DATA может быть включен только один элемент DECRYPTORSETUP.

Примечания для версии 4.1:

  • Все XML-теги и атрибуты в заголовке PlayReady определяются корпорацией Майкрософт. Единственным исключением является содержимое элемента CUSTOMATTRIBUTES . Разработчики приложений PlayReady для ПК не должны добавлять пользовательские теги за пределами элемента CUSTOMATTRIBUTES .
  • Заголовок PlayReady должен соответствовать спецификациям W3C Canonical XML версии 1.1.
  • Заголовок PlayReady не содержит тег верхнего уровня ?XML , необходимый в xml-коде с правильным форматом.
  • Рекомендуется, чтобы размер этого поля не должен превышать 1 КБ.

3.6. v4.0.0.0

Заголовок PlayReady версии 4.0.0.0 появился в PlayReady версии 1.0 в 2008 году и позволяет одному ключу AESCTR поддерживать зашифрованное содержимое AES или ключ COCKTAIL для поддержки зашифрованного содержимого WMDRM.

3.6.1. Примеры

Заголовок PlayReady 4.0.0.0
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0">
  <DATA>
    <PROTECTINFO>
      <ALGID>AESCTR</ALGID>
      <KEYLEN>16</KEYLEN>
    </PROTECTINFO>
    <KID>q5HgCTj40kGeNVhTH9Gexw==</KID>
    <CHECKSUM>w+OZVr8vzrQ=</CHECKSUM>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <CUSTOMATTRIBUTES>
      <IIS_DRM_VERSION>8.0.1705.19</IIS_DRM_VERSION>
    </CUSTOMATTRIBUTES>
  </DATA>
</WRMHEADER>
Объект PlayReady в кодировке Base64, содержащий заголовок PlayReady 4.0.0.0

XAMAAAEAAQBSAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AcQA1AEgAZwBDAFQAagA0ADAAawBHAGUATgBWAGgAVABIADkARwBlAHgAdwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgB3ACsATwBaAFYAcgA4AHYAegByAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+ AGgAdAB0AHAAcwA6AC8ALwBwAHIAbwBmAGYAaQBjAGkAYQBsAHMAaQB0AGUALgBrAGUAeQBkAGUAbABpAHYAZQByAHkALgBtAGUAZABpAGEAcwBlAHIAdgBpAGMAZQBzAC4AdwBpAG4AZABvAHcAcwAuAG4AZQB0AC8AUABsAGEAeQBSAGUAYQBkAHkALwA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4AOAAuADAALgAxADcAMAA1AC4AMQA5ADwALwBJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APAAvAEQQBUAEEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=

3.6.2. Формат

Заголовок PlayReady версии 4.0.0.0 имеет следующий синтаксис:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0">
<DATA>
      <PROTECTINFO>
        <ALGID>AESCTR</ALGID>
        <KEYLEN>16</KEYLEN>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID>base64-encoded guid</DS_ID>
    <KID>base64-encoded kid</KID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <CHECKSUM>
      checksum of the content key for verification
    </CHECKSUM>
  </DATA>
</WRMHEADER>

В следующей таблице описаны различные теги.

Имя тега Обязательно Описание
WRMHEADER Да Внешний элемент объекта заголовка. Он может содержать один элемент DATA и один атрибут версии. Версия заголовка — 4.0.0.0.

Семантика для packager:
каждый раз, когда корпорация Майкрософт определяет новые обязательные теги или атрибуты, новый номер версии связан с этими тегами или атрибутами. Для версии заголовка PlayReady должно быть задано максимальное значение версий обязательных тегов и атрибутов, присутствующих в заголовке.

Семантика для клиента:
если версия больше, чем версия, для которой был написан клиентский код, код клиента должен завершиться ошибкой, так как он подразумевает, что заголовок содержит обязательные теги, которые клиент не понимает. Если версия меньше или равна той, для которой был написан клиентский код, то клиентский код может безопасно пропустить любые теги или атрибуты, которые он не понимает.
DATA Да Элемент контейнера для данных заголовка, включая сторонние теги.
PROTECTINFO Да Указывает тип шифрования с помощью дочерних элементов KEYLEN и ALGID .
KEYLEN Да Указывает размер ключа содержимого. Если ДЛЯ ALGID задано значение "AESCTR", а 7 — значение 16, если ДЛЯ ALGID задано значение "COCKTAIL".
ALGID Да Указывает алгоритм шифрования. Должно быть задано следующее значение:

AESCTR: соответствует алгоритму AES в режиме счетчика.

COCKTAIL: соответствует алгоритму коктейля.
РЕБЕНОК Да Содержит значение GUID идентификатора ключа в кодировке Base64. Обратите внимание, что это значение GUID (DWORD, WORD, WORD, массив 8-BYTE) должно быть небольшим порядком байтов конца.
CHECKSUM Нет Содержит контрольную сумму, вычисляемую с помощью параметра KID VALUE и ключа содержимого. Дополнительные сведения см. в разделе "Алгоритм контрольной суммы ключей ".

В предыдущих версиях PlayReady это поле рассматривалось как обязательное, поэтому оно должно быть включено в любой заголовок, который будет использоваться предыдущей версией PlayReady.
LA_URL Нет Содержит URL-адрес веб-службы приобретения лицензии. Разрешены только абсолютные URL-адреса.
LUI_URL Нет Содержит URL-адрес веб-страницы приобретения лицензий без автоматического отображения. Разрешены только абсолютные URL-адреса.
DS_ID Нет Идентификатор службы для доменной службы.
CUSTOMATTRIBUTES Нет Автор содержимого может добавить произвольный XML-код внутри этого элемента. Код Майкрософт не выполняет никаких действий с данными, содержащимися в этом элементе.

Примечания для версии 4.0:

  • Все XML-теги и атрибуты в заголовке PlayReady определяются корпорацией Майкрософт. Единственным исключением является содержимое элемента CUSTOMATTRIBUTES . Разработчики приложений PlayReady для ПК не должны добавлять пользовательские теги за пределами элемента CUSTOMATTRIBUTES , так как это может столкнуться с будущими тегами, которые корпорация Майкрософт определяет.
  • Порядок дочерних элементов в элементе контейнера не имеет значения.
  • Обратите внимание, что заголовок PlayReady не содержит тег верхнего уровня ?XML , необходимый в ФОРМАТЕ XML с правильным форматом.
  • Рекомендуется, чтобы размер этого поля не должен превышать 1 КБ.
  • ПАКЕТ SDK для сервера PlayReady требуется для проверки контрольной суммы до версии 1.2. Начиная с версии 1.5 пакет SDK для Сервера PlayReady рассматривает КОНТРОЛЬНУЮ СУММУ как необязательный. PlayReady Porting Kit 1.2 из коробки требует контрольной суммы. PlayReady Porting Kit 2.0 рассматривает контрольную сумму как необязательную.

4. Внедренное хранилище лицензий (ELS)

Рекомендуется добавить пустое встроенное хранилище лицензий в объект PlayReady в следующих условиях:

  • Объект PlayReady необходимо вставить в файл содержимого.
  • Содержимое может использоваться в контексте доменов PlayReady с внедренными лицензиями.

Это позволяет клиенту PlayReady дополнительно внедрить лицензию, привязанную к домену, в объект PlayReady, просто заполнив существующее встроенное хранилище лицензий и экономя усилия при повторном заголовке всего файла с новым объектом PlayReady большего размера, чем исходный.

Примечание

Не включайте пустое встроенное хранилище лицензий в объект PlayReady, предназначенный для вставки в виде строки base-64 в манифест клиента Smooth Streaming.

Примечание

Рекомендуемый размер составляет 10 КБ.

5. Алгоритм контрольной суммы ключей

Алгоритм контрольной суммы в заголовке PlayReady предназначен для защиты от несовпаденных ключей. В первые дни DRM песни были зашифрованы с неправильно помеченными ключами. Это привело к тому, что белый шум воспроизводился, когда песни были расшифрованы. И если песни были воспроизведены достаточно громко, оборудование воспроизведения было уничтожено. С помощью контрольной суммы ключ содержимого можно проверить как ключ, который использовался для шифрования файла. Алгоритм работает следующим образом:

Для значения ALGID с значением AESCBC не определен алгоритм контрольной суммы ключей. Атрибут CHECKSUM должен быть опущен.

Для значения ALGID , заданного как AESCTR, идентификатор 16-байтового ключа шифруется с помощью 16-байтового ключа содержимого AES с помощью режима ECB. Первые 8 байт буфера извлекаются и кодируются в кодировке Base64.

Для значения ALGID с значением "COCKTAIL" выполните следующие действия:

  1. Создается 21-байтовый буфер.

  2. Ключ содержимого помещается в буфер, а остальная часть буфера заполняется нулями.

  3. Для пяти итераций:

    а. buffer = SHA-1 (буфер).

  4. Первые 7 байт буфера извлекаются и кодируются в кодировке Base64.

  5. После выполнения этих действий в качестве контрольной суммы используются байты в кодировке Base64.

6. CUSTOMATTRIBUTES

Поставщик услуг может добавить собственный XML в элемент CUSTOMATTRIBUTES заголовка PlayReady. Все теги, используемые внутри элемента CUSTOMATTRIBUTES , гарантированно не будут конфликтовать с будущими тегами, определенными корпорацией Майкрософт.

Код Майкрософт не выполняет никаких действий в XML-коде внутри этого элемента. Серверная часть поставщика услуг или код на стороне клиента являются единственными, которые обычно интерпретируют значение этого элемента. Например, предположим, что служба белых меток представляет интерфейсные службы AAA, BBB, CCC. Такая служба может зашифровать библиотеку содержимого только один раз (так как это ресурсоемкая операция), но когда она обслуживает содержимое для конечного пользователя, она может задать customATTRIBUTES имя конкретной интерфейсной службы, на которую подписан конечный пользователь. Когда конечный пользователь запрашивает лицензию на это содержимое, это позволяет службе белых меток определить, на какую интерфейсную службу подписывается конечный пользователь, чтобы она могла выдать другую лицензию.

Размер этого поля не должен превышать 1 килобайт (КБ).