zego-express-engine-webrtc
Version:
zego webrtc express sdk
1 lines • 19.9 kB
JavaScript
!function(t,n){if("object"==typeof exports&&"object"==typeof module)module.exports=n(require("long"));else if("function"==typeof define&&define.amd)define(["long"],n);else{var i="object"==typeof exports?n(require("long")):n(t.long);for(var r in i)("object"==typeof exports?exports:t)[r]=i[r]}}("undefined"!=typeof self?self:this,(function(t){return function(){"use strict";var n={6994:function(n){n.exports=t}},i={};function r(t){var e=i[t];if(void 0!==e)return e.exports;var o=i[t]={exports:{}};return n[t](o,o.exports,r),o.exports}r.d=function(t,n){for(var i in n)r.o(n,i)&&!r.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:n[i]})},r.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};r.r(e),r.d(e,{StreamCompositor:function(){return C}});!function(){function t(t){this.zegoStream=t}Object.defineProperty(t.prototype,"active",{get:function(){return this.zegoStream.active},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"id",{get:function(){return this.zegoStream.id},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"videoCaptureStream",{get:function(){return this.zegoStream.originVideoStream},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"audioCaptureStream",{get:function(){return this.zegoStream.originAudioStream},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"stream",{get:function(){return this.zegoStream.stream},enumerable:!1,configurable:!0}),t.prototype.getAudioTracks=function(){return this.zegoStream.getAudioTracks()},t.prototype.getVideoTracks=function(){return this.zegoStream.getVideoTracks()},t.prototype.getTracks=function(){return this.zegoStream.getTracks()},Object.defineProperty(t.prototype,"videoDeviceId",{get:function(){return this.zegoStream.videoDeviceId},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"audioDeviceId",{get:function(){return this.zegoStream.audioDeviceId},enumerable:!1,configurable:!0}),t.prototype.on=function(t,n){return this.zegoStream.on(t,n)},t.prototype.off=function(t,n){return this.zegoStream.off(t,n)},t.prototype.startCaptureMicrophone=function(t){return this.zegoStream.startCaptureMicrophone(t)},t.prototype.startCaptureCamera=function(t){return this.zegoStream.startCaptureCamera(t)},t.prototype.startCaptureCameraAndMicrophone=function(t,n){return this.zegoStream.startCaptureCameraAndMicrophone(t,n)},t.prototype.startCaptureCustomAudio=function(t){return this.zegoStream.startCaptureCustomAudio(t)},t.prototype.startCaptureCustomVideo=function(t){return this.zegoStream.startCaptureCustomVideo(t)},t.prototype.startCaptureCustomVideoAndAudio=function(t,n){return this.zegoStream.startCaptureCustomVideoAndAudio(t,n)},t.prototype.startCaptureScreen=function(t){return this.zegoStream.startCaptureScreen(t)},t.prototype.startCaptureScreenWithAudio=function(t,n){return this.zegoStream.startCaptureScreenWithAudio(t,n)},t.prototype.stopCaptureAudio=function(){return this.zegoStream.stopCaptureAudio()},t.prototype.stopCaptureVideo=function(){return this.zegoStream.stopCaptureVideo()},t.prototype.playAudio=function(t){this.zegoStream.playAudio(t)},t.prototype.playCaptureAudio=function(t){this.zegoStream.playCaptureAudio(t)},t.prototype.playVideo=function(t,n){this.zegoStream.playVideo(t,n)},t.prototype.playCaptureVideo=function(t,n){this.zegoStream.playCaptureVideo(t,n)},t.prototype.takeStreamSnapshot=function(t){return this.zegoStream.takeStreamSnapshot(t)},t.prototype.resumeVideo=function(){return this.zegoStream.resumeVideo()},t.prototype.resumeAudio=function(){return this.zegoStream.resumeAudio()},t.prototype.stopVideo=function(){this.zegoStream.stopVideo()},t.prototype.stopAudio=function(){this.zegoStream.stopAudio()},t.prototype.stopPlayCaptureVideo=function(){this.zegoStream.stopPlayCaptureVideo()},t.prototype.stopPlayCaptureAudio=function(){this.zegoStream.stopPlayCaptureAudio()},t.prototype.setVolume=function(t){return this.zegoStream.setVolume(t)},t.prototype.useAudioOutputDevice=function(t){return this.zegoStream.setAudioOutputDevice(t)}}();function o(t){return"number"==typeof t}function u(t){return void 0===t}function s(t){return null!==t&&t instanceof Object}function c(t){return t instanceof MediaStream}function f(t){return t instanceof HTMLVideoElement}function a(t){return t instanceof HTMLImageElement}r(6994);var h={code:1100001,message:w},l={code:1103074,message:"video track is not readable"},v={code:1103076,message:"audio track is not readable"},d={code:1103077,message:"compositor blur not support."},m=Promise,p=document;var b="stream is not from zego",w="input param error";var g,y=function(){function t(t,n,i){this.t=t,this.i=n,this.u=i,this.fps=15,this.outputBitrate=1500,this.hasPortrait=!1,this.isClear=!1,this.canvasEl=p.createElement("canvas"),this.ctx=this.canvasEl.getContext("2d")}return t.prototype.setVideoConfig=function(t){var n=t.height,i=t.frameRate,r=t.bitrate;this.canvasEl.width=t.width,this.canvasEl.height=n,i&&(this.fps=i),r&&(this.outputBitrate=r)},t.prototype.setInputsOption=function(t){var n=this;this.isClear=!0,this.layers=t.filter((function(t){var n=t.stream,i=t.option,r=a(t.source),e=void 0!==i.contentType&&["ALL","VIDEO"].includes(i.contentType),o=!i.contentType||e,u=n&&n.getVideoTracks();if(0==(null==u?void 0:u.length)&&e)throw l;return r||o&&u&&(null==u?void 0:u.length)>0})).map((function(t){var i,r=t.source,e=t.stream,o=t.option;if(e&&"safari"===n.i.browser){var u=n.u.checkPreview(e);u.backgroundProcessor?(i=u.backgroundProcessor.getCanvas(),n.bgProcessor=u.backgroundProcessor,n.hasPortrait=!0):n.hasPortrait=!1}return{source:r,option:o,canvas:i}})),this.layers.sort((function(t,n){var i,r;return void 0!==(null===(i=t.option.layout)||void 0===i?void 0:i.zOrder)&&void 0!==(null===(r=n.option.layout)||void 0===r?void 0:r.zOrder)?t.option.layout.zOrder-n.option.layout.zOrder:-1}))},t.prototype.checkVideoInputs=function(t){var n=!0;return t.forEach((function(t){var i=t.stream,r=t.option,e=void 0!==r.contentType&&["ALL","VIDEO"].includes(r.contentType),o=i&&i.getVideoTracks();0==(null==o?void 0:o.length)&&e&&(n=!1)})),n},t.prototype.generateVideoTrack=function(){var t,n=this;if(this.hasPortrait?null===(t=this.bgProcessor)||void 0===t||t.setDrawBack((function(){n.draw()})):this.intervalId||(this.intervalId=setInterval((function(){n.draw()}),1e3/this.fps)),!this.canvasTrack){var i=this.canvasEl.captureStream("firefox"===this.i.browser?void 0:this.fps);this.canvasTrack=i.getVideoTracks()[0]}return this.canvasTrack},t.prototype.stopOutputStream=function(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null),this.layers.forEach((function(t){t.source&&f(t.source)&&(t.source.pause(),t.source.remove(),t.source.srcObject=null,t.source=null)})),this.u.trackUtils.stopTrack(this.canvasTrack),this.canvasTrack=null,this.ctx=null,this.layers=[]},t.prototype.draw=function(){var t,n;if(this.ctx){this.ctx.clearRect(0,0,this.canvasEl.width,this.canvasEl.height);for(var i=0;i<this.layers.length;i++){var r=this.layers[i],e=r.source,o=r.option,u=r.canvas;if(o.layout){var s=o.layout,c=s.x,h=s.y,l=s.width,v=s.height,d=f(e)?e.videoWidth:a(e)?e.naturalWidth:0,m=f(e)?e.videoHeight:a(e)?e.naturalHeight:0;if(0==d||0==m)continue;var p=u||e;switch(o.objectFit){case"contain":if(l/v<=d/m){var b=(v-(g=l*m/d))/2;null===(t=this.ctx)||void 0===t||t.drawImage(p,c,h+b,l,g)}else{b=(l-(w=v*d/m))/2;null===(n=this.ctx)||void 0===n||n.drawImage(p,c+b,h,w,v)}break;case"cover":var w,g;if(l/v<=d/m)this.ctx.drawImage(p,(d-(w=l*m/v))/2,0,w,m,c,h,l,v);else this.ctx.drawImage(p,0,(m-(g=d*v/l))/2,d,g,c,h,l,v);break;case"fill":this.ctx.drawImage(p,c,h,l,v)}}}}},t}(),O=function(){function t(t,n,i){this.t=t,this.ac=n,this.u=i,this.inputs=[],this.descNode=this.ac.createMediaStreamDestination()}return t.prototype.setInputsOption=function(t){var n=this;this.inputs=t.filter((function(t){var i=t.stream,r=t.option,e=i&&i.getAudioTracks(),o=n.u.checkPreview(i),u=void 0!==r.contentType&&["ALL","AUDIO"].includes(r.contentType);if((0==(null==e?void 0:e.length)||(null==o?void 0:o.hasEmptyAudioTrack))&&u)throw v;return e&&(null==e?void 0:e.length)>0})),this.inputs.forEach((function(t){var n,i,r=t.audioNodes,e=t.option;(void 0===t.option.volume&&(t.option.volume=100),r)&&(!e.contentType||["ALL","AUDIO"].includes(e.contentType)?(!r.hasAudio&&(null===(n=null==r?void 0:r.srcNode)||void 0===n||n.connect(r.volumeNode)),r.hasAudio=!0,o(t.option.volume)&&(r.volumeNode.gain.value=t.option.volume/100)):(null===(i=null==r?void 0:r.srcNode)||void 0===i||i.disconnect(r.volumeNode),r.hasAudio=!1))}))},t.prototype.checkAudioInputs=function(t){var n=this,i=!0;return t.forEach((function(t){var r=t.stream,e=t.option,o=r&&r.getAudioTracks(),u=n.u.checkPreview(r),s=void 0!==e.contentType&&["ALL","AUDIO"].includes(e.contentType);(0==(null==o?void 0:o.length)||(null==u?void 0:u.hasEmptyAudioTrack))&&s&&(i=!1)})),i},t.prototype.generateAudioTrack=function(){for(var t,n=0;n<this.inputs.length;n++){var i=this.inputs[n],r=i.stream,e=i.option,o=!e.contentType||["ALL","AUDIO"].includes(e.contentType),u=this.createAudioNode(r,i.option.volume),s=u.srcNode,c=u.volumeNode;o&&(null==s||s.connect(c)),i.audioNodes={srcNode:s,volumeNode:c,hasAudio:o}}var f=null===(t=this.descNode)||void 0===t?void 0:t.stream.getAudioTracks();return f&&f.length>0?f[0]:(this.ac.resume(),null)},t.prototype.createAudioNode=function(t,n){var i=this.ac.createMediaStreamSource(t),r=this.ac.createGain();return r.gain.value=n/100,r.connect(this.descNode),{srcNode:i,volumeNode:r}},t.prototype.stopAudioCompositor=function(){for(var t=0;t<this.inputs.length;t++){var n=this.inputs[t],i=n.audioNodes,r=n.option;if(i){var e=i.srcNode,o=i.volumeNode;(!r.contentType||["ALL","AUDIO"].includes(r.contentType))&&(null==e||e.disconnect(o),null==o||o.disconnect(this.descNode)),i.volumeNode=null,i.srcNode=null}this.descNode=null}this.inputs=[]},t.prototype.replaceSource=function(t){var n=this;this.inputs.forEach((function(i){var r=i.stream,e=i.audioNodes;if(t===r&&e){var o=e.srcNode,u=e.volumeNode,s=e.hasAudio,c=n.ac.createMediaStreamSource(r);s&&(null==o||o.disconnect(u),c.connect(u)),e.srcNode=c}}))},t}();!function(t){t.STREAM_COMPOSITOR_MODULE="zc.scm.0"}(g||(g={}));var j=function(t){return t},L=function(t){return t},E={event:"/sdk/create_stream_zgp_compositor"},_={event:"/sdk/start_compositing_stream",error:{},media_stream_id:L,compose_stream_conf:j};var k="/sdk/init",I=k;function A(){return navigator.userAgent||""}var D,S=function(){return S=Object.assign||function(t){for(var n,i=1,r=arguments.length;i<r;i++)for(var e in n=arguments[i])Object.prototype.hasOwnProperty.call(n,e)&&(t[e]=n[e]);return t},S.apply(this,arguments)},x=function(t,n,i,r){return new(i||(i=Promise))((function(e,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function s(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i((function(t){t(n)}))).then(u,s)}c((r=r.apply(t,n||[])).next())}))},z=function(t,n){var i,r,e,o,u={label:0,sent:function(){if(1&e[0])throw e[1];return e[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(s){return function(c){return function(s){if(i)throw new TypeError("Generator is already executing.");for(;o&&(o=0,s[0]&&(u=0)),u;)try{if(i=1,r&&(e=2&s[0]?r.return:s[0]?r.throw||((e=r.return)&&e.call(r),0):r.next)&&!(e=e.call(r,s[1])).done)return e;switch(r=0,e&&(s=[2&s[0],e.value]),s[0]){case 0:case 1:e=s;break;case 4:return u.label++,{value:s[1],done:!1};case 5:u.label++,r=s[1],s=[0];continue;case 7:s=u.ops.pop(),u.trys.pop();continue;default:if(!(e=u.trys,(e=e.length>0&&e[e.length-1])||6!==s[0]&&2!==s[0])){u=0;continue}if(3===s[0]&&(!e||s[1]>e[0]&&s[1]<e[3])){u.label=s[1];break}if(6===s[0]&&u.label<e[1]){u.label=e[1],e=s;break}if(e&&u.label<e[2]){u.label=e[2],u.ops.push(s);break}e[2]&&u.ops.pop(),u.trys.pop();continue}s=n.call(t,u)}catch(t){s=[6,t],r=0}finally{i=e=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,c])}}},M=function(){function t(t,n,i,r){this.t=t,this.i=n,this.u=i,this.ac=r,this.mixOutputConfig={width:0,height:0,frameRate:15,bitrate:2500},this.inputStreamOptions=[],this.fit="cover",this.videoCompositor=new y(t,n,i),this.audioCompositor=new O(t,r,i)}return t.prototype.setOutputConfig=function(t){var n=t.height,i=t.frameRate,r=t.bitrate;if(!o(t.width))throw Error("param width error");if(!o(n))throw Error("param height error");if(!u(i)&&!o(i))throw Error("param frameRate error");if(!u(r)&&!o(r))throw Error("param bitrate error");this.mixOutputConfig=S(S({},this.mixOutputConfig),t),this.videoCompositor.setVideoConfig(this.mixOutputConfig)},t.prototype.setInputEndpoint=function(t,n){return x(this,void 0,void 0,(function(){var i,r,e;return z(this,(function(o){switch(o.label){case 0:if(i=function(t,n){if(t&&!c(t)&&t.zegoStream){if(n.info("cu.gs type:zego"),c(t.stream))return t.stream;throw new Error("The ZegoLocalStream type requires first calling the capture api to capture the stream")}return t}(t,this.t),!this.checkStreamIsLocal(i))throw Error(b);return r=this.inputStreamOptions.find((function(t){return t.stream===i})),this.checkInputOption(n,!!r),r?(r.option=this.assignObj(r.option,n),[3,3]):[3,1];case 1:return[4,this.createVideo(i)];case 2:e=o.sent(),this.addInputLayer({source:e,stream:i,option:S({objectFit:this.fit},n)}),o.label=3;case 3:if(!this.videoCompositor.checkVideoInputs(this.inputStreamOptions))throw l;if(!this.audioCompositor.checkAudioInputs(this.inputStreamOptions))throw v;return this.videoCompositor.setInputsOption(this.inputStreamOptions),this.audioCompositor.setInputsOption(this.inputStreamOptions),[2]}}))}))},t.prototype.addImage=function(t,n){this.checkImg(t);var i=this.inputStreamOptions.find((function(n){return n.source===t}));this.checkInputOption(n,!!i),i?i.option=this.assignObj(i.option,n):this.addInputLayer({source:t,option:S({objectFit:this.fit},n)}),this.videoCompositor.setInputsOption(this.inputStreamOptions)},t.prototype.removeImage=function(t){this.checkImg(t);var n=this.inputStreamOptions.findIndex((function(n){return n.source===t}));n>0&&(this.inputStreamOptions.splice(n,1),this.videoCompositor.setInputsOption(this.inputStreamOptions))},t.prototype.startComposingStream=function(){var t=this;return new m((function(n,i){if(!t.checkOutputs())return t.t.error("zc.sc.scs.0 output config error"),void i(h);if(!t.checkInputs())return t.t.error("zc.sc.scs.0 input params error"),void i(h);if(!t.checkBrowserSupport())return t.t.error("zc.sc.scs.0 browser not support compositor"),void i(d);t.videoCompositor.setInputsOption(t.inputStreamOptions);var r=t.videoCompositor.generateVideoTrack();t.audioCompositor.setInputsOption(t.inputStreamOptions);var e=t.audioCompositor.generateAudioTrack();t.uploadEvent();var o=[r];e&&o.push(e);var u=new MediaStream(o);t.outputStream=u,t.u.createCompositingPreviewer(u,t.mixOutputConfig,t.inputStreamOptions),n(u)}))},t.prototype.stopComposingStream=function(){var t=this;return new m((function(n){var i,r;if(t.outputStream){var e=t.u.checkPreview(t.outputStream);e&&(null===(i=e.rtcViewer)||void 0===i||i.destroy(),e.streamCompositor=null,t.u.removePreview(e)),null===(r=t.outputStream)||void 0===r||r.getTracks().forEach((function(n){t.u.trackUtils.stopTrack(n)}))}try{t.videoCompositor.stopOutputStream(),t.audioCompositor.stopAudioCompositor()}catch(t){n(!1)}t.inputStreamOptions=[],n(!0)}))},t.prototype.checkInputs=function(){var t=this.mixOutputConfig,n=t.width,i=t.height;return this.inputStreamOptions.every((function(t){var r=t.option.layout;return r.x<=n&&r.y<=i&&r.x+r.width<=n&&r.y+r.height<=i&&r.width<=n&&r.height<=i}))},t.prototype.checkOutputs=function(){var t=this.mixOutputConfig;return t.width>0&&t.height>0&&t.frameRate>0&&t.bitrate>0},t.prototype.uploadEvent=function(){var t=this.i.reporter.createSpan(D.H,{key:I},{key:""},_.event),n=this.inputStreamOptions.map((function(t){var n=t.option,i=n.layout,r=n.objectFit,e=n.contentType;return{content_control:"AUDIO"===e?1:"VIDEO"===e?2:0,x:i.x,y:i.y,w:i.width,h:i.height,order:i.zOrder,render_mode:"cover"===r?0:"contain"===r?1:2}})),i=this.mixOutputConfig;t.setAttributes({compose_stream_conf:_.compose_stream_conf({fps:i.frameRate,bitrate:i.bitrate,w:i.width,h:i.height,stream_cnt:n.length,input_stream_list:n})}),t.end()},t.prototype.checkImg=function(t){if(!t||!a(t)||!t.naturalWidth)throw this.t.error(g.STREAM_COMPOSITOR_MODULE+" source must be image and loaded"),Error("source must be image and loaded")},t.prototype.checkInputOption=function(t,n){var i=this,r=t.layout,e=t.objectFit,o=t.contentType;if(!u(r)){if(!s(r))throw Error("param layout error");["x","y","width","height"].forEach((function(t){i.checkNumParam(r,t,n)})),this.checkOptionalNumOptParam(r,"zOrder")}if(!u(e)&&!["cover","contain","fill"].includes(e))throw Error("param objectFit error");if(!u(o)&&!["ALL","VIDEO","AUDIO"].includes(o))throw Error("param contentType error");this.checkOptionalNumOptParam(t,"volume")},t.prototype.checkNumParam=function(t,n,i){if(i&&void 0===t[n]);else if(!o(t[n]))throw Error("param ".concat(n," error"))},t.prototype.checkOptionalNumOptParam=function(t,n){if(void 0!==t[n]&&!o(t[n]))throw Error("param ".concat(n," error"))},t.prototype.checkStreamIsLocal=function(t){var n=this.u.checkPreview(t),i=this.u.checkPlayer(t);return n&&(n.streamCompositor=this),!!n||!!i},t.prototype.addInputLayer=function(t){var n,i=t.option;void 0===(null===(n=i.layout)||void 0===n?void 0:n.zOrder)&&(i.layout.zOrder=0),this.inputStreamOptions.push(t)},t.prototype.createVideo=function(t){return x(this,void 0,void 0,(function(){var n=this;return z(this,(function(i){return[2,new m((function(i,r){return x(n,void 0,void 0,(function(){var n,e,o,u,s=this;return z(this,(function(c){return(n=p.createElement("video")).setAttribute("autoplay","autoplay"),n.setAttribute("muted","true"),n.muted=!0,n.setAttribute("playsinline","playsinline"),n.setAttribute("style","display:none"),e=null,o=function(){e&&(clearTimeout(e),e=null),n.play().catch((function(t){console.error(t)})),e=window.setTimeout((function(){s.t.warn("zc.sc.cv video track error"),r(l)}),1e3)},u=function(){e&&clearTimeout(e),n&&n.removeEventListener("playing",u),i(n)},n&&n.addEventListener("playing",u),n.srcObject=t,n.play().catch((function(t){console.error(t)})),e=window.setTimeout((function(){o()}),1e3),[2]}))}))}))]}))}))},t.prototype.assignObj=function(t,n){void 0===t&&(t={});var i=t;if(!s(t)||!s(n))return n;for(var r in n)i[r]=t.hasOwnProperty(r)?this.assignObj(t[r],n[r]):n[r];return i},t.prototype.replaceSource=function(t){this.audioCompositor.replaceSource(t)},t.prototype.checkBrowserSupport=function(){var t=!0,n=function(){var t=A().toLowerCase().match(/cpu iphone os (.*?) like mac os/);return t&&t[1]||""}();return n&&n.includes("14_6")&&(t=!1),t},t}(),T=function(){function t(t){this.l=t}return t.prototype.addImage=function(t,n){this.l.addImage(t,n)},t.prototype.removeImage=function(t){this.l.removeImage(t)},t.prototype.setInputEndpoint=function(t,n){return this.l.setInputEndpoint(t,n)},t.prototype.setOutputConfig=function(t){this.l.setOutputConfig(t)},t.prototype.startComposingStream=function(){return this.l.startComposingStream()},t.prototype.stopComposingStream=function(){return this.l.stopComposingStream()},t}();!function(t){t[t.I=0]="I",t[t.H=10]="H",t[t.M=100]="M",t[t.L=1e3]="L"}(D||(D={}));var U={createStreamCompositor:function(){var t=this.reporter.createSpan(D.H,{key:I},{key:""},E.event),n=new M(this.logger,this.stateCenter,this.streamCenter,this.ac);return t.end(),new T(n)}},C={install:function(t){for(var n in U)Object.defineProperty(t.prototype,n,{value:U[n],writable:!1})},get type(){return"StreamCompositor"}};return e}()}));