UNPKG

videojs-contrib-eme

Version:

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

69 lines (54 loc) 2.1 kB
'use strict'; 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;