Udostępnij za pośrednictwem


Jak spakować zawartość w formacie MP4 dla PlayReady

Szyfrowanie zawartości

Pakowacz musi zaszyfrować zawartość. Dowolny format szyfrowania korzystający z kluczy AES-128 używanych w trybie CTR lub trybie CBC jest dozwolony przez reguły zgodności.

Zalecane są formaty oparte na formacie MP4. CMAF jest preferowanym formatem MP4 dla klientów PlayReady, Windows 10 i Xbox One.

Firma Microsoft obsługuje dwa typowe schematy szyfrowania, które mają szeroką akceptację w branży — systemy ochrony AES-CBC "cbcs AES-CTR" i "cenc". Zobacz ISO/IEC FDIS 23001-7:2016 "Technologia informacyjna – technologie systemów MPEG – część 7: Wspólne szyfrowanie w plikach formatu plików nośników podstawowych ISO"

Aby uzyskać więcej informacji, zobacz Szyfrowanie zawartości i dostarczanie

Wstawianie nagłówka PlayReady do zawartości

Program packager musi wstawić wygenerowany nagłówek PlayReady w zawartości. Zazwyczaj jest on wstawiany w nagłówku plików zawartości lub w manifeście zasobów przesyłania strumieniowego.

Ten nagłówek zawiera wartości domyślne informacji, które są wymagane przez klienta PlayReady do żądania licencji dla tego konkretnego elementu zawartości. Na przykład klient PlayReady musi wiedzieć, jakie identyfikatory kluczy (KID) są używane w zasobie, aby mógł zażądać wartości kluczy. Musi również znać adres serwera licencji, który dostarczy tę licencję. Opcjonalnie musi wiedzieć, która strona internetowa ma być renderowana użytkownikowi w przypadku odrzucenia żądania licencji przez serwer licencji (użytkownik może zostać skierowany do strony płatności).

Oto przykład nagłówka PlayReady

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID ALGID="AESCTR" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="></KID>
      </KIDS>
    </PROTECTINFO>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <LUI_URL>http://www.contoso.com/pay/</LUI_URL>
  </DATA>
</WRMHEADER>

Gdy klient PlayReady musi odtwarzać chronioną zawartość, zażąda licencji na zawartość, jeśli jeszcze jej nie ma. Aby zainicjować żądanie licencji, deweloper aplikacji mógł wyposażyć aplikację w stałe lub dynamiczne wartości dla tablicy KID, adresu URL LA oraz określone zachowanie w przypadku odmowy żądania licencji. Aplikacja przesłoniła wartości domyślne KID lub LA_URL. Jeśli deweloper tego nie zrobił, klient powinien złożyć żądanie licencji, bazując na wartościach domyślnych, które są w samym nagłówku zawartości.

W przypadku plików ISO MP4 firma Microsoft zaleca stosowanie specyfikacji formatu ISO i wstawianie nagłówka PlayReady w polu "pssh".

Przykład pliku MP4 zawierającego obiekt PlayReady

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

Nagłówek PlayReady w formacie MP4

Oto widok HEX tego pliku:

Zrzut szesnastkowy obiektu PlayReady

Na poniższej ilustracji przedstawiono segmentowany plik MP4 zawierający obiekt PlayReady z nagłówkiem PlayReady oraz inny obiekt PlayReady z wbudowanym magazynem licencji PlayReady.

PlayReady Header i ELS w formacie MP4

W przypadku zasobów adaptacyjnego przesyłania strumieniowego firma Microsoft zaleca wstawienie nagłówka PlayReady w manifeście zasobu.

Przykład manifestu MPEG-DASH zawierającego nagłówek PlayReady

<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" xmlns:cenc="urn:mpeg:cenc:2013" xmlns:mspr="urn:microsoft:playready" mediaPresentationDuration="PT10M56.907S" minBufferTime="PT4S">
  <Period>
    <AdaptationSet id="1" group="1" profiles="ccff" bitstreamSwitching="true" segmentAlignment="true" contentType="video" mimeType="video/mp4" codecs="avc1.640028" maxWidth="1920" maxHeight="1080" startWithSAP="1">

        <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="10000000-1000-1000-1000-100000000001"/>
        <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value="2.0" cenc:default_KID="10000000-1000-1000-1000-100000000001">
            <mspr:pro>PABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMwAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcAA6AC8ALwBlAHgAcABlAHIAaQBtAGUAbgB0AGEAbAAxAC4AYQB6AHUAcgBlAHcAZQBiAHMAaQB0AGUAcwAuAG4AZQB0AC8AcgBpAGcAaAB0AHMAbQBhAG4AYQBnAGUAcgAuAGEAcwBtAHgAPwBjAGYAZwA9ACgAYwBrADoAVwAzADEAYgBmAFYAdAA5AFcAMwAxAGIAZgBWAHQAOQBXADMAMQBiAGYAUQA9AD0ALABjAGsAdAA6AEEARQBTADEAMgA4AEIAaQB0AEMAQgBDACkAPAAvAEwAQQBfAFUAUgBMAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAFMAPgA8AEsASQBEACAAQQBMAEcASQBEAD0AIgBBAEUAUwBDAEIAQwAiACAAVgBBAEwAVQBFAD0AIgBBAEEAQQBBAEUAQQBBAFEAQQBCAEEAUQBBAEIAQQBBAEEAQQBBAEEAQQBRAD0APQAiAD4APAAvAEsASQBEAD4APAAvAEsASQBEAFMAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</mspr:pro>
        </ContentProtection>

        <SegmentTemplate timescale="10000000" media="video/bbb_sunflower_1080p_60fps_normal_VIDEO$Number$.mp4"  initialization="video/bbb_sunflower_1080p_60fps_normal_VIDEO0.mp4">
          <SegmentTimeline>
            <S d="83166700" />
            <S d="79166700" />
            <S d="80333300" />
            <S d="73000000" />
          </SegmentTimeline>
        </SegmentTemplate>
      <Representation id="video" bandwidth="10646158" width="1920" height="1080"/>
    </AdaptationSet>
  </Period>
</MPD>

Zobacz także

Obsługiwane formaty

Zawartość testowa PlayReady