Delen via


Mp4-inhoud verpakken voor PlayReady

Inhoudsversleuteling

De packager moet de inhoud versleutelen. Elke versleutelingsindeling die gebruikmaakt van AES-128-sleutels die worden gebruikt in de CTR-modus of CBC-modus, wordt toegestaan door de nalevingsregels.

Indelingen op basis van MP4 worden aanbevolen. CMAF is de geprefereerde MP4-gebaseerde indeling voor PlayReady-clients, Windows 10 en Xbox One.

Microsoft ondersteunt de twee gemeenschappelijke versleutelingsschema's die brede acceptatie van de industrie hebben: de cbcs-AES-CBC en cenc AES-CTR beveiligingsschema's. Zie ISO/IEC FDIS 23001-7:2016 "Information technology – MPEG systems technologies – Part 7: Common encryption in ISO base media file format files"

Zie Inhoudsversleuteling en -levering voor meer informatie

Een PlayReady-header invoegen in de inhoud

De packager moet de PlayReady Header die deze heeft gegenereerd, invoegen in de inhoud. Deze wordt meestal ingevoegd in de koptekst van de inhoudsbestanden of in het manifest van streamingassets.

Deze header bevat standaardwaarden voor informatie die nodig is voor een PlayReady-client om een licentie aan te vragen voor dit specifieke inhoudsstuk. Een PlayReady-client moet bijvoorbeeld weten welke sleutel-id's (KID's) in de asset worden gebruikt, zodat deze de sleutelwaarden kan aanvragen. Het moet ook het adres weten van een licentieserver die deze licentie levert. Optioneel moet u weten welke webpagina aan de gebruiker moet worden weergegeven voor het geval een licentieaanvraag wordt geweigerd door de licentieserver (de gebruiker kan worden omgeleid naar een betalingspagina).

Hier volgt een voorbeeld van een PlayReady-header

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

Wanneer een PlayReady-client beveiligde inhoud moet afspelen, wordt er een licentie aangevraagd voor de inhoud als deze nog geen inhoud heeft. Om de licentieaanvraag te initiëren, kan de app-ontwikkelaar de app hebben ingericht met vastgelegde of dynamische waarden voor de KID-matrix, LA_URL en het gedrag in het geval van een weigering van een licentieaanvraag. De app heeft de standaardwaarden voor KID of LA_URL overschreven. Als de ontwikkelaar dat niet heeft, wordt verwacht dat de client de licentieaanvraag uitvoert op basis van de standaardwaarden in de inhoudskop zelf.

Voor MP4 ISO-bestanden raadt Microsoft aan de ISO-indelingsspecificatie te volgen en de PlayReady-header in te voegen in een pssh-vak.

Voorbeeld van een MP4-bestand met een PlayReady-object

In de volgende afbeelding ziet u een gesegmenteerd MP4-bestand met een PlayReady-object dat een PlayReady-header bevat:

PlayReady-header in MP4

Dit is de HEX-weergave van dit bestand:

Hex-dump van PlayReady-object

De volgende afbeelding toont een MP4-bestand met segmenten en een PlayReady-object dat een PlayReady-header bevat, en een ander PlayReady-object dat een PlayReady Embedded-licentieopslag bevat.

PlayReady Header en ELS in MP4

Voor adaptieve streamingassets raadt Microsoft aan de PlayReady-header in het manifest van de asset in te voegen.

Voorbeeld van een MPEG-DASH-manifest met een PlayReady-header

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

Zie ook

Ondersteunde indelingen

PlayReady-testinhoud