videojs-contrib-eme
Version:
Supports Encrypted Media Extensions for playback of encrypted content in Video.js
69 lines (54 loc) • 2.1 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', {
value: true
});
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _videoJs = require('video.js');
var _videoJs2 = _interopRequireDefault(_videoJs);
var _globalWindow = require('global/window');
var _globalWindow2 = _interopRequireDefault(_globalWindow);
/**
* 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
*/
var getMessageContents = function getMessageContents(message) {
var xml = new DOMParser().parseFromString(
// TODO do we want to support UTF-8?
String.fromCharCode.apply(null, new Uint16Array(message)), 'application/xml');
var headersElement = xml.getElementsByTagName('HttpHeaders')[0];
var headers = {};
if (headersElement) {
var headerNames = headersElement.getElementsByTagName('name');
var headerValues = headersElement.getElementsByTagName('value');
for (var i = 0; i < headerNames.length; i++) {
headers[headerNames[i].childNodes[0].nodeValue] = headerValues[i].childNodes[0].nodeValue;
}
}
var challengeElement = xml.getElementsByTagName('Challenge')[0];
var challenge = undefined;
if (challengeElement) {
challenge = _globalWindow2['default'].atob(challengeElement.childNodes[0].nodeValue);
}
return {
headers: headers,
message: challenge
};
};
exports.getMessageContents = getMessageContents;
var requestPlayreadyLicense = function requestPlayreadyLicense(url, messageBuffer, callback) {
var _getMessageContents = getMessageContents(messageBuffer);
var headers = _getMessageContents.headers;
var message = _getMessageContents.message;
_videoJs2['default'].xhr({
uri: url,
method: 'post',
headers: headers,
body: message,
responseType: 'arraybuffer'
}, callback);
};
exports.requestPlayreadyLicense = requestPlayreadyLicense;