UNPKG

videojs-contrib-eme

Version:

Supports Encrypted Media Extensions for playback of encrypted content in Video.js

105 lines (78 loc) 2.96 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: playready.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: playready.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>import videojs from 'video.js'; import window from 'global/window'; /** * Parses the EME key message XML to extract HTTP headers and the Challenge element to use * in the PlayReady license request. * * @param {ArrayBuffer} message key message from EME * @return {Object} an object containing headers and the message body to use in the * license request */ export const getMessageContents = (message) => { const xml = (new window.DOMParser()).parseFromString( // TODO do we want to support UTF-8? String.fromCharCode.apply(null, new Uint16Array(message)), 'application/xml'); const headersElement = xml.getElementsByTagName('HttpHeaders')[0]; const headers = {}; if (headersElement) { const headerNames = headersElement.getElementsByTagName('name'); const headerValues = headersElement.getElementsByTagName('value'); for (let i = 0; i &lt; headerNames.length; i++) { headers[headerNames[i].childNodes[0].nodeValue] = headerValues[i].childNodes[0].nodeValue; } } const challengeElement = xml.getElementsByTagName('Challenge')[0]; let challenge; if (challengeElement) { challenge = window.atob(challengeElement.childNodes[0].nodeValue); } return { headers, message: challenge }; }; export const requestPlayreadyLicense = (url, messageBuffer, callback) => { const { headers, message } = getMessageContents(messageBuffer); videojs.xhr({ uri: url, method: 'post', headers, body: message, responseType: 'arraybuffer' }, callback); }; </code></pre> </article> </section> </div> <nav> <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#eme">eme</a></li><li><a href="global.html#getMessageContents">getMessageContents</a></li><li><a href="global.html#initializeMediaKeys">initializeMediaKeys</a></li><li><a href="global.html#onPlayerReady">onPlayerReady</a></li><li><a href="global.html#setupSessions">setupSessions</a></li></ul> </nav> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.6.0-dev</a> on Tue Oct 16 2018 18:15:17 GMT-0400 (EDT) </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>