UNPKG

videojs-contrib-eme

Version:

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

7 lines 12.6 kB
/** * videojs-contrib-eme * @version 2.1.0 * @copyright 2017 * @license Apache-2.0 */ !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.videojsContribEme=e()}}(function(){return function e(t,n,i){function r(a,s){if(!n[a]){if(!t[a]){var d="function"==typeof require&&require;if(!s&&d)return d(a,!0);if(o)return o(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var f=n[a]={exports:{}};t[a][0].call(f.exports,function(e){var n=t[a][1][e];return r(n||e)},f,f.exports,e,t,n,i)}return n[a].exports}for(var o="function"==typeof require&&require,a=0;a<i.length;a++)r(i[a]);return r}({1:[function(e,t,n){(function(t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i="undefined"!=typeof window?window.videojs:void 0!==t?t.videojs:null,r=function(e){return e&&e.__esModule?e:{default:e}}(i),o=e("./playready"),a=function(e){var t=(e.video,e.keySystems),n=void 0;return Object.keys(t).forEach(function(e){var i={},r=t[e].audioContentType,o=t[e].videoContentType;r&&(i.audioCapabilities=[{contentType:r}]),o&&(i.videoCapabilities=[{contentType:o}]),n=n?n.catch(function(t){return navigator.requestMediaKeySystemAccess(e,[i])}):navigator.requestMediaKeySystemAccess(e,[i])}),n},s=function(e){var t=e.mediaKeys,n=e.initDataType,i=e.initData,o=e.options,a=e.getLicense,s=t.createSession();s.addEventListener("message",function(e){a(o,e.message).then(function(e){return s.update(e)}).catch(r.default.log.error.bind(r.default.log.error,"failed to get and set license"))},!1),s.generateRequest(n,i).catch(r.default.log.error.bind(r.default.log.error,"Unable to create or initialize key session"))},d=function(e){var t=e.video,n=e.initDataType,i=e.initData,r=e.options,o=e.getLicense;t.mediaKeysObject?s({mediaKeys:t.mediaKeysObject,initDataType:n,initData:i,options:r,getLicense:o}):t.pendingSessionData.push({initDataType:n,initData:i})},u=function(e){var t=e.video,n=e.certificate,i=e.createdMediaKeys,r=e.options,o=e.getLicense;t.mediaKeysObject=i,n&&i.setServerCertificate(n);for(var a=0;a<t.pendingSessionData.length;a++){var d=t.pendingSessionData[a];s({mediaKeys:t.mediaKeysObject,initDataType:d.initDataType,initData:d.initData,options:r,getLicense:o})}return t.pendingSessionData=[],t.setMediaKeys(i)},f=function(e){return function(t,n,i){(0,o.requestPlayreadyLicense)(e,n,function(e,t,n){if(e)return void i(e);i(null,n)})}},l=function(e){return function(t,n,i){r.default.xhr({uri:e,method:"POST",responseType:"arraybuffer",body:n,headers:{"Content-type":"application/octet-stream"}},function(e,t,n){if(e)return void i(e);i(null,n)})}},c=function(e){return function(t,n){return new Promise(function(i,r){e(t,n,function(e,t){e&&r(e),i(t)})})}},y=function(e,t){if("string"==typeof t&&(t={url:t}),!t.url&&!t.getLicense)throw new Error("Neither URL nor getLicense function provided to get license");return t.url&&!t.getLicense&&(t.getLicense="com.microsoft.playready"===e?f(t.url):l(t.url)),t},p=function(e){var t=e.video,n=e.initDataType,i=e.initData,o=e.options;if(void 0===t.mediaKeysObject){var s=function(){t.mediaKeysObject=null,t.pendingSessionData=[];var e=void 0,n=void 0,i=a({video:t,keySystems:o.keySystems});if(!i)return r.default.log.error("No supported key system found"),{v:void 0};i.then(function(i){return new Promise(function(r,a){if(t.keySystem=i.keySystem,n=y(i.keySystem,o.keySystems[i.keySystem]),!n.getCertificate)return void r(i);n.getCertificate(o,function(t,n){if(t)return void a(t);e=n,r(i)})})}).then(function(e){return e.createMediaKeys()}).then(function(i){return u({video:t,certificate:e,createdMediaKeys:i,options:o,getLicense:c(n.getLicense)})}).catch(r.default.log.error.bind(r.default.log.error,"Failed to create and initialize a MediaKeys object"))}();if("object"==typeof s)return s.v}d({video:t,initDataType:n,initData:i,options:o,getLicense:t.keySystem?c(y(t.keySystem,o.keySystems[t.keySystem]).getLicense):null})};n.standard5July2016=p}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./playready":4}],2:[function(e,t,n){(function(t){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(n,"__esModule",{value:!0});var r="undefined"!=typeof window?window.videojs:void 0!==t?t.videojs:null,o=i(r),a=e("global/window"),s=i(a),d=e("./utils");n.FAIRPLAY_KEY_SYSTEM="com.apple.fps.1_0";var u=function(e){var t=e.initData,n=e.id,i=e.cert;"string"==typeof n&&(n=(0,d.stringToUint16Array)(n));var r=0,o=new ArrayBuffer(t.byteLength+4+n.byteLength+4+i.byteLength),a=new DataView(o);new Uint8Array(o,r,t.byteLength).set(t),r+=t.byteLength,a.setUint32(r,n.byteLength,!0),r+=4;var s=new Uint16Array(o,r,n.length);return s.set(n),r+=s.byteLength,a.setUint32(r,i.byteLength,!0),r+=4,new Uint8Array(o,r,i.byteLength).set(i),new Uint8Array(o,0,o.byteLength)},f=function(e){var t=e.video,n=e.contentId,i=e.initData,r=e.cert,o=e.options,a=e.getLicense;return new Promise(function(e,d){if(t.webkitKeys||t.webkitSetMediaKeys(new s.default.WebKitMediaKeys("com.apple.fps.1_0")),!t.webkitKeys)return void d("Could not create MediaKeys");var f=t.webkitKeys.createSession("video/mp4",u({id:n,initData:i,cert:r}));if(!f)return void d("Could not create key session");f.contentId=n,f.addEventListener("webkitkeymessage",function(e){a(o,n,e.message,function(e,t){if(e)return void d(e);f.update(new Uint8Array(t))})}),f.addEventListener("webkitkeyadded",function(t){e(t)}),f.addEventListener("webkitkeyerror",function(e){d(e)})})},l=function(e){return function(t,n){o.default.xhr({uri:e,responseType:"arraybuffer"},function(e,t,i){if(e)return void n(e);n(null,new Uint8Array(i))})}},c=function(e,t){return(0,d.getHostnameFromUri)((0,d.uint8ArrayToString)(t))},y=function(e){return function(t,n,i,r){o.default.xhr({uri:e,method:"POST",responseType:"arraybuffer",body:i,headers:{"Content-type":"application/octet-stream"}},function(e,t,n){if(e)return void r(e);r(null,n)})}},p=function(e){var t=e.video,n=e.initData,i=e.options,r=i.keySystems["com.apple.fps.1_0"],a=r.getCertificate||l(r.certificateUri),s=r.getContentId||c,d=r.getLicense||y(r.licenseUri);return new Promise(function(e,t){a(i,function(n,i){if(n)return void t(n);e(i)})}).then(function(e){return f({video:t,cert:e,initData:n,getLicense:d,options:i,contentId:s(i,n)})}).catch(o.default.log.error.bind(o.default.log.error))};n.default=p}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./utils":5,"global/window":6}],3:[function(e,t,n){(function(t){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(n,"__esModule",{value:!0});var r="undefined"!=typeof window?window.videojs:void 0!==t?t.videojs:null,o=i(r),a=e("global/window"),s=i(a),d=e("./playready");n.PLAYREADY_KEY_SYSTEM="com.microsoft.playready";var u=function(e,t,n){var i=e.keySystems["com.microsoft.playready"];if("function"==typeof i.getKey)return void i.getKey(e,n.destinationURL,n.message.buffer,function(e,n){if(e)return void o.default.log.error("Unable to get key: "+e);t.update(n)});"string"==typeof i&&(i={url:i});var r=i.url||n.destinationURL;(0,d.requestPlayreadyLicense)(r,n.message.buffer,function(e,n){if(e)return void o.default.log.error("Unable to request key from url: "+r);t.update(new Uint8Array(n.body))})};n.addKeyToSession=u;var f=function(e,t,n){var i=e.msKeys.createSession("video/mp4",t);if(!i)return void o.default.log.error("Could not create key session.");i.addEventListener("mskeymessage",function(e){u(n,i,e)}),i.addEventListener("mskeyerror",function(e){o.default.log.error("Unexpected key error from key session with code: "+i.error.code+" and systemCode: "+i.error.systemCode)})};n.createSession=f,n.default=function(e){var t=e.video,n=e.initData,i=e.options;t.msKeys&&delete t.msKeys;try{t.msSetMediaKeys(new s.default.MSMediaKeys("com.microsoft.playready"))}catch(e){return void o.default.log.error("Unable to create media keys for PlayReady key system. Error: "+e.message)}f(t,n,i)}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./playready":4,"global/window":6}],4:[function(e,t,n){(function(t){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(n,"__esModule",{value:!0});var r="undefined"!=typeof window?window.videojs:void 0!==t?t.videojs:null,o=i(r),a=e("global/window"),s=i(a),d=function(e){var t=(new DOMParser).parseFromString(String.fromCharCode.apply(null,new Uint16Array(e)),"application/xml"),n=t.getElementsByTagName("HttpHeaders")[0],i={};if(n)for(var r=n.getElementsByTagName("name"),o=n.getElementsByTagName("value"),a=0;a<r.length;a++)i[r[a].childNodes[0].nodeValue]=o[a].childNodes[0].nodeValue;var d=t.getElementsByTagName("Challenge")[0],u=void 0;return d&&(u=s.default.atob(d.childNodes[0].nodeValue)),{headers:i,message:u}};n.getMessageContents=d;var u=function(e,t,n){var i=d(t),r=i.headers,a=i.message;o.default.xhr({uri:e,method:"post",headers:r,body:a,responseType:"arraybuffer"},n)};n.requestPlayreadyLicense=u}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"global/window":6}],5:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=function(e){for(var t=new ArrayBuffer(2*e.length),n=new Uint16Array(t),i=0;i<e.length;i++)n[i]=e.charCodeAt(i);return n};n.stringToUint16Array=i;var r=function(e){return String.fromCharCode.apply(null,new Uint16Array(e.buffer))};n.uint8ArrayToString=r;var o=function(e){var t=document.createElement("a");return t.href=e,t.hostname};n.getHostnameFromUri=o;var a=function(e,t){if(e===t)return!0;if(e.byteLength!==t.byteLength)return!1;for(var n=new DataView(e),i=new DataView(t),r=0;r<n.byteLength;r++)if(n.getUint8(r)!==i.getUint8(r))return!1;return!0};n.arrayBuffersEqual=a;var s=function(e){return e instanceof Uint8Array||e instanceof Uint16Array?e.buffer:e};n.arrayBufferFrom=s},{}],6:[function(e,t,n){(function(e){"undefined"!=typeof window?t.exports=window:void 0!==e?t.exports=e:"undefined"!=typeof self?t.exports=self:t.exports={}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],7:[function(e,t,n){(function(t){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(n,"__esModule",{value:!0});var r="undefined"!=typeof window?window.videojs:void 0!==t?t.videojs:null,o=i(r),a=e("./eme"),s=e("./fairplay"),d=i(s),u=e("./ms-prefixed"),f=i(u),l=e("./utils"),c=function(e,t){for(var n=0;n<e.length;n++)if(e[n].initData&&(0,l.arrayBuffersEqual)((0,l.arrayBufferFrom)(e[n].initData),(0,l.arrayBufferFrom)(t)))return!0;return!1};n.hasSession=c;var y=function(e,t,n){t&&t.keySystems&&(c(n,e.initData)||(n.push({initData:e.initData}),(0,a.standard5July2016)({video:e.target,initDataType:e.initDataType,initData:e.initData,options:t})))};n.handleEncryptedEvent=y;var p=function(e,t){if(t.keySystems&&t.keySystems[s.FAIRPLAY_KEY_SYSTEM])return(0,d.default)({video:e.target,initData:e.initData,options:t})};n.handleWebKitNeedKeyEvent=p;var v=function(e,t,n){t.keySystems&&t.keySystems[u.PLAYREADY_KEY_SYSTEM]&&(n.reduce(function(e,t){return e||t.playready},!1)||(n.push({playready:!0}),(0,f.default)({video:e.target,initData:e.initData,options:t})))};n.handleMsNeedKeyEvent=v;var g=function(e){var t=e.src();t!==e.eme.activeSrc&&(e.eme.activeSrc=t,e.eme.sessions=[])};n.setupSessions=g;var m=function(e,t){"video"===e.$(".vjs-tech").tagName.toLowerCase()&&(g(e),e.tech_.el_.addEventListener("encrypted",function(n){g(e),y(n,o.default.mergeOptions(t,e.currentSource()),e.eme.sessions)}),e.tech_.el_.addEventListener("webkitneedkey",function(n){g(e),p(n,o.default.mergeOptions(t,e.currentSource()))}),o.default.browser.IS_EDGE||e.tech_.el_.addEventListener("msneedkey",function(n){g(e),v(n,o.default.mergeOptions(t,e.currentSource()),e.eme.sessions)}))},w=function(){var e=this,t=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.ready(function(){m(e,o.default.mergeOptions({},t))}),this.eme.options=t};(o.default.registerPlugin||o.default.plugin)("eme",w),n.default=w}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./eme":1,"./fairplay":2,"./ms-prefixed":3,"./utils":5}]},{},[7])(7)});