stream-display
Version:
Wrapper around getDisplayMedia to capture screen as a sequence of ImageData objects
3 lines (2 loc) • 4.06 kB
JavaScript
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).StreamDisplay=e()}(this,(function(){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var e,n=function(t,e){return t(e={exports:{}},e.exports),e.exports}((function(e,n){var a=t&&t.__awaiter||function(t,e,n,a){return new(n||(n=Promise))((function(r,i){function o(t){try{c(a.next(t))}catch(t){i(t)}}function s(t){try{c(a.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,s)}c((a=a.apply(t,e||[])).next())}))},r=t&&t.__generator||function(t,e){var n,a,r,i,o={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;o;)try{if(n=1,a&&(r=2&i[0]?a.return:i[0]?a.throw||((r=a.return)&&r.call(a),0):a.next)&&!(r=r.call(a,i[1])).done)return r;switch(a=0,r&&(i=[2&i[0],r.value]),i[0]){case 0:case 1:r=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,a=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(r=o.trys,(r=r.length>0&&r[r.length-1])||6!==i[0]&&2!==i[0])){o=0;continue}if(3===i[0]&&(!r||i[1]>r[0]&&i[1]<r[3])){o.label=i[1];break}if(6===i[0]&&o.label<r[1]){o.label=r[1],r=i;break}if(r&&o.label<r[2]){o.label=r[2],o.ops.push(i);break}r[2]&&o.ops.pop(),o.trys.pop();continue}i=e.call(t,o)}catch(t){i=[6,t],a=0}finally{n=r=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,s])}}};Object.defineProperty(n,"__esModule",{value:!0});var i={video:{cursor:"never"},audio:!1},o=function(){function t(e,n){var o=this;void 0===n&&(n={}),this.intervalId=0,this.scanInterval=t.DEFAULT_SCAN_INTERVAL_MS,this._isCapturing=!1,this.streamHeight=0,this.streamWidth=0,this.startCapture=function(){return a(o,void 0,void 0,(function(){var t,e;return r(this,(function(n){switch(n.label){case 0:return t=navigator.mediaDevices,e=this.video,[4,t.getDisplayMedia(i)];case 1:return e.srcObject=n.sent(),this.video.play(),this.setupCanvas(),this.stream(),this.intervalId=window.setInterval(this.stream,this.scanInterval),this._isCapturing=!0,[2]}}))}))},this.stopCapture=function(){window.clearInterval(o.intervalId),o.video.srcObject.getTracks().forEach((function(t){return t.stop()})),o._isCapturing=!1},this.setupCanvas=function(){var t=o.video.srcObject.getVideoTracks()[0].getSettings(),e=t.height,n=t.width;o.streamWidth=n||0,o.streamHeight=e||0,o.canvas.height=o.streamHeight,o.canvas.width=o.streamWidth},this.stream=function(){o.drawVideoToCanvas(),o.callback(o.getImageData())},this.video=document.createElement("video"),this.canvas=document.createElement("canvas");var s=this.canvas.getContext("2d");if(null==s)throw new Error("Cannot initialize canvas context");this.canvasContext=s,this.callback=e;var c=(n||{}).scanInterval;this.scanInterval=c||this.scanInterval,t.validateScanInterval(this.scanInterval)}return Object.defineProperty(t.prototype,"isCapturing",{get:function(){return this._isCapturing},enumerable:!1,configurable:!0}),t.prototype.drawVideoToCanvas=function(){var t=this,e=t.streamHeight,n=t.streamWidth,a=t.video;t.canvasContext.drawImage(a,0,0,n,e)},t.prototype.getImageData=function(){var t=this,e=t.streamHeight,n=t.streamWidth;return t.canvasContext.getImageData(0,0,n,e)},t.validateScanInterval=function(t){if(!(t>=1e3))throw new Error(" [stream-display] Scan interval is set under 1000ms. Will be overridden by the browser to 1000ms when tab is in background")},t.DEFAULT_SCAN_INTERVAL_MS=1e3,t}();n.default=o}));return(e=n)&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}));
//# sourceMappingURL=stream-display.js.map