Udostępnij za pośrednictwem


Specyfikacja nagłówka systemu PlayReady

1. Wprowadzenie

Ta specyfikacja dotyczy każdego produktu końcowego utworzonego przy użyciu zestawu SDK playReady Server, zestawu PlayReady Device Porting Kit, Windows, Xbox, Windows Phone i Silverlight.

1.1. Historia zmian

wersja Zmiana
8 września 2021 r. Dodaj opcjonalny atrybut LICENSEREQUESTED do węzła PROTECTINFO.
1 listopada 2017 r. Dodaj sekcję Wymagania składniowe. Napraw wiele przykładów z niepoprawną kolejnością atrybutów (atrybuty muszą być w kolejności alfabetycznej)
12 lipca 2017 r. Dodaj sekcję PlayReady Header 4.3.0.0 obsługiwaną począwszy od wersji PlayReady 4.
Dodaj wymaganie składniowe, że wszystkie węzły XML muszą być jawnie zamknięte za pomocą tagu zamykającego
10 kwietnia 2015 r. Dodano sekcję PlayReady Header 4.2.0.0, obsługiwaną od wersji PlayReady w wersji 3
Wrzesień 2011 r. Dodano sekcję PlayReady Header 4.1.0.0, obsługiwaną od wersji PlayReady w wersji 2
Sierpień 2008 r. Wersja początkowa dokumentująca nagłówek PlayReady 4.0.0.0 obsługiwany w systemie PlayReady w wersji 1

2. Obiekt PlayReady (PRO)

Obiekt PlayReady (PRO) zawiera następujące pola.

Nazwa pola Typ pola Rozmiar (bitów) Opis
Długość DWORD 32 Długość obiektu PlayReady w bajtach. Ta wartość nie powinna przekraczać 15 kilobajtów (KB).
Liczba rekordów obiektów PlayReady SŁOWO 16 Określa liczbę rekordów obiektów PlayReady w obiekcie PlayReady.
Rekordy obiektów PlayReady Tablica BYTE Różni się Zawiera zmienną liczbę rekordów, które zawierają informacje związane z licencjami i pozyskiwaniem licencji.

2.1 Rekordy obiektów PlayReady

Obiekt PlayReady składa się z dodatkowych obiektów podrzędnych o nazwie PlayReady Object Records. Rekordy obiektów PlayReady zawierają następujące pola.

Nazwa pola Typ pola Rozmiar (w bitach) Opis
Typ rekordu SŁOWO 16 Określa typ danych przechowywanych w wartości rekordu.
Długość rekordu SŁOWO 16 Określa rozmiar wartości rekordu w bajtach.
Wartość rekordu Tablica BYTE Różni się Zawartość obiektu zależy od wartości typu rekordu.

Pole Typ rekordu ma jedną z następujących wartości.

Typ wartości Opis
0x0001 Wskazuje, że rekord zawiera nagłówek PlayReady (PRH).
0x0002 Zarezerwowane.
0x0003 Wskazuje zintegrowany magazyn licencji (ELS).

2.2. Przykłady obiektów PlayReady

Na poniższej ilustracji przedstawiono segmentowany plik MP4 z obiektem PlayReady zawierającym nagłówek PlayReady:

PlayReady Object in MP4

Na poniższej ilustracji przedstawiono widok HEX tego pliku MP4:

Zrzut szesnastkowy obiektu PlayReady

3. Nagłówek PlayReady (PRH)

Nagłówek PlayReady (PRH) jest używany przez klienta do lokalizowania lub uzyskiwania licencji na zawartość, w którą jest przechowywany. Jest on kodowany przy użyciu protokołu UTF-16.

Macierz obsługi wersji 3.1

  Nagłówek PlayReady w wersji 4.3.0.0 Nagłówek PlayReady w wersji 4.2.0.0 Nagłówek PlayReady w wersji 4.1.0.0 Nagłówek PlayReady w wersji 4.0.0.0
Klienci oparci na SDK PlayReady 4.0
(patrz uwaga 1)
Klienci oparte na PlayReady 3.0 SDK
(patrz uwaga 2)
 
Klienci oparci na zestawie SDK PlayReady 2.x
(patrz uwaga 3)
   
Klienci
korzystający z zestawu SDK playReady 1.x (patrz uwaga 4)
     

Notatki:

  1. Konsola Xbox One w wersji 1709 lub nowszej to klienci PlayReady 4.X.
  2. Windows 10 (wszystkie wersje) i Xbox One w wersji 1703 lub starszej to Klienci PlayReady 3.X. Najnowsze urządzenia z systemem innych niż Windows (na przykład inteligentne telewizory) wydane po 2017 r. to klienci PlayReady 3.X.
  3. Oprogramowanie Silverlight i Windows 8, 8.1 są klientami PlayReady 2.X. W latach 2011-2017 większość urządzeń z systemem innych niż Windows (np. Smart TV) jest klientami PlayReady 2.X.
  4. W latach 2008-2011 większość urządzeń z systemem innych niż Windows (np. Smart TV) jest klientami PlayReady 1.X.

3.2. Wymagania składniowe

3.2.1. ​Skononikalizowane

Kod XML musi być kanoniczny.

3.2.2. Wszystkie nazwy węzłów i atrybutów są wrażliwe na wielkość liter.

Wsparte

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

Niewspierane

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

3.2.3. Tagi zamykające muszą być jawne

Wszystkie węzły XML muszą być jawnie zamknięte przez tag zamykający, w tym te znajdujące się w węzłach wewnątrz węzła CUSTOMATTRIBUTES.

Wsparte

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

Niewspierane

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

3.2.4. Atrybuty przestrzeni nazw

Wszystkie atrybuty przestrzeni nazw muszą być wyświetlane przed atrybutami innych niż przestrzenie nazw.

Wsparte

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

Nie jest obsługiwany

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

3.2.5. Kolejność alfabetyczna

Wszystkie atrybuty, w tym te znajdujące się w węzłach wewnątrz węzła CUSTOMATTRIBUTES, muszą być w kolejności alfabetycznej.

Wsparte

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

Niewspierane

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

3.3. Wersja 4.3.0.0

Funkcja PlayReady Header w wersji 4.3.0.0 została wprowadzona z wersją PlayReady w wersji 4.0 we wrześniu 2017 r. w celu obsługi kluczy AESCBC w nagłówku. Ta obsługa umożliwia szyfrowanie zawartości w trybie CBC, w szczególności w przypadku trybów common encryption "cbcs". Zwiększa również współdziałanie klientów PlayReady z innymi systemami DRM, a także istniejącą zawartością.

3.3.1. Różnice w innych wersjach

Począwszy od wersji 4.0, zestawy SDK i klienci PlayReady mogą przetwarzać nagłówki PlayReady w wersji 4.0, 4.1, 4.2 i 4.3. Zestawy SDK PlayReady przed wersją 4.0 zwracają błąd "nieobsługiwanej wersji" w przypadku podania nagłówków w wersji 4.3.

Format nagłówka PlayReady w wersji 4.3.0.0 ma następujące zmiany w porównaniu z wersją 4.2.0.0:

  • Atrybut wersji elementu WRMHEADER jest ustawiony na ciąg "4.3.0.0".
  • W żądaniu uzyskania licencji brakuje atrybutu ALGID znajdującego się wewnątrz elementu KID . Firma Microsoft zaleca, aby atrybut ALGID miał prawidłową wartość w nagłówku dołączonym do zawartości.
  • Gdy atrybut ALGID jest obecny w dowolnym elemecie KID i istnieje więcej niż jeden element KID w elemecie KIDS , wszystkie elementy KID muszą zawierać atrybut ALGID , a wartości atrybutów muszą być takie same.
  • Atrybut ALGID znajdujący się wewnątrz elementu KID może teraz mieć wartość "AESCBC", oprócz "AESCTR", pod warunkiem, że:
    • Gdy atrybut ALGID jest ustawiony na "AESCBC", atrybut CHECKSUM nie może być uwzględniony.

3.3.2. Przykłady

Poniżej przedstawiono przykładowy nagłówek PlayReady 4.3.0.0 z kluczami 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>

Poniżej przedstawiono przykład nagłówka PlayReady 4.3.0.0 z brakującą wartością 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. Forma

Nagłówek PlayReady w wersji 4.3.0.0 ma następującą składnię:

<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>

Tagi zostały opisane poniżej.

Nazwa tagu Wymagane Opis
WRMHEADER Tak Zewnętrzny element obiektu nagłówka. Może zawierać jeden element DATA i musi zawierać jeden atrybut wersji. Wersja nagłówka to "4.3.0.0". Za każdym razem, gdy firma Microsoft definiuje nowe obowiązkowe tagi lub atrybuty, nowy numer wersji jest skojarzony z tymi tagami lub atrybutami. Jeśli wersja jest większa niż ta, dla której został napisany kod klienta, kod klienta musi zakończyć się niepowodzeniem, ponieważ oznacza to, że nagłówek zawiera obowiązkowe tagi, których klient nie rozumie. Jeśli wersja jest mniejsza lub równa tej, dla której kod klienta został napisany, kod klienta może bezpiecznie pominąć wszelkie tagi lub atrybuty, których nie rozumie.
DANE Nie. Element kontenerowy dla danych nagłówka, zawierający tagi innych firm. Nie więcej niż jeden element DATA może być uwzględniony w elemecie WRMHEADER .
PROTECTINFO Nie. Określa zero lub jeden element KIDS . W elemecie DATA może znajdować się nie więcej niż jeden element PROTECTINFO. Opcjonalnie zawiera atrybut LICENSEREQUESTED.
ŻądanieLicencji Nie. Określa, czy pozyskiwanie licencji wymaga co najmniej jednej licencji, czy nie. Należy ustawić wartość na "true" lub "false", jeśli jest obecna, a jeśli nie jest obecna, zakłada się, że ustawiona jest wartość "true". Ten atrybut jest ignorowany przez wersje PlayReady przed wersją 4.5. Aplikacja PlayReady Server SDK ma swobodę ignorowania tego atrybutu; jest on wyłącznie informacyjny.
DZIECI Nie. Określa co najmniej jeden element KID , który może być używany do tworzenia obiektów odszyfrowywania dla skojarzonej zawartości. Jeden lub zero elementów KIDS może istnieć w węźle PROTECTINFO .
DZIECIAK Nie. Zawiera wszystkie kluczowe dane dla danej licencji. Jeśli węzeł KIDS jest obecny, co najmniej jeden element KID musi istnieć w węźle KIDS . Element KID zawiera następujące atrybuty.

ALGID: opcjonalne. Określa algorytm szyfrowania. Może być ustawiona na: "AESCTR", "AESCBC" lub "COCKTAIL".

SUMA KONTROLNA: opcjonalnie. Tylko w przypadku kluczy AESCTR. Zawiera sumę kontrolną obliczaną przy użyciu atrybutu KID VALUE i klucza zawartości. Aby uzyskać szczegółowe informacje, zapoznaj się z sekcją Algorytm sumy kontrolnej klucza w tym dokumencie.

Jeśli ten węzeł istnieje w WRMHeader XML, jego wartość danych musi być pusta.

WARTOŚĆ: Wymagane. Zawiera wartość identyfikatora GUID klucza zakodowanego w formacie base64. Należy pamiętać, że ta wartość identyfikatora GUID (DWORD, WORD, WORD, tablica 8-BYTE) musi być w porządku bajtów little endian.
LA_URL Nie. Zawiera adres URL do nabycia licencji usługi internetowej. Dozwolone są tylko bezwzględne adresy URL. Nie więcej niż jeden element LA_URL może być uwzględniony w elemecie DATA .

Jeśli ten węzeł istnieje w kodzie XML usługi WRMHeader, jego wartość danych nie może być pusta.
LUI_URL Nie. Zawiera adres URL strony internetowej pozyskiwania licencji interaktywnej. Dozwolone są tylko bezwzględne adresy URL. W elemecie DATA może znajdować się nie więcej niż jeden element LUI_URL.

Jeśli ten węzeł istnieje w kodzie XML usługi WRMHeader, jego wartość danych nie może być pusta.
DS_ID Nie. Identyfikator usługi dla domeny. W elemecie DATA może znajdować się tylko jeden element DS_ID.

Jeśli ten węzeł istnieje w kodzie XML usługi WRMHeader, jego wartość danych nie może być pusta.
CUSTOMATTRIBUTES ATRYBUTY Nie. Autor zawartości może dodać niestandardowy kod XML wewnątrz tego elementu. Kod firmy Microsoft nie działa na żadnych danych zawartych wewnątrz tego elementu. Nie więcej niż jeden element CUSTOMATTRIBUTES może być uwzględniony w elemecie DATA .

Jeśli ten węzeł istnieje w kodzie XML usługi WRMHeader, jego wartość danych nie może być pusta.
Instalacja Dekryptora Nie. Ten tag może zawierać tylko wartość "ONDEMAND". Gdy ten tag znajduje się w węźle DATA i jego wartość jest ustawiona na wartość "ONDEMAND", oznacza to aplikację, że nie powinna oczekiwać, że pełny łańcuch licencji dla zawartości będzie dostępny do nabycia lub jest już obecny na maszynie klienckiej przed skonfigurowaniem grafu multimediów. Jeśli ten tag nie jest ustawiony, oznacza to, że aplikacja może wymusić pozyskanie licencji, która ma zostać nabyta lub która już jest obecna na komputerze klienckim, przed skonfigurowaniem grafu multimedialnego. Nie więcej niż jeden element DECRYPTORSETUP może być uwzględniony w elemecie DATA .

3.4. Wersja 4.2.0.0

Nagłówek PlayReady w wersji 4.2.0.0 został wprowadzony wraz z wersją PlayReady 3.0 w kwietniu 2015 r., aby umożliwić użycie wielu identyfikatorów KID w jednym nagłówku. Oznacza to, że można użyć wielu kluczy do szyfrowania pojedynczego elementu zawartości, na przykład gdy ścieżki dźwiękowe muszą być szyfrowane przy użyciu innego klucza niż ścieżki wideo.

3.4.1. Różnice w innych wersjach

Zestawy SDK PlayReady 3.0 i nowsze są w stanie przetworzyć wersje 4.0, v4.1 i 4.2 PlayReady Header. Wcześniejsze zestawy SDK PlayReady zwracają błąd "nieobsługiwanej wersji" w przypadku podania nagłówków wersji 4.2. W przypadku korzystania z nagłówka w wersji 4.2 klient musi wiedzieć, jakiej wersji serwera używa za pomocą niestandardowego mechanizmu specyficznego dla aplikacji. Zestawy SDK PlayReady nie zapewniają natywnego sposobu uzyskiwania tych informacji o wersji.

Format nagłówka PlayReady v.4.2.0.0 ma następujące zmiany w porównaniu z wersją 4.1.0.0:

  • Atrybut wersji elementu WRMHEADER jest ustawiony na ciąg "4.2.0.0".
  • Nazwa elementu KID znajdująca się wewnątrz elementu PROTECTINFO została zmieniona na KIDS i jest nadal opcjonalna.
  • Wiele elementów KID znajduje się wewnątrz elementu KIDS .

3.4.2. Przykład

PlayReady Header 4.2.0.0 z dwoma kluczami 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. Forma

Nagłówek PlayReady w wersji 4.2.0.0 ma następującą składnię:

<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>

Tagi zostały opisane poniżej.

Nazwa tagu Wymagane Opis
WRMHEADER Tak Najbardziej zewnętrzny element obiektu nagłówka. Może zawierać jeden element DATA i musi zawierać jeden atrybut wersji. Wersja nagłówka to "4.2.0.0". Za każdym razem, gdy firma Microsoft definiuje nowe obowiązkowe tagi lub atrybuty, nowy numer wersji jest skojarzony z tymi tagami lub atrybutami. Jeśli wersja jest większa niż ta, dla której został napisany kod klienta, kod klienta musi zakończyć się niepowodzeniem, ponieważ oznacza to, że nagłówek zawiera obowiązkowe tagi, których klient nie rozumie. Jeśli wersja jest mniejsza lub równa tej, dla której kod klienta został napisany, kod klienta może bezpiecznie pominąć wszelkie tagi lub atrybuty, których nie rozumie.
DANE Nie. Kontener na dane nagłówka, w tym zewnętrzne tagi. W elemecie WRMHEADER może znajdować się tylko jeden element DATA.
PROTECTINFO Nie. Określa zero lub jeden element KIDS . W elemecie DATA może znajdować się nie więcej niż jeden element PROTECTINFO.
DZIECI Nie. Określa co najmniej jeden element KID , który może być używany do tworzenia obiektów odszyfrowywania dla skojarzonej zawartości. Jeden lub zero elementów KIDS może istnieć w węźle PROTECTINFO .
DZIECIAK Nie. Zawiera wszystkie kluczowe dane dla danej licencji. Jeśli węzeł KIDS jest obecny, co najmniej jeden element KID musi istnieć w węźle KIDS . Element KID zawiera następujące atrybuty.

ALGID: wymagane. Określa algorytm szyfrowania. Musi być ustawione na jeden z: AESCTR lub COCKTAIL

CHECKSUM: Opcjonalnie. Zawiera sumę kontrolną obliczoną przy użyciu wartości identyfikatora KID oraz klucza zawartości. Aby uzyskać szczegółowe informacje, zapoznaj się z sekcją Algorytm sumy kontrolnej klucza w tym dokumencie.

Jeśli ten węzeł istnieje w kodzie XML usługi WRMHeader, jego wartość danych musi być pusta.

WARTOŚĆ: wymagane. Zawiera wartość identyfikatora GUID zakodowanego w formacie base64. Należy pamiętać, że ta wartość identyfikatora GUID (DWORD, WORD, WORD, tablica 8-BYTE) musi być w porządku bajtów typu little endian.
LA_URL Nie. Zawiera adres URL nabycia licencji usługi internetowej. Dozwolone są tylko bezwzględne adresy URL. Nie więcej niż jeden element LA_URL może być uwzględniony w elemecie DATA .

Jeśli ten węzeł istnieje w kodzie XML usługi WRMHeader, jego wartość danych nie może być pusta.
LUI_URL Nie. Zawiera adres URL strony sieci Web do pozyskiwania licencji nie wymagającej podania danych osobowych. Dozwolone są tylko bezwzględne adresy URL. W elemecie DATA może znajdować się nie więcej niż jeden element LUI_URL.

Jeśli ten węzeł istnieje w kodzie XML usługi WRMHeader, jego wartość danych nie może być pusta.
DS_ID Nie. Identyfikator usługi dla usług domenowych. Nie więcej niż jeden element DS_ID może być uwzględniony w elemecie DATA .

Jeśli ten węzeł istnieje w kodzie XML usługi WRMHeader, jego wartość danych nie może być pusta.
ATRYBUTY NIETYPOWE Nie. Autor zawartości może dodać dowolny kod XML wewnątrz tego elementu. Kod firmy Microsoft nie działa na żadnych danych zawartych wewnątrz tego elementu. Nie więcej niż jeden element CUSTOMATTRIBUTES może być uwzględniony w elemecie DATA .

Jeśli ten węzeł istnieje w kodzie XML usługi WRMHeader, jego wartość danych nie może być pusta.
DECRYPTORSETUP Nie. Ten tag może zawierać tylko wartość "ONDEMAND". Gdy ten tag znajduje się w węźle DATA i jego wartość jest ustawiona na wartość "ONDEMAND", oznacza to aplikację, że nie powinna oczekiwać, że pełny łańcuch licencji dla zawartości będzie dostępny do nabycia lub jest już obecny na maszynie klienckiej przed skonfigurowaniem grafu multimediów. Jeśli ten tag nie jest ustawiony, oznacza to, że aplikacja może wymusić uzyskanie licencji na komputerze klienckim, lub że licencja musi być już obecna, przed skonfigurowaniem grafu multimedialnego. Nie więcej niż jeden element DECRYPTORSETUP może być uwzględniony w elemecie DATA .

3.5. Wersja 4.1.0.0

Usługa PlayReady Header w wersji 4.1.0.0 została wprowadzona z wersją PlayReady w wersji 2.0 we wrześniu 2011 r. w celu obsługi strumieni liniowych na żywo ze skalowalnymi licencjami liści osadzonymi w strumieniu. Ten typ strumienia wymaga, aby klienci wiązali główną, skalowalną licencję bez znajomości klucza szyfrowania zawartości, który będzie używany przy odszyfrowaniu.

3.5.1. Różnice w innych wersjach

Zestawy SDK PlayReady 2.0 i nowsze są w stanie przetworzyć wersje 4.0 i v4.1 PlayReady Header. Poprzednie zestawy SDK PlayReady zwracają błąd „nieobsługiwanej wersji”, gdy są dostarczane nagłówki w wersji 4.1.

Format nagłówka PlayReady w wersji 4.1.0.0 ma następujące zmiany w porównaniu z wersją 4.0.0.0:

  • Atrybut wersji elementu WRMHEADER jest ustawiony na ciąg "4.1.0.0".
  • Element DATA zawiera opcjonalny element DECRYPTORSETUP .
  • Element KID znajduje się wewnątrz elementu PROTECTINFO i jest opcjonalny, a nie wymagany.
  • Element KID zawiera atrybuty ALGID (wymagane), CHECKSUM (opcjonalnie) i VALUE (wymagane).
  • Element KEYLEN został usunięty. Atrybut KEYLEN był wcześniej używany do rozróżniania licencji koktajlowych o różnych długościach kluczy. Nagłówek v4.1 uniemożliwi obsługę czegokolwiek poza ośmiobajtowymi kluczami koktajlowymi. Jeśli używasz kluczy cocktail, które nie są 8-bajtowe, musisz zastosować nagłówki w wersji v4.0.
  • Elementy ALGID i CHECKSUM zostały usunięte, ponieważ ich dane są zawarte w atrybutach elementu KID .

3.5.2. Forma

Nagłówek PlayReady w wersji 4.1.0.0 ma następującą składnię:

<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>

Tagi zostały opisane poniżej.

Nazwa tagu Wymagane Opis
WRMHEADER Tak Najbardziej zewnętrzny element obiektu nagłówka. Może zawierać jeden element DATA i musi zawierać jeden atrybut wersji. Wersja nagłówka to "4.1.0.0". Za każdym razem, gdy firma Microsoft definiuje nowe obowiązkowe tagi lub atrybuty, nowy numer wersji jest skojarzony z tymi tagami lub atrybutami. Jeśli wersja jest większa niż ta, dla której został napisany kod klienta, kod klienta musi zakończyć się niepowodzeniem, ponieważ oznacza to, że nagłówek zawiera obowiązkowe tagi, których klient nie rozumie. Jeśli wersja jest mniejsza lub równa tej, dla której kod klienta został napisany, kod klienta może bezpiecznie pominąć wszelkie tagi lub atrybuty, których nie rozumie.
DANE Nie. Kontener na dane nagłówka, w tym zewnętrzne tagi. Nie więcej niż jeden element DATA może być uwzględniony w elemecie WRMHEADER .
PROTECTINFO Nie. Określa zero lub jeden element KID, który może być używany do tworzenia obiektów odszyfrowywania dla skojarzonej zawartości. W elemecie DATA może znajdować się nie więcej niż jeden element PROTECTINFO.
DZIECIAK Nie. Zawiera wszystkie kluczowe dane dla danej licencji. Jeden lub zero elementów KID może istnieć w węźle PROTECTINFO . Element KID zawiera następujące atrybuty.

WARTOŚĆ: wymagane. Zawiera wartość identyfikatora GUID klucza zakodowanego w formacie base64. Należy pamiętać, że wartość tego identyfikatora GUID (DWORD, WORD, WORD, tablica 8-BYTE) musi być w kolejności bajtów little endian.

ALGID: wymagane. Określa algorytm szyfrowania. Musi być ustawione na: "AESCTR" lub "COCKTAIL"

CHECKSUM: Opcjonalnie. Zawiera sumę kontrolną obliczoną przy użyciu wartości identyfikatora KID oraz klucza zawartości. Aby uzyskać szczegółowe informacje, zapoznaj się z sekcją Algorytm sumy kontrolnej klucza w tym dokumencie.

Jeśli ten węzeł istnieje w kodzie XML usługi WRMHeader, jego wartość danych musi być pusta.
LA_URL Nie. Zawiera adres URL do nabycia licencji usługi internetowej. Dozwolone są tylko bezwzględne adresy URL. Nie więcej niż jeden element LA_URL może być uwzględniony w elemecie DATA .

Jeśli ten węzeł istnieje w kodzie XML usługi WRMHeader, jego wartość danych nie może być pusta.
LUI_URL Nie. Zawiera adres URL strony internetowej pozyskiwania licencji interaktywnej. Dozwolone są tylko bezwzględne adresy URL. W elemecie DATA może znajdować się nie więcej niż jeden element LUI_URL.

Jeśli ten węzeł istnieje w kodzie XML usługi WRMHeader, jego wartość danych nie może być pusta.
DS_ID Nie. Identyfikator usługi dla domeny. Nie więcej niż jeden element DS_ID może być uwzględniony w elemecie DATA .

Jeśli ten węzeł istnieje w kodzie XML usługi WRMHeader, jego wartość danych nie może być pusta.
CUSTOMATTRIBUTES ATRYBUTY Nie. Autor zawartości może dodać dowolny kod XML wewnątrz tego elementu. Kod firmy Microsoft nie działa na żadnych danych zawartych wewnątrz tego elementu. W elemecie DATA może znajdować się tylko jeden element CUSTOMATTRIBUTES.

Jeśli ten węzeł istnieje w kodzie XML usługi WRMHeader, jego wartość danych nie może być pusta.
Instalacja Dekryptora Nie. Ten tag może zawierać tylko wartość "ONDEMAND". Gdy ten tag znajduje się w węźle DATA i jego wartość jest ustawiona na "ONDEMAND", informuje aplikację, że nie powinna oczekiwać, że pełny łańcuch licencji dla zawartości będzie dostępny do nabycia lub jest już obecny na komputerze klienckim przed przygotowaniem grafu multimediów. Jeśli ten tag nie jest ustawiony, oznacza to, że aplikacja może wymusić pozyskanie licencji, która ma zostać nabyta lub która już jest obecna na komputerze klienckim, przed skonfigurowaniem grafu multimedialnego. W elemecie DATA może znajdować się tylko jeden element DECRYPTORSETUP.

Uwagi dotyczące wersji 4.1:

  • Wszystkie tagi i atrybuty XML w nagłówku PlayReady są definiowane przez firmę Microsoft. Jedynym wyjątkiem jest zawartość elementu CUSTOMATTRIBUTES . Deweloperzy aplikacji PlayReady PC nie mogą dodawać żadnych tagów niestandardowych poza elementem CUSTOMATTRIBUTES .
  • Nagłówek PlayReady powinien być zgodny ze specyfikacjami W3C Canonical XML v1.1.
  • Nagłówek PlayReady nie zawiera tagu najwyższego poziomu wymaganego w dobrze sformułowanym kodzie ?XML XML.
  • Zaleca się, aby rozmiar tego pola nie przekraczał 1 KB.

3.6. Wersja 4.0.0.0

Element nagłówka PlayReady w wersji 4.0.0.0 został wprowadzony jako część wersji PlayReady 1.0 w 2008 roku i umożliwia obsługę zaszyfrowanej zawartości za pomocą pojedynczego klucza AESCTR lub klucza COCKTAIL do obsługi zaszyfrowanej zawartości WMDRM.

3.6.1. Przykłady

PlayReady Header 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>
Obiekt PlayReady zakodowany w Base64, zawierający nagłówek PlayReady 4.0.0.0

XAMAAAEAAQBSAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AcQA1AEgAZwBDAFQAagA0ADAAawBHAGUATgBWAGgAVABIADkARwBlAHgAdwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgB3ACsATwBaAFYAcgA4AHYAegByAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAHIAbwBmAGYAaQBjAGkAYQBsAHMAaQB0AGUALgBrAGUAeQBkAGUAbABpAHYAZQByAHkALgBtAGUAZABpAGEAcwBlAHIAdgBpAGMAZQBzAC4AdwBpAG4AZABvAHcAcwAuAG4AZQB0AC8AUABsAGEAeQBSAGUAYQBkAHkALwA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4AOAAuADAALgAxADcAMAA1AC4AMQA5ADwALwBJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQGBVAFQARQBTAD4APAAvAEQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPGA=

3.6.2. Forma

Nagłówek PlayReady w wersji 4.0.0.0 ma następującą składnię:

<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>

W poniższej tabeli opisano różne tagi.

Nazwa tagu Wymagane Opis
WRMHEADER Tak Najbardziej zewnętrzny element obiektu nagłówka. Może zawierać jeden element DATA i jeden atrybut wersji. Wersja nagłówka to "4.0.0.0".

Semantyka dla packager:
Za każdym razem, gdy firma Microsoft definiuje nowe obowiązkowe tagi lub atrybuty, nowy numer wersji jest skojarzony z tymi tagami lub atrybutami. Wersja nagłówka PlayReady musi być ustawiona na najwyższą wersję obowiązkowych tagów i atrybutów znajdujących się w nagłówku.

Semantyka klienta:
jeśli wersja jest większa niż wersja, dla której został napisany kod klienta, kod klienta musi zakończyć się niepowodzeniem, ponieważ oznacza to, że nagłówek zawiera obowiązkowe tagi, których klient nie rozumie. Jeśli wersja jest mniejsza lub równa tej, dla której został napisany kod klienta, kod klienta może bezpiecznie pominąć wszelkie tagi lub atrybuty, których nie rozumie.
DANE Tak Kontener na dane nagłówka, w tym zewnętrzne tagi.
PROTECTINFO Tak Określa typ szyfrowania przy użyciu elementów podrzędnych KEYLEN i ALGID .
KLUCZLEN Tak Określa rozmiar klucza zawartości. Należy ustawić wartość 16, jeśli wartość ALGID jest ustawiona na wartość "AESCTR" i 7, jeśli parametr ALGID ma wartość "COCKTAIL".
ALGID Tak Określa algorytm szyfrowania. Musi być ustawiona następująca wartość:

AESCTR: Odpowiada algorytmowi AES w trybie licznika.

KOKTAJL: Odpowiada algorytmowi Koktajl.
DZIECIAK Tak Zawiera wartość identyfikatora GUID klucza zakodowanego w formacie base64. Należy pamiętać, że ta wartość identyfikatora GUID (DWORD, WORD, WORD, tablica 8-BYTE) musi być w porządku bajtów little endian.
SUMA KONTROLNA Nie. Zawiera sumę kontrolną obliczaną przy użyciu wartości KID VALUE i klucza zawartości. Aby uzyskać szczegółowe informacje, zobacz sekcję Algorytm sumy kontrolnej kluczy.

Poprzednie wersje PlayReady traktowały to pole jako wymagane, dlatego powinno być uwzględnione w każdym nagłówku, który będzie używany przez poprzednią wersję PlayReady.
LA_URL Nie. Zawiera adres URL do nabycia licencji usługi internetowej. Dozwolone są tylko bezwzględne adresy URL.
LUI_URL Nie. Zawiera adres URL strony internetowej pozyskiwania licencji interaktywnej. Dozwolone są tylko bezwzględne adresy URL.
DS_ID Nie. Identyfikator usługi dla domeny.
CUSTOMATTRIBUTES ATRYBUTY Nie. Autor zawartości może dodać dowolny kod XML wewnątrz tego elementu. Kod firmy Microsoft nie działa na żadnych danych zawartych wewnątrz tego elementu.

Uwagi dotyczące wersji 4.0:

  • Wszystkie tagi i atrybuty XML w nagłówku PlayReady są definiowane przez firmę Microsoft. Jedynym wyjątkiem jest zawartość elementu CUSTOMATTRIBUTES . Deweloperzy aplikacji PlayReady pc nie mogą dodawać żadnych tagów niestandardowych poza elementem CUSTOMATTRIBUTES , ponieważ może to oznaczać konflikt z przyszłymi tagami, które definiuje firma Microsoft.
  • Kolejność elementów podrzędnych w elemencie kontenera nie ma znaczenia.
  • Pamiętaj, że nagłówek PlayReady nie zawiera tagu najwyższego poziomu wymaganego w dobrze sformułowanym kodzie ?XML XML.
  • Zaleca się, aby rozmiar tego pola nie przekraczał 1 KB.
  • SUMA KONTROLNA jest wymagana przez zestaw SDK playReady Server do wersji 1.2. Od wersji 1.5, pakiet PlayReady Server SDK traktuje sumę kontrolną jako opcjonalną. Zestaw PlayReady Porting Kit 1.2 w standardzie wymaga sumy kontrolnej. Zestaw PlayReady Porting Kit 2.0 uznaje suma kontrolna za opcjonalną.

4. Osadzony magazyn licencji (ELS)

Dobrym rozwiązaniem jest dodanie pustego osadzonego magazynu licencji do obiektu PlayReady w następujących warunkach:

  • Obiekt PlayReady ma zostać wstawiony do pliku zawartości.
  • Zawartość może być używana w kontekście domen PlayReady z wbudowanymi licencjami.

Dzięki temu klient PlayReady może dodatkowo osadzić licencję powiązaną z domeną w elemencie PlayReady, po prostu wypełniając istniejący osadzony magazyn licencji, i oszczędza konieczność ponownego przetworzenia nagłówka całego pliku obiektem PlayReady większym niż pierwotny.

Uwaga / Notatka

Nie powinno się uwzględniać pustego wbudowanego magazynu licencji w obiekcie PlayReady, który ma być wstawiony jako ciąg base-64 w manifeście klienta Smooth Streaming.

Uwaga / Notatka

Zalecany rozmiar to 10 KB.

5. Algorytm sumy kontrolnej klucza

Algorytm sum kontrolnych w nagłówku PlayReady ma na celu chronić przed niezgodnością kluczy. We wczesnych dniach drM utwory były szyfrowane niepoprawnie oznaczonymi kluczami. W rezultacie po odszyfrowaniu utworów odtwarzany był biały szum. A jeśli piosenki były odtwarzane wystarczająco głośno, sprzęt odtwarzania został zniszczony. Przy użyciu sumy kontrolnej klucz zawartości można zweryfikować jako klucz, który został użyty do zaszyfrowania pliku. Algorytm działa w następujący sposób:

W przypadku, gdy wartość ALGID jest ustawiona na "AESCBC", nie ma zdefiniowanego algorytmu kontrolnej sumy klucza. Atrybut CHECKSUM musi zostać pominięty.

W przypadku wartości ALGID ustawionej na wartość "AESCTR" 16-bajtowy identyfikator klucza jest szyfrowany przy użyciu 16-bajtowego klucza zawartości AES przy użyciu trybu EBC. Pierwsze 8 bajtów buforu jest wyodrębniane i zakodowane w formacie base64.

W przypadku wartości ALGID ustawionej na "COCKTAIL" wykonaj następujące kroki:

  1. Zostanie utworzony bufor 21 bajtów.

  2. Klucz zawartości jest umieszczany w buforze, a reszta buforu jest wypełniona zerami.

  3. Dla pięciu iteracji:

    a. buffer = SHA-1 (bufor).

  4. Pierwsze 7 bajtów buforu są wyodrębniane i zakodowane w formacie base64.

  5. Po wykonaniu tych kroków bajty zakodowane w formacie base64 są używane jako suma kontrolna.

6. NIETYPOWE ATRYBUTY

Dostawca usług może dodać zastrzeżony kod XML wewnątrz elementu CUSTOMATTRIBUTES nagłówka PlayReady. Wszystkie tagi używane wewnątrz elementu CUSTOMATTRIBUTES mają gwarancję, że nie będą zderzać się z przyszłymi tagami zdefiniowanymi przez firmę Microsoft.

Kod firmy Microsoft nie działa na żadnym kodzie XML wewnątrz tego elementu. Zaplecze dostawcy usług lub kod po stronie klienta są jedynymi, którzy zazwyczaj interpretują wartość tego elementu. Załóżmy na przykład, że usługa białej etykiety reprezentuje usługi front-end AAA, BBB, CCC. Taka usługa może szyfrować bibliotekę zawartości tylko raz (ponieważ jest to kosztowna operacja), ale gdy udostępnia zawartość użytkownikowi końcowemu, może ustawić atrybuty CUSTOMATTRIBUTES na nazwę określonej usługi frontonu, którą subskrybuje użytkownik końcowy. Gdy użytkownik końcowy zażąda licencji dla tej zawartości, umożliwia to usłudze white label określenie, której usługi front-endowej użytkownik końcowy jest subskrybentem, co pozwala na wydanie innej licencji.

Rozmiar tego pola nie powinien przekraczać 1 kilobajta (KB).