Création d'un manifeste DASH DRM pour le lecteur Brightcove
Aperçu
Le manifeste MPEG-DASH (fichier .MPD) décrit une vidéo avec des rendus MPEG-DASH cryptés à l'aide du cryptage commun (CENC) et est compatible avec les modules de décryptage de contenu (CDM) Playready, Widevine et Marlin. Seuls Playready et Widevine sont pris en charge par le lecteur Web de Brightcove, selon le navigateur utilisé.
Prise en charge du navigateur
La lecture ne fonctionne que sur les navigateurs Macintosh et Windows de bureau pris en charge.
Types de navigateurs | Technologie de lecture | Type de DRM |
---|---|---|
Chrome 34+ | Lecture native MSE/EME à l'aide de Shaka-Player* | Widevine |
MS Edge sur Windows 10 | Lecture native MSE/EME à l'aide de Shaka-Player* | PlayReady |
Tous les autres navigateurs, y compris Safari, IE et Firefox | Plugin Silverlight | PlayReady |
Contenu DRM externe
Conditions requises pour le contenu DRM créé en dehors de Brightcove Video Cloud
Afin de lire du contenu vidéo avec la protection DRM appliquée à l'aide du Brightcove Player, votre vidéo doit être encodée en suivant ces directives.
- Doit être un profil MPEG-DASH Live (pas "à la demande", ni "hbbtv")
- Tous les rendus doivent avoir le même intervalle d'images clés et la même fréquence d'images (pour la compatibilité avec notre plugin Silverlight)
- Doit être chiffré à l'aide du chiffrement commun (CENC) et avoir la prise en charge de Playready et Widevine activée
- Les URL des serveurs de licences Playready et Widevine doivent être fournies. L'URL du serveur de licences Playready doit être incluse dans le fichier manifeste (.mpd). L'URL du serveur de licences Widevine peut être fournie dans le manifeste ou en tant que paramètre en Javascript
- Le vecteur d'initialisation Playready doit être de 8 octets.
Exemple de manifeste
Voici un exemple de manifeste MPEG-DASH (fichier .MPD) généré par Video Cloud.
<?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>
Informations sur la licence
Afin de créer votre propre flux DASH-DRM compatible avec Brightcove Player, votre système d'encodage doit créer un manifeste (MPD) similaire à celui fourni ci-dessus qui comprend des informations sur la licence DRM. Votre MPD peut omettre les sections Marlin qui ne sont pas utilisées par le Brightcove Player aujourd'hui.
Spécification de la clé de licence PlayReady
Brightcove Player nécessite que les informations de licence PlayReady soient intégrées dans le MPD sous la forme d'une chaîne codée en base 64. Vous pouvez voir la valeur dans cet exemple dans le <mspr:pro>
balise ci-dessus. Les informations de clé codées sont affichées décodées ci-dessous. Des informations sur le format de l'en-tête PlayReady peuvent être trouvées ici: 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>
Spécification de l'URL de la licence Widevine
Notez ici que l'URL du serveur de licences Widevine est fournie dans le MPD dans cette ligne:
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" bc:licenseAcquisitionUrl="https://wvlic.brightcove.com/proxy/4324249227001" xmlns:bc="urn:brightcove:2015"/>
Vous pouvez également fournir l'URL du serveur de licences Widevine en tant que paramètre au lecteur en JavaScript dans la page où il est intégré. Voici un exemple de la façon d'appeler le Brightcove Player en spécifiant un serveur de licences avec l'URL source:
myPlayer.src({
"src": sourceUrl,
"type": "application/dash+xml",
"keySystemOptions": [{
"name": "com.widevine.alpha",
"options": {"licenseUrl": licenseServerUrl}
}]
});
Préchargement
Il existe un certain nombre de paramètres à partir desquels vous pouvez choisir de contrôler le préchargement des données vidéo. Voir le Guide de configuration du lecteur, précharge section pour plus de détails. Le comportement par défaut est que Brightcove Player préchargera les métadonnées vidéo (par exemple le titre et la durée), ainsi que plusieurs secondes de données vidéo. Si vous souhaitez modifier le comportement de préchargement, vous pouvez spécifier l'option suivante dans la configuration de votre lecteur:
"preload": "none"
Voici un exemple de configuration de lecteur avec ce paramètre:
{
"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
}
}