Erstellen eines DASH-DRM-Manifests für den Brightcove-Player
Überblick
Das MPEG-DASH-Manifest (.MPD-Datei) beschreibt ein Video mit MPEG-DASH-Wiedergaben, die mit Common Encryption (CENC) verschlüsselt wurden und mit Playready-, Widevine- und Marlin-Inhaltsentschlüsselungsmodulen (CDMs) kompatibel sind. Je nach verwendetem Browser werden vom Web-Player von Brightcove nur Playready und Widevine unterstützt.
Browser-Unterstützung
Die Wiedergabe funktioniert nur auf unterstützten Desktop-Macintosh- und Windows-Browsern.
Browsertypen | Wiedergabetechnologie | DRM-Typ |
---|---|---|
Chrome 34+ | Native MSE / EME-Wiedergabe mit Shaka-Player * | Weinrebe |
MS Edge unter Windows 10 | Native MSE / EME-Wiedergabe mit Shaka-Player * | Spielbereit |
Alle anderen Browser, einschließlich Safari, IE und Firefox | Silverlight Plugin | Spielbereit |
Externer DRM-Inhalt
Anforderungen für DRM-Inhalte, die außerhalb der Brightcove Video Cloud erstellt wurden
Um Videoinhalte mit DRM-Schutz abzuspielen, die mit dem Brightcove Player angewendet werden, muss Ihr Video gemäß diesen Richtlinien codiert werden.
- Muss ein MPEG-DASH-Live-Profil sein (nicht "on-demand", nicht "hbbtv")
- Alle Wiedergaben müssen das gleiche Keyframe-Intervall und die gleiche Framerate haben (aus Kompatibilitätsgründen mit unserem Silverlight-Plugin).
- Muss mit CENC (Common Encryption) verschlüsselt sein und die Unterstützung für Playready und Widevine muss aktiviert sein
- Playready- und Widevine-Lizenzserver-URLs müssen angegeben werden. Die URL des Playready-Lizenzservers muss in der Manifestdatei (.mpd) enthalten sein. Die Widevine-Lizenzserver-URL kann im Manifest oder als Parameter in Javascript angegeben werden
- Der bereits vorhandene Initialisierungsvektor muss 8 Byte betragen.
Beispielmanifest
Hier ist ein Beispiel für ein MPEG-DASH-Manifest (MPD-Datei), das von Video Cloud generiert wurde.
<?xml version="1.0" ?>
<MPD mediaPresentationDuration="PT1M28S" minBufferTime="PT2.00S" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:mspr="urn:microsoft:playready" xmlns:mas="urn:marlin:mas:1-0:services:schemas:mpd">
<Period>
<AdaptationSet mimeType="audio/mp4" segmentAlignment="true" startWithSAP="1">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="5d97af80-2442-4fe9-b1aafc24ecb6fa28" xmlns:cenc="urn:mpeg:cenc:2013"/>
<ContentProtection schemeIdUri="urn:uuid:5E629AF5-38DA-4063-8977-97FFBD9902D4">
<mas:MarlinContentIds>
<mas:MarlinContentId>urn:marlin:kid:5d97af8024424fe9b1aafc24ecb6fa28</mas:MarlinContentId>
</mas:MarlinContentIds>
</ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:79f0049a-4098-8642-ab92-e65be0885f95">
<mspr:pro>jAIAAAEAAQCCAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AZwBLACsAWABYAFUASQBrADYAVQArAHgAcQB2AHcAawA3AEwAYgA2AEsAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBVAGQAawBLAGIASQBBAHgAbgBOAGcAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAHIAbABpAGMALgBiAHIAaQBnAGgAdABjAG8AdgBlAC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC8AMwA3ADIAMwA0ADkANgAyADcANwAwADAAMQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</mspr:pro>
</ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" bc:licenseAcquisitionUrl="https://wvlic.brightcove.com/proxy/4324249227001" xmlns:bc="urn:brightcove:2015"/>
<SegmentTemplate duration="2000" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/seg-$Number$.m4f" startNumber="0" timescale="1000"/>
<Representation bandwidth="43241" id="4324360320001/audio/und" codecs="mp4a.40.5" audioSamplingRate="22050">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
</Representation>
</AdaptationSet>
<AdaptationSet mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" scanType="progressive">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="5d97af80-2442-4fe9-b1aafc24ecb6fa28" xmlns:cenc="urn:mpeg:cenc:2013"/>
<ContentProtection schemeIdUri="urn:uuid:5E629AF5-38DA-4063-8977-97FFBD9902D4">
<mas:MarlinContentIds>
<mas:MarlinContentId>urn:marlin:kid:5d97af8024424fe9b1aafc24ecb6fa28</mas:MarlinContentId>
</mas:MarlinContentIds>
</ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:79f0049a-4098-8642-ab92-e65be0885f95">
<mspr:pro>jAIAAAEAAQCCAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AZwBLACsAWABYAFUASQBrADYAVQArAHgAcQB2AHcAawA3AEwAYgA2AEsAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBVAGQAawBLAGIASQBBAHgAbgBOAGcAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAHIAbABpAGMALgBiAHIAaQBnAGgAdABjAG8AdgBlAC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC8AMwA3ADIAMwA0ADkANgAyADcANwAwADAAMQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</mspr:pro>
</ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" bc:licenseAcquisitionUrl="https://wvlic.brightcove.com/proxy/4324249227001" xmlns:bc="urn:brightcove:2015"/>
<SegmentTemplate duration="2000" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/seg-$Number$.m4f" startNumber="0" timescale="1000"/>
<Representation bandwidth="237182" id="4324360320001/video/1" codecs="avc1.42c015" frameRate="30" width="400" height="300"/>
<Representation bandwidth="601518" id="4324360321001/video/1" codecs="avc1.42c015" frameRate="30" width="400" height="300"/>
<Representation bandwidth="981387" id="4324360323001/video/1" codecs="avc1.42c016" frameRate="30" width="480" height="360"/>
<Representation bandwidth="1507704" id="4324360324001/video/1" codecs="avc1.42c01e" frameRate="30" width="640" height="480"/>
<Representation bandwidth="2102387" id="4324360325001/video/1" codecs="avc1.42c01e" frameRate="30" width="640" height="480"/>
<Representation bandwidth="2991373" id="4324360326001/video/1" codecs="avc1.42c01e" frameRate="30" width="640" height="480"/>
</AdaptationSet>
</Period>
</MPD>
Lizenzinformationen
Um einen eigenen DASH-DRM-Stream zu erstellen, der mit dem Brightcove Player kompatibel ist, muss Ihr Codierungssystem ein ähnliches Manifest (MPD) wie das oben angegebene erstellen, das Informationen zur DRM-Lizenz enthält. Ihre MPD kann die Marlin-Abschnitte weglassen, die heute vom Brightcove-Player nicht verwendet werden.
Angeben des PlayReady-Lizenzschlüssels
Für den Brightcove-Player müssen die PlayReady-Lizenzinformationen als Base-64-codierte Zeichenfolge in die MPD eingebettet sein. Sie können den Wert in diesem Beispiel in der sehen <mspr:pro>
Tag oben. Die codierten Schlüsselinformationen werden unten decodiert angezeigt. Informationen zum Format des PlayReady-Headers finden Sie hier: http://www.microsoft.com/playready/documents/.
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0"><DATA><PROTECTINFO><KEYLEN>16</KEYLEN><ALGID>AESCTR</ALGID></PROTECTINFO><KID>gK+XXUIk6U+xqvwk7Lb6KA==</KID><CHECKSUM>UdkKbIAxnNg=</CHECKSUM><LA_URL>https://prlic.brightcove.com/license/3723496277001</LA_URL></DATA></WRMHEADER>
Angeben der Widevine-Lizenz-URL
Beachten Sie hier, dass die URL des Widevine-Lizenzservers in der MPD in dieser Zeile angegeben ist:
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" bc:licenseAcquisitionUrl="https://wvlic.brightcove.com/proxy/4324249227001" xmlns:bc="urn:brightcove:2015"/>
Alternativ können Sie die Widevine-Lizenzserver-URL als Parameter für den Player in JavaScript auf der Seite angeben, auf der sie eingebettet ist. Hier ist ein Beispiel für das Aufrufen des Brightcove-Players unter Angabe eines Lizenzservers mit der Quell-URL:
myPlayer.src({
"src": sourceUrl,
"type": "application/dash+xml",
"keySystemOptions": [{
"name": "com.widevine.alpha",
"options": {"licenseUrl": licenseServerUrl}
}]
});
Vorladen
Es gibt eine Reihe von Einstellungen, mit denen Sie das Vorladen von Videodaten steuern können. Siehe die Player-Konfigurationshandbuch, Vorspannung Sektion für vollständige Details. Das Standardverhalten ist, dass der Brightcove Player die Videometadaten (z. B. Titel und Dauer) zusammen mit einigen Sekunden Videodaten vorlädt. Wenn Sie das Verhalten beim Vorladen ändern möchten, können Sie in Ihrer Player-Konfiguration die folgende Option angeben:
"preload": "none"
Hier ist ein Beispiel für eine Player-Konfiguration mit dieser Einstellung:
{
"account_id": "3723496277001",
"autoadvance": 0,
"embed_id": "default",
"player": {
"template": {
"name": "single-video-template",
"version": "1.14.26"
}
},
"player_id": "82f443bc-82f5-4074-bf9c-de2920c89b24",
"player_name": "DRM Demo",
"preload": "none",
"scripts": [
"https://players.brightcove.net/videojs-dash/videojs-dash.min.js"
],
"stylesheets": [
"https://players.brightcove.net/videojs-dash/videojs-dash.css"
],
"video_cloud": {
"policy_key": "BCpkADawqM2ENcgyE-9...EFGSP8b5dC",
"video": null
}
}