videojs-contrib-eme
Version:
Supports Encrypted Media Extensions for playback of encrypted content in Video.js
105 lines (78 loc) • 2.96 kB
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 < 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>