trtc-sdk-v5 5.15.1-beta.2 → 5.15.1-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -363,6 +363,7 @@ export interface AudioProfile { sampleRate: number, channelCount: number, bitrat
363
363
  export declare interface LocalVideoConfig {
364
364
  view?: string | HTMLElement | HTMLElement[] | null;
365
365
  publish?: boolean;
366
+ forcePublish?: boolean;
366
367
  mute?: boolean | string;
367
368
  option?: {
368
369
  cameraId?: string;
@@ -473,7 +474,8 @@ export declare interface StopRemoteVideoConfig {
473
474
  }
474
475
  export declare interface LocalAudioConfig {
475
476
  publish?: boolean;
476
- mute?: boolean;
477
+ mute?: boolean | 'microphone';
478
+ muteKeepVolumeDetection?: boolean;
477
479
  option?: {
478
480
  microphoneId?: string;
479
481
  profile?: keyof typeof audioProfileMap;
@@ -486,7 +488,6 @@ export declare interface LocalAudioConfig {
486
488
  };
487
489
  }
488
490
  export declare interface UpdateLocalAudioConfig extends LocalAudioConfig {
489
- mute?: boolean;
490
491
  option?: {
491
492
  microphoneId?: string;
492
493
  audioTrack?: MediaStreamTrack;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trtc-sdk-v5",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "description": "Tencent Cloud RTC SDK for Web",
5
5
  "main": "trtc.js",
6
6
  "types": "index.d.ts",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/cdn-streaming",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "description": "TRTC Web SDK 5.x CDN streaming plugin",
5
5
  "main": "./cdn-streaming.esm.js",
6
6
  "module": "./cdn-streaming.esm.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/chorus",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "description": "TRTC Web SDK 5.x Chorus plugin",
5
5
  "main": "./chorus.esm.js",
6
6
  "module": "./chorus.esm.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/cross-room",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "description": "TRTC Web SDK 5.x Cross Room plugin",
5
5
  "main": "./cross-room.esm.js",
6
6
  "module": "./cross-room.esm.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/custom-encryption",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "main": "./custom-encryption.esm.js",
5
5
  "module": "./custom-encryption.esm.js",
6
6
  "types": "./custom-encryption.esm.d.ts"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/device-detector",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "description": "TRTC Web SDK 5.x device detector plugin",
5
5
  "main": "./device-detector.esm.js",
6
6
  "module": "./device-detector.esm.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/lebplayer",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "description": "TRTC Web SDK 5.x LEBPlayer plugin",
5
5
  "main": "./lebplayer.esm.js",
6
6
  "module": "./lebplayer.esm.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/realtime-transcriber",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "description": "TRTC Web SDK 5.x Realtime Transcriber plugin",
5
5
  "main": "./realtime-transcriber.esm.js",
6
6
  "module": "./realtime-transcriber.esm.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/small-stream-auto-switcher",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "description": "",
5
5
  "main": "./small-stream-auto-switcher.esm.js",
6
6
  "keywords": [],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/video-decoder",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "description": "Video decoder plugin for TRTC",
5
5
  "main": "./video-decoder.esm.js",
6
6
  "module": "./video-decoder.esm.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/basic-beauty",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "description": "TRTC Web SDK 5.x basic-beauty plugin",
5
5
  "main": "./basic-beauty.esm.js",
6
6
  "module": "./basic-beauty.esm.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/beauty",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "description": "TRTC Web SDK 5.x beauty plugin",
5
5
  "main": "./beauty.esm.js",
6
6
  "module": "./beauty.esm.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/face-detection",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "description": "TRTC Web SDK 5.x face detection plugin",
5
5
  "main": "./face-detection.esm.js",
6
6
  "module": "./face-detection.esm.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/video-mixer",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "description": "TRTC Web SDK 5.x videoMixer plugin",
5
5
  "main": "./video-mixer.esm.js",
6
6
  "module": "./video-mixer.esm.js",
@@ -35,6 +35,7 @@ export interface CameraSource {
35
35
  videoTrack?: MediaStreamTrack;
36
36
  profile?: keyof typeof videoProfileMap | VideoProfile;
37
37
  layout: LayerOption;
38
+ useInternalTrack?: boolean;
38
39
  }
39
40
  export interface ScreenSource {
40
41
  // 参数与 startScreenShare 对齐
@@ -44,6 +45,9 @@ export interface ScreenSource {
44
45
  preferDisplaySurface?: 'current-tab' | 'tab' | 'window' | 'monitor';
45
46
  layout: LayerOption;
46
47
  systemAudio?: boolean;
48
+ videoTrack?: MediaStreamTrack;
49
+ audioTrack?: MediaStreamTrack;
50
+ useInternalTrack?: boolean;
47
51
  }
48
52
  export interface TextSource {
49
53
  id: string;
@@ -1 +1 @@
1
- var __defProp=Object.defineProperty,__getOwnPropSymbols=Object.getOwnPropertySymbols,__hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__defNormalProp=(e,i,r)=>i in e?__defProp(e,i,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[i]=r,__spreadValues=(e,i)=>{for(var r in i||(i={}))__hasOwnProp.call(i,r)&&__defNormalProp(e,r,i[r]);if(__getOwnPropSymbols)for(var r of __getOwnPropSymbols(i))__propIsEnum.call(i,r)&&__defNormalProp(e,r,i[r]);return e},__publicField=(e,i,r)=>__defNormalProp(e,"symbol"!=typeof i?i+"":i,r),layoutProperty={x:{required:!0,type:"number"},y:{required:!0,type:"number"},width:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},height:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},zIndex:{required:!0,type:"number"},fillMode:{required:!1,type:"string"},mirror:{required:!1,type:"boolean"},rotation:{required:!1,type:"number"},hidden:{required:!1,type:"boolean"}},canvasValidateRule=(e,i=!1)=>({type:"object",required:i,properties:{canvasColor:{required:!1,type:["string",CanvasGradient,CanvasPattern]},width:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},height:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},frameRate:{required:!1,type:"number",notLessThanZero:!0,min:1,max:60}},validate(i,r,t){const{RtcError:o,ErrorCode:a,ErrorCodeDictionary:s}=e.errorModule;if(!i)return;const{width:n,height:c}=i;if(n&&c&&n*c>8294400)throw new o({code:a.INVALID_PARAMETER,message:"The mix resolution cannot be set higher than 3840 * 2160."})}}),viewValidateRule=e=>({required:!1,type:["string",HTMLElement,null],validate(i,r,t){const{RtcError:o,ErrorCode:a,ErrorCodeDictionary:s}=e.errorModule;if(e.utils.isString(i)){if(!document.getElementById(i))throw new o({code:a.INVALID_PARAMETER,extraCode:s.INVALID_ELEMENT_ID,fnName:t,messageParams:{key:r}})}}}),layoutValidateRule=(e,i=!0)=>({type:"object",required:i,properties:__spreadValues({},layoutProperty),validate(i,r,t){const{RtcError:o,ErrorCode:a,ErrorCodeDictionary:s}=e.errorModule;if(i){if(i.fillMode&&!["contain","cover","fill"].includes(i.fillMode))throw new o({code:a.INVALID_PARAMETER,extraCode:s.INVALID_PARAMETER_TYPE,message:"The fillMode parameter must be 'contain', 'cover' or 'fill'",fnName:t});if(i.rotation&&![0,90,180,270].includes(i.rotation))throw new o({code:a.INVALID_PARAMETER,extraCode:s.INVALID_PARAMETER_TYPE,message:"The rotation parameter must be 0, 90, 180 or 270",fnName:t})}}}),cameraValidateRule=e=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},cameraId:{required:!1,type:"string"},videoTrack:{required:!1,instanceof:MediaStreamTrack},profile:{required:!1,type:["string","object"],properties:{width:{type:"number"},height:{type:"number"},frameRate:{type:"number"},bitrate:{type:"number"}}},layout:__spreadValues({},layoutValidateRule(e))}}}),screenValidateRule=e=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},profile:{required:!1,type:["string","object"],properties:{width:{type:"number"},height:{type:"number"},frameRate:{type:"number"},bitrate:{type:"number"}}},captureElement:{required:!1,type:HTMLElement},preferDisplaySurface:{required:!1,type:"string"},layout:__spreadValues({},layoutValidateRule(e))},validate(i,r,t){const{RtcError:o,ErrorCode:a,ErrorCodeDictionary:s}=e.errorModule;if(!e.rtcDectection.isScreenCaptureApiAvailable())throw new o({code:a.ENV_NOT_SUPPORTED,fnName:t,extraCode:s.NOT_SUPPORTED_SCREEN_SHARE})}}}),textValidateRule=e=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},content:{required:!0,type:"string"},font:{required:!1,type:"string"},color:{required:!1,type:["string",CanvasGradient,CanvasPattern]},layout:__spreadValues({},layoutValidateRule(e))}}}),imageValidateRule=e=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},url:{required:!0,type:"string"},layout:__spreadValues({},layoutValidateRule(e))}}}),videoValidateRule=e=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},url:{required:!0,type:"string"},layout:__spreadValues({},layoutValidateRule(e))}}});function startValidateRule(e){return{name:"VideoMixerOptions",type:"object",required:!0,allowEmpty:!1,properties:{view:__spreadValues({},viewValidateRule(e)),canvasInfo:__spreadValues({},canvasValidateRule(e,!0)),camera:__spreadValues({},cameraValidateRule(e)),screen:__spreadValues({},screenValidateRule(e)),text:__spreadValues({},textValidateRule(e)),image:__spreadValues({},imageValidateRule(e)),video:__spreadValues({},videoValidateRule(e))},validate(i,r,t,o){const{RtcError:a,ErrorCode:s,ErrorCodeDictionary:n}=e.errorModule;if(e.environment.isMobile())throw new a({code:s.ENV_NOT_SUPPORTED,message:"VideoMixer is not supported on mobile devices currently"});const{onScreenShareStop:c}=i;if(c&&!e.utils.isFunction(c))throw new a({code:s.INVALID_PARAMETER,extraCode:n.INVALID_PARAMETER_TYPE,fnName:t,messageParams:{key:"onScreenShareStop",value:typeof c,rule:{type:"Function"}}})}}}function updateValidateRule(e){return{name:"VideoMixerOptions",type:"object",required:!1,allowEmpty:!1,properties:{view:__spreadValues({},viewValidateRule(e)),canvasInfo:__spreadValues({},canvasValidateRule(e)),camera:__spreadValues({},cameraValidateRule(e)),screen:__spreadValues({},screenValidateRule(e)),text:__spreadValues({},textValidateRule(e)),image:__spreadValues({},imageValidateRule(e)),video:__spreadValues({},videoValidateRule(e))}}}function stopValidateRule(e){return{name:"StopVideoMixerOptions",required:!1}}var videoMixSeq=0,_VideoMixer=class e{constructor(e){this.core=e,__publicField(this,"seq"),__publicField(this,"log"),__publicField(this,"localMixVideoTrack",null),__publicField(this,"systemAudioTrackList",{}),__publicField(this,"_mixVideoConfig"),__publicField(this,"onScreenShareStop"),videoMixSeq+=1,this.seq=videoMixSeq,this.log=e.log.createChild({id:`${this.getAlias()}${videoMixSeq}`}),this.log.info("created")}getName(){return e.Name}getAlias(){return"vmix"}getValidateRule(e){switch(e){case"start":return startValidateRule(this.core);case"update":return updateValidateRule(this.core);case"stop":return stopValidateRule(this.core)}}getGroup(){return"vmix"}async start(e){this.localMixVideoTrack||(this.localMixVideoTrack=new this.core.LocalMixVideoTrack(this.core.room.videoManager)),this._mixVideoConfig={canvasInfo:{width:1920,height:1080}},e=this.core.utils.deepCloneBasic(e);const{view:i,onScreenShareStop:r}=e,t=await this.parseMixOptions(e);return r&&(this.onScreenShareStop=r,this._mixVideoConfig.onScreenShareStop=r),this._updatePreview({view:i,track:this.localMixVideoTrack}),this.core.utils.isUndefined(i)||(this._mixVideoConfig.view=i),await this.localMixVideoTrack.startMix(),{track:this.localMixVideoTrack._outputTrack,systemAudioTrackList:this.systemAudioTrackList,result:t}}async update(e){const{RtcError:i,ErrorCode:r}=this.core.errorModule;if(!this.localMixVideoTrack)throw new i({code:r.INVALID_OPERATION,message:"mixTrack doesn't initialize!"});e=this.core.utils.deepCloneBasic(e);const{view:t}=e,o=await this.parseMixOptions(e);return await this._updatePreview({view:t,track:this.localMixVideoTrack,prevConfig:this._mixVideoConfig}),this.core.utils.isUndefined(t)||(this._mixVideoConfig.view=t),{track:this.localMixVideoTrack._outputTrack,systemAudioTrackList:this.systemAudioTrackList,result:o}}async parseMixOptions(e){let i={successOptions:{},failedDetails:[]};const{RtcError:r,ErrorCode:t,ErrorCodeDictionary:o}=this.core.errorModule;if(!this.localMixVideoTrack||!this._mixVideoConfig)return i;const a=[],s=__spreadValues({},e),{canvasInfo:n,camera:c,screen:d,text:l,image:u,video:p}=e;let h=0,m=0;if(n){const{canvasColor:e,width:i,height:r,frameRate:t}=n;e&&this.localMixVideoTrack.setMixBackground(e),t&&this.localMixVideoTrack.setFps(t),this.localMixVideoTrack.resizeMixCanvas(i,r),this._mixVideoConfig.canvasInfo=n}if(c){h++;const{finalOptions:e,errors:i}=await this.parseCameraOptions(this.localMixVideoTrack,c,this._mixVideoConfig.camera);this._mixVideoConfig.camera=e,s.camera=e,i.length>0&&(a.push(...i),i.length===c.length&&m++)}if(d){h++;const{finalOptions:e,errors:i}=await this.parseScreenOptions(this.localMixVideoTrack,d,this._mixVideoConfig.screen);this._mixVideoConfig.screen=e,s.screen=e,i.length>0&&(a.push(...i),i.length===d.length&&m++)}if(l){h++;const{finalOptions:e,errors:i}=await this.parseTextOptions(this.localMixVideoTrack,l,this._mixVideoConfig.text);this._mixVideoConfig.text=e,s.text=e,i.length>0&&(a.push(...i),i.length===l.length&&m++)}if(u){h++;const{finalOptions:e,errors:i}=await this.parseImageOptions(this.localMixVideoTrack,u,this._mixVideoConfig.image);this._mixVideoConfig.image=e,s.image=e,i.length>0&&(a.push(...i),i.length===u.length&&m++)}if(p){h++;const{finalOptions:e,errors:i}=await this.parseVideoOptions(this.localMixVideoTrack,p,this._mixVideoConfig.video);this._mixVideoConfig.video=e,s.video=e,i.length>0&&(a.push(...i),i.length===p.length&&m++)}if(m>0&&m===h)throw new r({code:t.INVALID_PARAMETER,message:"all sources mix failed",data:{failedDetails:a}});return i={successOptions:s,failedDetails:a},i}async parseCameraOptions(e,i,r=[]){var t,o;const a=new Set(i.map(e=>e.id)),s=r.filter(e=>!a.has(e.id)).map(e=>e.id);for(const i of s)e.removeCameraSource(i);const n=new Map(r.map(e=>[e.id,e])),c=[],d=[];for(const r of i){const{id:i,layout:a,profile:s}=r;try{if(e.inputLocalVideoTracks.has(i)){const n=null==(t=e.inputLocalVideoTracks.get(i))?void 0:t.mediaTrack;await this.updateCameraProfile(r);const c=null==(o=e.inputLocalVideoTracks.get(i))?void 0:o.mediaTrack;let d;s&&(d=this.core.utils.isString(s)?this.core.constants.videoProfileMap[s]:s),c!==n?e.updateCameraSource(i,a,c,d):e.updateCameraSource(i,a,null,d)}else{const t=await this.captureCamera(r);try{e.addCameraSource(i,t,a)}catch(e){throw t.close(),e}}c.push(r)}catch(e){d.push({id:i,error:e}),n.has(i)&&c.push(n.get(i))}}return{finalOptions:c,errors:d}}async parseScreenOptions(e,i,r=[]){const{removeIdList:t,preOptionsMap:o}=this.prepareScreenOptions(i,r);this.removeUnusedScreenSources(e,t);const{finalOptions:a,errors:s}=await this.processScreenSources(e,i,o);return{finalOptions:a,errors:s}}prepareScreenOptions(e,i){const r=new Set(e.map(e=>e.id));return{removeIdList:i.filter(e=>!r.has(e.id)).map(e=>e.id),preOptionsMap:new Map(i.map(e=>[e.id,e]))}}removeUnusedScreenSources(e,i){for(const r of i)e.removeScreenSource(r),this.removeSystemAudioTrack(r)}async processScreenSources(e,i,r){const t=[],o=[];for(const a of i)try{await this.processSingleScreenSource(e,a,r,t)}catch(e){this.handleScreenSourceError(a.id,e,r,t,o)}return{finalOptions:t,errors:o}}async processSingleScreenSource(e,i,r,t){const{id:o,layout:a}=i,s=r.get(o),n=e.inputLocalScreenTracks.has(o),c=!(null==s?void 0:s.systemAudio)&&i.systemAudio;n&&!c?await this.updateExistingScreenSource(e,o,a,s,i):await this.addNewScreenSource(e,i,s),t.push(i)}async updateExistingScreenSource(e,i,r,t,o){e.updateScreenSource(i,r),(null==t?void 0:t.systemAudio)&&!o.systemAudio&&this.removeSystemAudioTrack(i)}async addNewScreenSource(e,i,r){const t=await this.captureScreen(i);!(null==r?void 0:r.systemAudio)&&i.systemAudio&&e.inputLocalScreenTracks.has(i.id)&&e.removeScreenSource(i.id);try{e.addScreenSource(i.id,t,i.layout)}catch(e){throw t.close(),e}}handleScreenSourceError(e,i,r,t,o){o.push({id:e,error:i}),r.has(e)&&t.push(r.get(e))}async parseTextOptions(e,i,r=[]){const t=new Set(i.map(e=>e.id)),o=r.filter(e=>!t.has(e.id)).map(e=>e.id);for(const i of o)e.removeTextSource(i);const a=new Map(r.map(e=>[e.id,e])),s=[],n=[];for(const t of i){const{id:i}=t;try{r.some(e=>e.id===i)?e.updateTextSource(t):e.addTextSource(t),s.push(t)}catch(e){n.push({id:i,error:e}),a.has(i)&&s.push(a.get(i))}}return{finalOptions:s,errors:n}}async parseImageOptions(e,i,r=[]){const t=new Set(i.map(e=>e.id)),o=r.filter(e=>!t.has(e.id)).map(e=>e.id);for(const i of o)e.removeImageSource(i);const a=new Map(r.map(e=>[e.id,e])),s=[],n=[];for(const t of i){const{id:i,url:o,layout:c}=t;try{const a=r.find(e=>e.id===i);if(a){let r;a.url!==o&&(r=await this.core.utils.loadImage(o)),e.updateImageSource(i,c,r)}else{const r=await this.core.utils.loadImage(o);e.addImageSource(i,r,c)}s.push(t)}catch(e){n.push({id:i,error:e}),a.has(i)&&s.push(a.get(i))}}return{finalOptions:s,errors:n}}async parseVideoOptions(e,i,r=[]){const t=new Set(i.map(e=>e.id)),o=r.filter(e=>!t.has(e.id)).map(e=>e.id);for(const i of o)e.removeVideoSource(i);const a=new Map(r.map(e=>[e.id,e])),s=[],n=[];for(const t of i){const{id:i,url:o,layout:c}=t;try{const a=r.find(e=>e.id===i);let n;if(a)a.url!==o&&(n=await this.core.utils.loadVideo(o)),e.updateVideoSource(i,c,n);else{const r=await this.core.utils.loadVideo(o);e.addVideoSource(i,r,c)}s.push(t)}catch(e){n.push({id:i,error:e}),a.has(i)&&s.push(a.get(i))}}return{finalOptions:s,errors:n}}async captureCamera(e){const{id:i,cameraId:r,videoTrack:t,profile:o}=e,a=new this.core.LocalVideoTrack;a.log.id+=`-${i}`;const s={};return r?s.deviceId=r:this.core.utils.isUndefined(t)||(s.customSource=t),this.core.utils.isUndefined(o)||(this.core.utils.isString(o)?this.core.constants.videoProfileMap[o]&&a.setProfile(this.core.constants.videoProfileMap[o]):a.setProfile(o)),await a.capture(s),a}async updateCameraProfile(e){var i;const{id:r,cameraId:t,videoTrack:o,profile:a}=e,s=null==(i=this.localMixVideoTrack)?void 0:i.inputLocalVideoTracks.get(r);s&&(t?await s.switchDevice(t):this.core.utils.isUndefined(o)||await s.setInputMediaStreamTrack(o),this.core.utils.isUndefined(a)||(this.core.utils.isString(a)?this.core.constants.videoProfileMap[a]&&s.setProfile(this.core.constants.videoProfileMap[a]):s.setProfile(a),t&&s.isNeedToSwitchDevice(t)||await s.applyProfile()))}async captureScreen(e){const{id:i,profile:r,captureElement:t,preferDisplaySurface:o}=e,a=new this.core.LocalScreenTrack;a.log.id+=`-${i}`;const s={};this.core.utils.isUndefined(r)||(this.core.utils.isString(r)?this.core.constants.screenProfileMap[r]&&a.setProfile(this.core.constants.screenProfileMap[r]):a.setProfile(r)),t&&(s.captureElement=t),o&&(s.preferDisplaySurface=o),s.systemAudio=e.systemAudio;const n=await a.capture(s);return s.systemAudio&&n.getAudioTracks().length>0?(this.systemAudioTrackList[i]=n.getAudioTracks()[0],this.log.info(i+" system audio track captured")):this.removeSystemAudioTrack(i),a.mediaTrack.addEventListener(this.core.constants.NAME.ENDED,()=>{var e,r,t;null==(e=this.localMixVideoTrack)||e.removeScreenSource(i),(null==(r=this._mixVideoConfig)?void 0:r.screen)&&(this._mixVideoConfig.screen=this._mixVideoConfig.screen.filter(e=>e.id!==i)),null==(t=this.onScreenShareStop)||t.call(this,i)}),a}async _updatePreview({view:e,track:i,prevConfig:r}){if(this.core.utils.isUndefined(e)&&r&&r.view){const e=this.core.utils.getViewListFromView(r.view);e.length>0&&await i.play(e)}if(!this.core.utils.isUndefined(e)){const r=this.core.utils.getViewListFromView(e);r.length>0?await i.play(r):i.stop()}}stop(){var e;null==(e=this.localMixVideoTrack)||e.close(),this.localMixVideoTrack=null,Object.values(this.systemAudioTrackList).forEach(e=>e.stop()),this.systemAudioTrackList={},delete this.onScreenShareStop,delete this._mixVideoConfig}removeSystemAudioTrack(e){this.systemAudioTrackList[e]&&(this.systemAudioTrackList[e].stop(),this.log.info(e+" system audio track stop"),delete this.systemAudioTrackList[e])}};__publicField(_VideoMixer,"Name","VideoMixer");var VideoMixer=_VideoMixer,index_default=VideoMixer;export{index_default as default};export{VideoMixer};
1
+ var __defProp=Object.defineProperty,__getOwnPropSymbols=Object.getOwnPropertySymbols,__hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__defNormalProp=(e,r,t)=>r in e?__defProp(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,__spreadValues=(e,r)=>{for(var t in r||(r={}))__hasOwnProp.call(r,t)&&__defNormalProp(e,t,r[t]);if(__getOwnPropSymbols)for(var t of __getOwnPropSymbols(r))__propIsEnum.call(r,t)&&__defNormalProp(e,t,r[t]);return e},__publicField=(e,r,t)=>__defNormalProp(e,"symbol"!=typeof r?r+"":r,t),layoutProperty={x:{required:!0,type:"number"},y:{required:!0,type:"number"},width:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},height:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},zIndex:{required:!0,type:"number"},fillMode:{required:!1,type:"string"},mirror:{required:!1,type:"boolean"},rotation:{required:!1,type:"number"},hidden:{required:!1,type:"boolean"}},canvasValidateRule=(e,r=!1)=>({type:"object",required:r,properties:{canvasColor:{required:!1,type:["string",CanvasGradient,CanvasPattern]},width:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},height:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},frameRate:{required:!1,type:"number",notLessThanZero:!0,min:1,max:60}},validate(r,t,i){const{RtcError:o,ErrorCode:a,ErrorCodeDictionary:s}=e.errorModule;if(!r)return;const{width:c,height:n}=r;if(c&&n&&c*n>8294400)throw new o({code:a.INVALID_PARAMETER,message:"The mix resolution cannot be set higher than 3840 * 2160."})}}),viewValidateRule=e=>({required:!1,type:["string",HTMLElement,null],validate(r,t,i){const{RtcError:o,ErrorCode:a,ErrorCodeDictionary:s}=e.errorModule;if(e.utils.isString(r)){if(!document.getElementById(r))throw new o({code:a.INVALID_PARAMETER,extraCode:s.INVALID_ELEMENT_ID,fnName:i,messageParams:{key:t}})}}}),layoutValidateRule=(e,r=!0)=>({type:"object",required:r,properties:__spreadValues({},layoutProperty),validate(r,t,i){const{RtcError:o,ErrorCode:a,ErrorCodeDictionary:s}=e.errorModule;if(r){if(r.fillMode&&!["contain","cover","fill"].includes(r.fillMode))throw new o({code:a.INVALID_PARAMETER,extraCode:s.INVALID_PARAMETER_TYPE,message:"The fillMode parameter must be 'contain', 'cover' or 'fill'",fnName:i});if(r.rotation&&![0,90,180,270].includes(r.rotation))throw new o({code:a.INVALID_PARAMETER,extraCode:s.INVALID_PARAMETER_TYPE,message:"The rotation parameter must be 0, 90, 180 or 270",fnName:i})}}}),cameraValidateRule=e=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},cameraId:{required:!1,type:"string"},videoTrack:{required:!1,instanceof:MediaStreamTrack},profile:{required:!1,type:["string","object"],properties:{width:{type:"number"},height:{type:"number"},frameRate:{type:"number"},bitrate:{type:"number"}}},layout:__spreadValues({},layoutValidateRule(e))}}}),screenValidateRule=e=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},profile:{required:!1,type:["string","object"],properties:{width:{type:"number"},height:{type:"number"},frameRate:{type:"number"},bitrate:{type:"number"}}},captureElement:{required:!1,type:HTMLElement},preferDisplaySurface:{required:!1,type:"string"},layout:__spreadValues({},layoutValidateRule(e))},validate(r,t,i){const{RtcError:o,ErrorCode:a,ErrorCodeDictionary:s}=e.errorModule;if(!e.rtcDectection.isScreenCaptureApiAvailable())throw new o({code:a.ENV_NOT_SUPPORTED,fnName:i,extraCode:s.NOT_SUPPORTED_SCREEN_SHARE})}}}),textValidateRule=e=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},content:{required:!0,type:"string"},font:{required:!1,type:"string"},color:{required:!1,type:["string",CanvasGradient,CanvasPattern]},layout:__spreadValues({},layoutValidateRule(e))}}}),imageValidateRule=e=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},url:{required:!0,type:"string"},layout:__spreadValues({},layoutValidateRule(e))}}}),videoValidateRule=e=>({type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},url:{required:!0,type:"string"},layout:__spreadValues({},layoutValidateRule(e))}}});function startValidateRule(e){return{name:"VideoMixerOptions",type:"object",required:!0,allowEmpty:!1,properties:{view:__spreadValues({},viewValidateRule(e)),canvasInfo:__spreadValues({},canvasValidateRule(e,!0)),camera:__spreadValues({},cameraValidateRule(e)),screen:__spreadValues({},screenValidateRule(e)),text:__spreadValues({},textValidateRule(e)),image:__spreadValues({},imageValidateRule(e)),video:__spreadValues({},videoValidateRule(e))},validate(r,t,i,o){const{RtcError:a,ErrorCode:s,ErrorCodeDictionary:c}=e.errorModule;if(e.environment.isMobile())throw new a({code:s.ENV_NOT_SUPPORTED,message:"VideoMixer is not supported on mobile devices currently"});const{onScreenShareStop:n}=r;if(n&&!e.utils.isFunction(n))throw new a({code:s.INVALID_PARAMETER,extraCode:c.INVALID_PARAMETER_TYPE,fnName:i,messageParams:{key:"onScreenShareStop",value:typeof n,rule:{type:"Function"}}})}}}function updateValidateRule(e){return{name:"VideoMixerOptions",type:"object",required:!1,allowEmpty:!1,properties:{view:__spreadValues({},viewValidateRule(e)),canvasInfo:__spreadValues({},canvasValidateRule(e)),camera:__spreadValues({},cameraValidateRule(e)),screen:__spreadValues({},screenValidateRule(e)),text:__spreadValues({},textValidateRule(e)),image:__spreadValues({},imageValidateRule(e)),video:__spreadValues({},videoValidateRule(e))}}}function stopValidateRule(e){return{name:"StopVideoMixerOptions",required:!1}}var videoMixSeq=0,_VideoMixer=class e{constructor(e){this.core=e,__publicField(this,"seq"),__publicField(this,"log"),__publicField(this,"localMixVideoTrack",null),__publicField(this,"systemAudioTrackList",{}),__publicField(this,"_mixVideoConfig"),__publicField(this,"onScreenShareStop"),__publicField(this,"eventListeners",new Map),videoMixSeq+=1,this.seq=videoMixSeq,this.log=e.log.createChild({id:`${this.getAlias()}${videoMixSeq}`}),this.log.info("created")}getName(){return e.Name}getAlias(){return"vmix"}getValidateRule(e){switch(e){case"start":return startValidateRule(this.core);case"update":return updateValidateRule(this.core);case"stop":return stopValidateRule(this.core)}}getGroup(){return"vmix"}async start(e){this.localMixVideoTrack||(this.localMixVideoTrack=new this.core.LocalMixVideoTrack(this.core.room.videoManager)),this._mixVideoConfig={canvasInfo:{width:1920,height:1080}},e=this.core.utils.deepCloneBasic(e);const{view:r,onScreenShareStop:t}=e,i=await this.parseMixOptions(e);return t&&(this.onScreenShareStop=t,this._mixVideoConfig.onScreenShareStop=t),this._updatePreview({view:r,track:this.localMixVideoTrack}),this.core.utils.isUndefined(r)||(this._mixVideoConfig.view=r),await this.localMixVideoTrack.startMix(),{track:this.localMixVideoTrack._outputTrack,systemAudioTrackList:this.systemAudioTrackList,result:i}}async update(e){const{RtcError:r,ErrorCode:t}=this.core.errorModule;if(!this.localMixVideoTrack)throw new r({code:t.INVALID_OPERATION,message:"mixTrack doesn't initialize!"});e=this.core.utils.deepCloneBasic(e);const{view:i}=e,o=await this.parseMixOptions(e);return await this._updatePreview({view:i,track:this.localMixVideoTrack,prevConfig:this._mixVideoConfig}),this.core.utils.isUndefined(i)||(this._mixVideoConfig.view=i),{track:this.localMixVideoTrack._outputTrack,systemAudioTrackList:this.systemAudioTrackList,result:o}}stop(){var e;this.eventListeners.forEach((e,r)=>{this.removeEventListeners(r)}),this.eventListeners.clear(),null==(e=this.localMixVideoTrack)||e.close(),this.localMixVideoTrack=null,Object.values(this.systemAudioTrackList).forEach(e=>e.stop()),this.systemAudioTrackList={},delete this.onScreenShareStop,delete this._mixVideoConfig}async parseMixOptions(e){const{RtcError:r,ErrorCode:t}=this.core.errorModule;if(!this.localMixVideoTrack||!this._mixVideoConfig)return{successOptions:{},failedDetails:[]};const i=[],o=__spreadValues({},e),{canvasInfo:a,camera:s,screen:c,text:n,image:d,video:l}=e;a&&this.parseCanvasOptions(a);let u=0,p=0;const h=[{key:"camera",options:s,parser:this.parseCameraOptions.bind(this)},{key:"screen",options:c,parser:this.parseScreenOptions.bind(this)},{key:"text",options:n,parser:this.parseTextOptions.bind(this)},{key:"image",options:d,parser:this.parseImageOptions.bind(this)},{key:"video",options:l,parser:this.parseVideoOptions.bind(this)}];for(const{key:e,options:r,parser:t}of h)if(r){u++;const a=await t(this.localMixVideoTrack,r,this._mixVideoConfig[e]||[]);this._mixVideoConfig[e]=a.finalOptions,o[e]=a.finalOptions,a.errors.length>0&&(i.push(...a.errors),a.errors.length===r.length&&p++)}if(p>0&&p===u)throw new r({code:t.INVALID_PARAMETER,message:"all sources mix failed",data:{failedDetails:i}});return{successOptions:o,failedDetails:i}}parseCanvasOptions(e){if(!this.localMixVideoTrack||!this._mixVideoConfig)return;const{canvasColor:r,width:t,height:i,frameRate:o}=e;r&&this.localMixVideoTrack.setMixBackground(r),o&&this.localMixVideoTrack.setFps(o),this.localMixVideoTrack.resizeMixCanvas(t,i),this._mixVideoConfig.canvasInfo=e}prepareSourceOptions(e,r){const t=new Set(e.map(e=>e.id));return{removeIdList:r.filter(e=>!t.has(e.id)).map(e=>e.id),preOptionsMap:new Map(r.map(e=>[e.id,e]))}}recordSourceError(e,r,t,i,o){o.push({id:e,error:r}),t.has(e)&&i.push(t.get(e))}async parseCameraOptions(e,r,t=[]){const{removeIdList:i,preOptionsMap:o}=this.prepareSourceOptions(r,t);for(const r of i)e.removeCameraSource(r);const a=[],s=[];for(const t of r)try{await this.processSingleCameraSource(e,t),a.push(t)}catch(e){this.recordSourceError(t.id,e,o,a,s)}return{finalOptions:a,errors:s}}async processSingleCameraSource(e,r){var t;const{id:i,layout:o,profile:a,useInternalTrack:s}=r;s&&((null==(t=this.core.trtc.localVideoTrack)?void 0:t.sourceTrack)?r.videoTrack=this.core.trtc.localVideoTrack.sourceTrack:r.videoTrack=this.createPlaceholderVideoTrack()),this.log.info(`videomixer camera option ${JSON.stringify(r)}`),e.inputLocalVideoTracks.has(i)?await this.updateExistingCameraSource(e,r):await this.addNewCameraSource(e,r)}async updateExistingCameraSource(e,r){var t,i;const{id:o,layout:a,profile:s}=r,c=null==(t=e.inputLocalVideoTracks.get(o))?void 0:t.mediaTrack;await this.updateCameraProfile(r);const n=null==(i=e.inputLocalVideoTracks.get(o))?void 0:i.mediaTrack,d=this.resolveVideoProfile(s);n!==c?e.updateCameraSource(o,a,n,d):e.updateCameraSource(o,a,null,d)}async addNewCameraSource(e,r){const{id:t,layout:i,useInternalTrack:o}=r,a=await this.captureCamera(r);if(this.removeEventListeners(t),o){const r=r=>{var i,o;if(null==(i=r.track)?void 0:i.isScreen)return;this.log.info("videomixer camera LOCAL_TRACK_CAPTURE_SUCCESS");const a=e.inputLocalVideoTracks.get(t);a&&(null==(o=r.track)?void 0:o.sourceTrack)&&a.setInputMediaStreamTrack(r.track.sourceTrack)};this.core.innerEmitter.on("102",r),this.eventListeners.has(t)||this.eventListeners.set(t,{}),this.eventListeners.get(t).captureSuccess=()=>{this.core.innerEmitter.off("102",r)}}try{e.addCameraSource(t,a,i)}catch(e){throw a.close(),e}}resolveVideoProfile(e){if(!this.core.utils.isUndefined(e))return this.core.utils.isString(e)?this.core.constants.videoProfileMap[e]:e}async parseScreenOptions(e,r,t=[]){const{removeIdList:i,preOptionsMap:o}=this.prepareSourceOptions(r,t);for(const r of i)e.removeScreenSource(r),this.removeSystemAudioTrack(r);const a=[],s=[];for(const t of r)try{await this.processSingleScreenSource(e,t,o),a.push(t)}catch(e){this.recordSourceError(t.id,e,o,a,s)}return{finalOptions:a,errors:s}}async processSingleScreenSource(e,r,t){var i,o;const{id:a,layout:s,useInternalTrack:c}=r;c&&((null==(i=this.core.trtc.localScreenTrack)?void 0:i.mediaTrack)?(r.videoTrack=this.core.trtc.localScreenTrack.mediaTrack,(null==(o=this.core.trtc.localScreenAudioTrack)?void 0:o.mediaTrack)&&(r.audioTrack=this.core.trtc.localScreenAudioTrack.mediaTrack),delete r.captureElement,delete r.preferDisplaySurface,delete r.systemAudio):r.videoTrack=this.createPlaceholderVideoTrack()),this.log.info(`videomixer screen option ${JSON.stringify(r)}`);const n=t.get(a),d=e.inputLocalScreenTracks.has(a),l=!(null==n?void 0:n.systemAudio)&&r.systemAudio;d&&!l?this.updateExistingScreenSource(e,a,s,n,r):await this.addNewScreenSource(e,r,n)}updateExistingScreenSource(e,r,t,i,o){e.updateScreenSource(r,t),(null==i?void 0:i.systemAudio)&&!o.systemAudio&&this.removeSystemAudioTrack(r)}async addNewScreenSource(e,r,t){const{id:i,useInternalTrack:o}=r,a=await this.captureScreen(r);if(this.removeEventListeners(i),o){const r=r=>{var t,o,a;if(!(null==(t=r.track)?void 0:t.isScreen))return;this.log.info("videomixer screen LOCAL_TRACK_CAPTURE_SUCCESS");const s=e.inputLocalScreenTracks.get(i);s&&(null==(o=r.track)?void 0:o.mediaTrack)&&s.setInputMediaStreamTrack(r.track.mediaTrack),this.systemAudioTrackList[i]&&(null==(a=r.track)?void 0:a.mediaTrack)&&(this.systemAudioTrackList[i]=r.track.mediaTrack)};this.core.innerEmitter.on("102",r),this.eventListeners.has(i)||this.eventListeners.set(i,{}),this.eventListeners.get(i).captureSuccess=()=>{this.core.innerEmitter.off("102",r)}}!(null==t?void 0:t.systemAudio)&&r.systemAudio&&e.inputLocalScreenTracks.has(r.id)&&e.removeScreenSource(r.id);try{e.addScreenSource(r.id,a,r.layout)}catch(e){throw a.close(),e}}async parseTextOptions(e,r,t=[]){const{removeIdList:i,preOptionsMap:o}=this.prepareSourceOptions(r,t);for(const r of i)e.removeTextSource(r);const a=[],s=[];for(const t of r)try{o.has(t.id)?e.updateTextSource(t):e.addTextSource(t),a.push(t)}catch(e){this.recordSourceError(t.id,e,o,a,s)}return{finalOptions:a,errors:s}}async parseImageOptions(e,r,t=[]){const{removeIdList:i,preOptionsMap:o}=this.prepareSourceOptions(r,t);for(const r of i)e.removeImageSource(r);const a=[],s=[];for(const t of r)try{await this.processSingleImageSource(e,t,o),a.push(t)}catch(e){this.recordSourceError(t.id,e,o,a,s)}return{finalOptions:a,errors:s}}async processSingleImageSource(e,r,t){const{id:i,url:o,layout:a}=r,s=t.get(i);if(s){let r;s.url!==o&&(r=await this.core.utils.loadImage(o)),e.updateImageSource(i,a,r)}else{const r=await this.core.utils.loadImage(o);e.addImageSource(i,r,a)}}async parseVideoOptions(e,r,t=[]){const{removeIdList:i,preOptionsMap:o}=this.prepareSourceOptions(r,t);for(const r of i)e.removeVideoSource(r);const a=[],s=[];for(const t of r)try{await this.processSingleVideoSource(e,t,o),a.push(t)}catch(e){this.recordSourceError(t.id,e,o,a,s)}return{finalOptions:a,errors:s}}async processSingleVideoSource(e,r,t){const{id:i,url:o,layout:a}=r,s=t.get(i);if(s){let r;s.url!==o&&(r=await this.core.utils.loadVideo(o)),e.updateVideoSource(i,a,r)}else{const r=await this.core.utils.loadVideo(o);e.addVideoSource(i,r,a)}}createPlaceholderVideoTrack(){const e=document.createElement("canvas");e.width=640,e.height=480;const r=e.getContext("2d");r&&(r.fillStyle="black",r.fillRect(0,0,e.width,e.height));return e.captureStream(1).getVideoTracks()[0]}removeEventListeners(e){const r=this.eventListeners.get(e);r&&(r.inputMediaTrackChanged&&r.inputMediaTrackChanged(),r.captureSuccess&&r.captureSuccess(),this.eventListeners.delete(e))}async captureCamera(e){const{id:r,cameraId:t,videoTrack:i,profile:o}=e,a=new this.core.LocalVideoTrack;a.log.id+=`-${r}`;const s={};if(t?s.deviceId=t:this.core.utils.isUndefined(i)||(s.customSource=i),!this.core.utils.isUndefined(o)){const e=this.resolveVideoProfile(o);e&&a.setProfile(e)}return await a.capture(s),a}async updateCameraProfile(e){var r;const{id:t,cameraId:i,videoTrack:o,profile:a}=e,s=null==(r=this.localMixVideoTrack)?void 0:r.inputLocalVideoTracks.get(t);if(s&&(i?await s.switchDevice(i):this.core.utils.isUndefined(o)||await s.setInputMediaStreamTrack(o),!this.core.utils.isUndefined(a))){const e=this.resolveVideoProfile(a);e&&s.setProfile(e),i&&s.isNeedToSwitchDevice(i)||await s.applyProfile()}}async captureScreen(e){const{id:r,profile:t,captureElement:i,preferDisplaySurface:o,systemAudio:a,videoTrack:s,audioTrack:c}=e,n=new this.core.LocalScreenTrack;n.log.id+=`-${r}`;const d={captureElement:i,preferDisplaySurface:o,systemAudio:a,videoTrack:s,audioTrack:c};if(!this.core.utils.isUndefined(t))if(this.core.utils.isString(t)){const e=this.core.constants.screenProfileMap[t];e&&n.setProfile(e)}else n.setProfile(t);const l=await n.capture(d);return a&&l.getAudioTracks().length>0?(this.systemAudioTrackList[r]=l.getAudioTracks()[0],this.log.info(`${r} system audio track captured`)):this.removeSystemAudioTrack(r),n.mediaTrack.addEventListener(this.core.constants.NAME.ENDED,()=>{this.handleScreenShareEnded(r)}),n}handleScreenShareEnded(e){var r,t,i;null==(r=this.localMixVideoTrack)||r.removeScreenSource(e),(null==(t=this._mixVideoConfig)?void 0:t.screen)&&(this._mixVideoConfig.screen=this._mixVideoConfig.screen.filter(r=>r.id!==e)),null==(i=this.onScreenShareStop)||i.call(this,e)}async _updatePreview({view:e,track:r,prevConfig:t}){if(this.core.utils.isUndefined(e)&&(null==t?void 0:t.view)){const e=this.core.utils.getViewListFromView(t.view);return void(e.length>0&&await r.play(e))}if(!this.core.utils.isUndefined(e)){const t=this.core.utils.getViewListFromView(e);t.length>0?await r.play(t):r.stop()}}removeSystemAudioTrack(e){const r=this.systemAudioTrackList[e];r&&(r.stop(),this.log.info(`${e} system audio track stop`),delete this.systemAudioTrackList[e])}};__publicField(_VideoMixer,"Name","VideoMixer");var VideoMixer=_VideoMixer,index_default=VideoMixer;export{index_default as default};export{VideoMixer};
@@ -1,3 +1,3 @@
1
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(e="undefined"!=typeof globalThis?globalThis:e||self).VideoMixer=r()}(this,function(){"use strict";function e(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=Array(r);t<r;t++)n[t]=e[t];return n}function r(e,r,t,n,i,o,a){try{var s=e[o](a),c=s.value}catch(e){return void t(e)}s.done?r(c):Promise.resolve(c).then(n,i)}function t(e){return function(){var t=this,n=arguments;return new Promise(function(i,o){var a=e.apply(t,n);function s(e){r(a,i,o,s,c,"next",e)}function c(e){r(a,i,o,s,c,"throw",e)}s(void 0)})}}function n(e,r,t){return r&&function(e,r){for(var t=0;t<r.length;t++){var n=r[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,u(n.key),n)}}(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function i(e,r){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!t){if(Array.isArray(e)||(t=f(e))||r){t&&(e=t);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==t.return||t.return()}finally{if(s)throw o}}}}function o(){
1
+ !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(e="undefined"!=typeof globalThis?globalThis:e||self).VideoMixer=r()}(this,function(){"use strict";function e(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,i=Array(r);t<r;t++)i[t]=e[t];return i}function r(e,r,t,i,n,o,a){try{var s=e[o](a),c=s.value}catch(e){return void t(e)}s.done?r(c):Promise.resolve(c).then(i,n)}function t(e){return function(){var t=this,i=arguments;return new Promise(function(n,o){var a=e.apply(t,i);function s(e){r(a,n,o,s,c,"next",e)}function c(e){r(a,n,o,s,c,"throw",e)}s(void 0)})}}function i(e,r,t){return r&&function(e,r){for(var t=0;t<r.length;t++){var i=r[t];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,c(i.key),i)}}(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function n(e,r){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!t){if(Array.isArray(e)||(t=l(e))||r){t&&(e=t);var i=0,n=function(){};return{s:n,n:function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==t.return||t.return()}finally{if(s)throw o}}}}function o(){
2
2
  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
3
- var e,r,t="function"==typeof Symbol?Symbol:{},n=t.iterator||"@@iterator",i=t.toStringTag||"@@toStringTag";function s(t,n,i,o){var s=n&&n.prototype instanceof u?n:u,l=Object.create(s.prototype);return a(l,"_invoke",function(t,n,i){var o,a,s,u=0,l=i||[],f=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(r,t){return o=r,a=0,s=e,d.n=t,c}};function p(t,n){for(a=t,s=n,r=0;!f&&u&&!i&&r<l.length;r++){var i,o=l[r],p=d.p,h=o[2];t>3?(i=h===n)&&(s=o[(a=o[4])?5:(a=3,3)],o[4]=o[5]=e):o[0]<=p&&((i=t<2&&p<o[1])?(a=0,d.v=n,d.n=o[1]):p<h&&(i=t<3||o[0]>n||n>h)&&(o[4]=t,o[5]=n,d.n=h,a=0))}if(i||t>1)return c;throw f=!0,n}return function(i,l,h){if(u>1)throw TypeError("Generator is already running");for(f&&1===l&&p(l,h),a=l,s=h;(r=a<2?e:s)||!f;){o||(a?a<3?(a>1&&(d.n=-1),p(a,s)):d.n=s:d.v=s);try{if(u=2,o){if(a||(i="next"),r=o[i]){if(!(r=r.call(o,s)))throw TypeError("iterator result is not an object");if(!r.done)return r;s=r.value,a<2&&(a=0)}else 1===a&&(r=o.return)&&r.call(o),a<2&&(s=TypeError("The iterator does not provide a '"+i+"' method"),a=1);o=e}else if((r=(f=d.n<0)?s:t.call(n,d))!==c)break}catch(r){o=e,a=1,s=r}finally{u=1}}return{value:r,done:f}}}(t,i,o),!0),l}var c={};function u(){}function l(){}function f(){}r=Object.getPrototypeOf;var d=[][n]?r(r([][n]())):(a(r={},n,function(){return this}),r),p=f.prototype=u.prototype=Object.create(d);function h(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,a(e,i,"GeneratorFunction")),e.prototype=Object.create(p),e}return l.prototype=f,a(p,"constructor",f),a(f,"constructor",l),l.displayName="GeneratorFunction",a(f,i,"GeneratorFunction"),a(p),a(p,i,"Generator"),a(p,n,function(){return this}),a(p,"toString",function(){return"[object Generator]"}),(o=function(){return{w:s,m:h}})()}function a(e,r,t,n){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}a=function(e,r,t,n){function o(r,t){a(e,r,function(e){return this._invoke(r,t,e)})}r?i?i(e,r,{value:t,enumerable:!n,configurable:!n,writable:!n}):e[r]=t:(o("next",0),o("throw",1),o("return",2))},a(e,r,t,n)}function s(e){if(null!=e){var r=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],t=0;if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&t>=e.length&&(e=void 0),{value:e&&e[t++],done:!e}}}}throw new TypeError(typeof e+" is not iterable")}function c(r){return function(r){if(Array.isArray(r))return e(r)}(r)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||f(r)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e){var r=function(e,r){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,r);if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"==typeof r?r:r+""}function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function f(r,t){if(r){if("string"==typeof r)return e(r,t);var n={}.toString.call(r).slice(8,-1);return"Object"===n&&r.constructor&&(n=r.constructor.name),"Map"===n||"Set"===n?Array.from(r):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?e(r,t):void 0}}var d=Object.defineProperty,p=Object.getOwnPropertySymbols,h=Object.prototype.hasOwnProperty,m=Object.prototype.propertyIsEnumerable,y=function(e,r,t){return r in e?d(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t},v=function(e,r){for(var t in r||(r={}))h.call(r,t)&&y(e,t,r[t]);if(p){var n,o=i(p(r));try{for(o.s();!(n=o.n()).done;){t=n.value;m.call(r,t)&&y(e,t,r[t])}}catch(e){o.e(e)}finally{o.f()}}return e},g=function(e,r,t){return y(e,"symbol"!==l(r)?r+"":r,t)},b={x:{required:!0,type:"number"},y:{required:!0,type:"number"},width:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},height:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},zIndex:{required:!0,type:"number"},fillMode:{required:!1,type:"string"},mirror:{required:!1,type:"boolean"},rotation:{required:!1,type:"number"},hidden:{required:!1,type:"boolean"}},k=function(e){return{type:"object",required:arguments.length>1&&void 0!==arguments[1]&&arguments[1],properties:{canvasColor:{required:!1,type:["string",CanvasGradient,CanvasPattern]},width:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},height:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},frameRate:{required:!1,type:"number",notLessThanZero:!0,min:1,max:60}},validate:function(r,t,n){var i=e.errorModule,o=i.RtcError,a=i.ErrorCode;if(i.ErrorCodeDictionary,r){var s=r.width,c=r.height;if(s&&c&&s*c>8294400)throw new o({code:a.INVALID_PARAMETER,message:"The mix resolution cannot be set higher than 3840 * 2160."})}}}},S=function(e){return{required:!1,type:["string",HTMLElement,null],validate:function(r,t,n){var i=e.errorModule,o=i.RtcError,a=i.ErrorCode,s=i.ErrorCodeDictionary;if(e.utils.isString(r)&&!document.getElementById(r))throw new o({code:a.INVALID_PARAMETER,extraCode:s.INVALID_ELEMENT_ID,fnName:n,messageParams:{key:t}})}}},w=function(e){return{type:"object",required:!(arguments.length>1&&void 0!==arguments[1])||arguments[1],properties:v({},b),validate:function(r,t,n){var i=e.errorModule,o=i.RtcError,a=i.ErrorCode,s=i.ErrorCodeDictionary;if(r){if(r.fillMode&&!["contain","cover","fill"].includes(r.fillMode))throw new o({code:a.INVALID_PARAMETER,extraCode:s.INVALID_PARAMETER_TYPE,message:"The fillMode parameter must be 'contain', 'cover' or 'fill'",fnName:n});if(r.rotation&&![0,90,180,270].includes(r.rotation))throw new o({code:a.INVALID_PARAMETER,extraCode:s.INVALID_PARAMETER_TYPE,message:"The rotation parameter must be 0, 90, 180 or 270",fnName:n})}}}},T=function(e){return{type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},cameraId:{required:!1,type:"string"},videoTrack:{required:!1,instanceof:MediaStreamTrack},profile:{required:!1,type:["string","object"],properties:{width:{type:"number"},height:{type:"number"},frameRate:{type:"number"},bitrate:{type:"number"}}},layout:v({},w(e))}}}},x=function(e){return{type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},profile:{required:!1,type:["string","object"],properties:{width:{type:"number"},height:{type:"number"},frameRate:{type:"number"},bitrate:{type:"number"}}},captureElement:{required:!1,type:HTMLElement},preferDisplaySurface:{required:!1,type:"string"},layout:v({},w(e))},validate:function(r,t,n){var i=e.errorModule,o=i.RtcError,a=i.ErrorCode,s=i.ErrorCodeDictionary;if(!e.rtcDectection.isScreenCaptureApiAvailable())throw new o({code:a.ENV_NOT_SUPPORTED,fnName:n,extraCode:s.NOT_SUPPORTED_SCREEN_SHARE})}}}},V=function(e){return{type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},content:{required:!0,type:"string"},font:{required:!1,type:"string"},color:{required:!1,type:["string",CanvasGradient,CanvasPattern]},layout:v({},w(e))}}}},E=function(e){return{type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},url:{required:!0,type:"string"},layout:v({},w(e))}}}},M=function(e){return{type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},url:{required:!0,type:"string"},layout:v({},w(e))}}}};var A=0,C=function(){function e(r){!function(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}(this,e),this.core=r,g(this,"seq"),g(this,"log"),g(this,"localMixVideoTrack",null),g(this,"systemAudioTrackList",{}),g(this,"_mixVideoConfig"),g(this,"onScreenShareStop"),A+=1,this.seq=A,this.log=r.log.createChild({id:"".concat(this.getAlias()).concat(A)}),this.log.info("created")}return n(e,[{key:"getName",value:function(){return e.Name}},{key:"getAlias",value:function(){return"vmix"}},{key:"getValidateRule",value:function(e){switch(e){case"start":return r=this.core,{name:"VideoMixerOptions",type:"object",required:!0,allowEmpty:!1,properties:{view:v({},S(r)),canvasInfo:v({},k(r,!0)),camera:v({},T(r)),screen:v({},x(r)),text:v({},V(r)),image:v({},E(r)),video:v({},M(r))},validate:function(e,t,n,i){var o=r.errorModule,a=o.RtcError,s=o.ErrorCode,c=o.ErrorCodeDictionary;if(r.environment.isMobile())throw new a({code:s.ENV_NOT_SUPPORTED,message:"VideoMixer is not supported on mobile devices currently"});var u=e.onScreenShareStop;if(u&&!r.utils.isFunction(u))throw new a({code:s.INVALID_PARAMETER,extraCode:c.INVALID_PARAMETER_TYPE,fnName:n,messageParams:{key:"onScreenShareStop",value:l(u),rule:{type:"Function"}}})}};case"update":return function(e){return{name:"VideoMixerOptions",type:"object",required:!1,allowEmpty:!1,properties:{view:v({},S(e)),canvasInfo:v({},k(e)),camera:v({},T(e)),screen:v({},x(e)),text:v({},V(e)),image:v({},E(e)),video:v({},M(e))}}}(this.core);case"stop":return this.core,{name:"StopVideoMixerOptions",required:!1}}var r}},{key:"getGroup",value:function(){return"vmix"}},{key:"start",value:(_=t(o().m(function e(r){var t,n,i,a;return o().w(function(e){for(;;)switch(e.n){case 0:return this.localMixVideoTrack||(this.localMixVideoTrack=new this.core.LocalMixVideoTrack(this.core.room.videoManager)),this._mixVideoConfig={canvasInfo:{width:1920,height:1080}},r=this.core.utils.deepCloneBasic(r),n=(t=r).view,i=t.onScreenShareStop,e.n=1,this.parseMixOptions(r);case 1:return a=e.v,i&&(this.onScreenShareStop=i,this._mixVideoConfig.onScreenShareStop=i),this._updatePreview({view:n,track:this.localMixVideoTrack}),this.core.utils.isUndefined(n)||(this._mixVideoConfig.view=n),e.n=2,this.localMixVideoTrack.startMix();case 2:return e.a(2,{track:this.localMixVideoTrack._outputTrack,systemAudioTrackList:this.systemAudioTrackList,result:a})}},e,this)})),function(e){return _.apply(this,arguments)})},{key:"update",value:(P=t(o().m(function e(r){var t,n,i,a,s;return o().w(function(e){for(;;)switch(e.n){case 0:if(t=this.core.errorModule,n=t.RtcError,i=t.ErrorCode,this.localMixVideoTrack){e.n=1;break}throw new n({code:i.INVALID_OPERATION,message:"mixTrack doesn't initialize!"});case 1:return r=this.core.utils.deepCloneBasic(r),a=r.view,e.n=2,this.parseMixOptions(r);case 2:return s=e.v,e.n=3,this._updatePreview({view:a,track:this.localMixVideoTrack,prevConfig:this._mixVideoConfig});case 3:return this.core.utils.isUndefined(a)||(this._mixVideoConfig.view=a),e.a(2,{track:this.localMixVideoTrack._outputTrack,systemAudioTrackList:this.systemAudioTrackList,result:s})}},e,this)})),function(e){return P.apply(this,arguments)})},{key:"parseMixOptions",value:(I=t(o().m(function e(r){var t,n,i,a,s,u,l,f,d,p,h,m,y,g,b,k,S,w,T,x,V,E,M,A,C,O,I,P,_,L,q,R,N;return o().w(function(e){for(;;)switch(e.n){case 0:if(t={successOptions:{},failedDetails:[]},n=this.core.errorModule,i=n.RtcError,a=n.ErrorCode,n.ErrorCodeDictionary,this.localMixVideoTrack&&this._mixVideoConfig){e.n=1;break}return e.a(2,t);case 1:if(s=[],u=v({},r),l=r.canvasInfo,f=r.camera,d=r.screen,p=r.text,h=r.image,m=r.video,y=0,g=0,l&&(b=l.canvasColor,k=l.width,S=l.height,w=l.frameRate,b&&this.localMixVideoTrack.setMixBackground(b),w&&this.localMixVideoTrack.setFps(w),this.localMixVideoTrack.resizeMixCanvas(k,S),this._mixVideoConfig.canvasInfo=l),!f){e.n=3;break}return y++,e.n=2,this.parseCameraOptions(this.localMixVideoTrack,f,this._mixVideoConfig.camera);case 2:T=e.v,x=T.finalOptions,V=T.errors,this._mixVideoConfig.camera=x,u.camera=x,V.length>0&&(s.push.apply(s,c(V)),V.length===f.length&&g++);case 3:if(!d){e.n=5;break}return y++,e.n=4,this.parseScreenOptions(this.localMixVideoTrack,d,this._mixVideoConfig.screen);case 4:E=e.v,M=E.finalOptions,A=E.errors,this._mixVideoConfig.screen=M,u.screen=M,A.length>0&&(s.push.apply(s,c(A)),A.length===d.length&&g++);case 5:if(!p){e.n=7;break}return y++,e.n=6,this.parseTextOptions(this.localMixVideoTrack,p,this._mixVideoConfig.text);case 6:C=e.v,O=C.finalOptions,I=C.errors,this._mixVideoConfig.text=O,u.text=O,I.length>0&&(s.push.apply(s,c(I)),I.length===p.length&&g++);case 7:if(!h){e.n=9;break}return y++,e.n=8,this.parseImageOptions(this.localMixVideoTrack,h,this._mixVideoConfig.image);case 8:P=e.v,_=P.finalOptions,L=P.errors,this._mixVideoConfig.image=_,u.image=_,L.length>0&&(s.push.apply(s,c(L)),L.length===h.length&&g++);case 9:if(!m){e.n=11;break}return y++,e.n=10,this.parseVideoOptions(this.localMixVideoTrack,m,this._mixVideoConfig.video);case 10:q=e.v,R=q.finalOptions,N=q.errors,this._mixVideoConfig.video=R,u.video=R,N.length>0&&(s.push.apply(s,c(N)),N.length===m.length&&g++);case 11:if(!(g>0&&g===y)){e.n=12;break}throw new i({code:a.INVALID_PARAMETER,message:"all sources mix failed",data:{failedDetails:s}});case 12:return t={successOptions:u,failedDetails:s},e.a(2,t)}},e,this)})),function(e){return I.apply(this,arguments)})},{key:"parseCameraOptions",value:(O=t(o().m(function e(r,t){var n,a,s,c,u,l,f,d,p,h,m,y,v,g,b,k,S,w,T,x,V,E,M,A,C=arguments;return o().w(function(e){for(;;)switch(e.p=e.n){case 0:n=C.length>2&&void 0!==C[2]?C[2]:[],c=new Set(t.map(function(e){return e.id})),u=n.filter(function(e){return!c.has(e.id)}).map(function(e){return e.id}),l=i(u);try{for(l.s();!(f=l.n()).done;)d=f.value,r.removeCameraSource(d)}catch(e){l.e(e)}finally{l.f()}p=new Map(n.map(function(e){return[e.id,e]})),h=[],m=[],y=i(t),e.p=1,y.s();case 2:if((v=y.n()).done){e.n=12;break}if(g=v.value,b=g.id,k=g.layout,S=g.profile,e.p=3,!r.inputLocalVideoTracks.has(b)){e.n=5;break}return w=null==(a=r.inputLocalVideoTracks.get(b))?void 0:a.mediaTrack,e.n=4,this.updateCameraProfile(g);case 4:T=null==(s=r.inputLocalVideoTracks.get(b))?void 0:s.mediaTrack,x=void 0,S&&(x=this.core.utils.isString(S)?this.core.constants.videoProfileMap[S]:S),T!==w?r.updateCameraSource(b,k,T,x):r.updateCameraSource(b,k,null,x),e.n=9;break;case 5:return e.n=6,this.captureCamera(g);case 6:V=e.v,e.p=7,r.addCameraSource(b,V,k),e.n=9;break;case 8:throw e.p=8,E=e.v,V.close(),E;case 9:h.push(g),e.n=11;break;case 10:e.p=10,M=e.v,m.push({id:b,error:M}),p.has(b)&&h.push(p.get(b));case 11:e.n=2;break;case 12:e.n=14;break;case 13:e.p=13,A=e.v,y.e(A);case 14:return e.p=14,y.f(),e.f(14);case 15:return e.a(2,{finalOptions:h,errors:m})}},e,this,[[7,8],[3,10],[1,13,14,15]])})),function(e,r){return O.apply(this,arguments)})},{key:"parseScreenOptions",value:(C=t(o().m(function e(r,t){var n,i,a,s,c,u,l,f=arguments;return o().w(function(e){for(;;)switch(e.n){case 0:return n=f.length>2&&void 0!==f[2]?f[2]:[],i=this.prepareScreenOptions(t,n),a=i.removeIdList,s=i.preOptionsMap,this.removeUnusedScreenSources(r,a),e.n=1,this.processScreenSources(r,t,s);case 1:return c=e.v,u=c.finalOptions,l=c.errors,e.a(2,{finalOptions:u,errors:l})}},e,this)})),function(e,r){return C.apply(this,arguments)})},{key:"prepareScreenOptions",value:function(e,r){var t=new Set(e.map(function(e){return e.id}));return{removeIdList:r.filter(function(e){return!t.has(e.id)}).map(function(e){return e.id}),preOptionsMap:new Map(r.map(function(e){return[e.id,e]}))}}},{key:"removeUnusedScreenSources",value:function(e,r){var t,n=i(r);try{for(n.s();!(t=n.n()).done;){var o=t.value;e.removeScreenSource(o),this.removeSystemAudioTrack(o)}}catch(e){n.e(e)}finally{n.f()}}},{key:"processScreenSources",value:(w=t(o().m(function e(r,t,n){var a,s,c,u,l,f,d;return o().w(function(e){for(;;)switch(e.p=e.n){case 0:a=[],s=[],c=i(t),e.p=1,c.s();case 2:if((u=c.n()).done){e.n=7;break}return l=u.value,e.p=3,e.n=4,this.processSingleScreenSource(r,l,n,a);case 4:e.n=6;break;case 5:e.p=5,f=e.v,this.handleScreenSourceError(l.id,f,n,a,s);case 6:e.n=2;break;case 7:e.n=9;break;case 8:e.p=8,d=e.v,c.e(d);case 9:return e.p=9,c.f(),e.f(9);case 10:return e.a(2,{finalOptions:a,errors:s})}},e,this,[[3,5],[1,8,9,10]])})),function(e,r,t){return w.apply(this,arguments)})},{key:"processSingleScreenSource",value:(b=t(o().m(function e(r,t,n,i){var a,s,c,u,l;return o().w(function(e){for(;;)switch(e.n){case 0:if(a=t.id,s=t.layout,c=n.get(a),u=r.inputLocalScreenTracks.has(a),l=!(null==c?void 0:c.systemAudio)&&t.systemAudio,!u||l){e.n=2;break}return e.n=1,this.updateExistingScreenSource(r,a,s,c,t);case 1:e.n=3;break;case 2:return e.n=3,this.addNewScreenSource(r,t,c);case 3:i.push(t);case 4:return e.a(2)}},e,this)})),function(e,r,t,n){return b.apply(this,arguments)})},{key:"updateExistingScreenSource",value:(y=t(o().m(function e(r,t,n,i,a){return o().w(function(e){for(;;)switch(e.n){case 0:r.updateScreenSource(t,n),(null==i?void 0:i.systemAudio)&&!a.systemAudio&&this.removeSystemAudioTrack(t);case 1:return e.a(2)}},e,this)})),function(e,r,t,n,i){return y.apply(this,arguments)})},{key:"addNewScreenSource",value:(m=t(o().m(function e(r,t,n){var i,a;return o().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,this.captureScreen(t);case 1:i=e.v,!(null==n?void 0:n.systemAudio)&&t.systemAudio&&r.inputLocalScreenTracks.has(t.id)&&r.removeScreenSource(t.id),e.p=2,r.addScreenSource(t.id,i,t.layout),e.n=4;break;case 3:throw e.p=3,a=e.v,i.close(),a;case 4:return e.a(2)}},e,this,[[2,3]])})),function(e,r,t){return m.apply(this,arguments)})},{key:"handleScreenSourceError",value:function(e,r,t,n,i){i.push({id:e,error:r}),t.has(e)&&n.push(t.get(e))}},{key:"parseTextOptions",value:(h=t(o().m(function e(r,t){var n,a,c,u,l,f,d,p,h,m,y,v,g,b=arguments;return o().w(function(e){for(;;)switch(e.p=e.n){case 0:n=b.length>2&&void 0!==b[2]?b[2]:[],a=new Set(t.map(function(e){return e.id})),c=n.filter(function(e){return!a.has(e.id)}).map(function(e){return e.id}),u=i(c);try{for(u.s();!(l=u.n()).done;)f=l.value,r.removeTextSource(f)}catch(e){u.e(e)}finally{u.f()}d=new Map(n.map(function(e){return[e.id,e]})),p=[],h=[],m=i(t),e.p=1,v=o().m(function e(){var t,i;return o().w(function(e){for(;;)switch(e.n){case 0:t=y.value,i=t.id;try{n.some(function(e){return e.id===i})?r.updateTextSource(t):r.addTextSource(t),p.push(t)}catch(e){h.push({id:i,error:e}),d.has(i)&&p.push(d.get(i))}case 1:return e.a(2)}},e)}),m.s();case 2:if((y=m.n()).done){e.n=4;break}return e.d(s(v()),3);case 3:e.n=2;break;case 4:e.n=6;break;case 5:e.p=5,g=e.v,m.e(g);case 6:return e.p=6,m.f(),e.f(6);case 7:return e.a(2,{finalOptions:p,errors:h})}},e,null,[[1,5,6,7]])})),function(e,r){return h.apply(this,arguments)})},{key:"parseImageOptions",value:(p=t(o().m(function e(r,t){var n,a,c,u,l,f,d,p,h,m,y,v,g,b=this,k=arguments;return o().w(function(e){for(;;)switch(e.p=e.n){case 0:n=k.length>2&&void 0!==k[2]?k[2]:[],a=new Set(t.map(function(e){return e.id})),c=n.filter(function(e){return!a.has(e.id)}).map(function(e){return e.id}),u=i(c);try{for(u.s();!(l=u.n()).done;)f=l.value,r.removeImageSource(f)}catch(e){u.e(e)}finally{u.f()}d=new Map(n.map(function(e){return[e.id,e]})),p=[],h=[],m=i(t),e.p=1,v=o().m(function e(){var t,i,a,s,c,u,l,f;return o().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=y.value,i=t.id,a=t.url,s=t.layout,e.p=1,!(c=n.find(function(e){return e.id===i}))){e.n=4;break}if(c.url===a){e.n=3;break}return e.n=2,b.core.utils.loadImage(a);case 2:u=e.v;case 3:r.updateImageSource(i,s,u),e.n=6;break;case 4:return e.n=5,b.core.utils.loadImage(a);case 5:l=e.v,r.addImageSource(i,l,s);case 6:p.push(t),e.n=8;break;case 7:e.p=7,f=e.v,h.push({id:i,error:f}),d.has(i)&&p.push(d.get(i));case 8:return e.a(2)}},e,null,[[1,7]])}),m.s();case 2:if((y=m.n()).done){e.n=4;break}return e.d(s(v()),3);case 3:e.n=2;break;case 4:e.n=6;break;case 5:e.p=5,g=e.v,m.e(g);case 6:return e.p=6,m.f(),e.f(6);case 7:return e.a(2,{finalOptions:p,errors:h})}},e,null,[[1,5,6,7]])})),function(e,r){return p.apply(this,arguments)})},{key:"parseVideoOptions",value:(d=t(o().m(function e(r,t){var n,a,c,u,l,f,d,p,h,m,y,v,g,b=this,k=arguments;return o().w(function(e){for(;;)switch(e.p=e.n){case 0:n=k.length>2&&void 0!==k[2]?k[2]:[],a=new Set(t.map(function(e){return e.id})),c=n.filter(function(e){return!a.has(e.id)}).map(function(e){return e.id}),u=i(c);try{for(u.s();!(l=u.n()).done;)f=l.value,r.removeVideoSource(f)}catch(e){u.e(e)}finally{u.f()}d=new Map(n.map(function(e){return[e.id,e]})),p=[],h=[],m=i(t),e.p=1,v=o().m(function e(){var t,i,a,s,c,u,l,f;return o().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=y.value,i=t.id,a=t.url,s=t.layout,e.p=1,!(c=n.find(function(e){return e.id===i}))){e.n=4;break}if(c.url===a){e.n=3;break}return e.n=2,b.core.utils.loadVideo(a);case 2:u=e.v;case 3:r.updateVideoSource(i,s,u),e.n=6;break;case 4:return e.n=5,b.core.utils.loadVideo(a);case 5:l=e.v,r.addVideoSource(i,l,s);case 6:p.push(t),e.n=8;break;case 7:e.p=7,f=e.v,h.push({id:i,error:f}),d.has(i)&&p.push(d.get(i));case 8:return e.a(2)}},e,null,[[1,7]])}),m.s();case 2:if((y=m.n()).done){e.n=4;break}return e.d(s(v()),3);case 3:e.n=2;break;case 4:e.n=6;break;case 5:e.p=5,g=e.v,m.e(g);case 6:return e.p=6,m.f(),e.f(6);case 7:return e.a(2,{finalOptions:p,errors:h})}},e,null,[[1,5,6,7]])})),function(e,r){return d.apply(this,arguments)})},{key:"captureCamera",value:(f=t(o().m(function e(r){var t,n,i,a,s,c;return o().w(function(e){for(;;)switch(e.n){case 0:return t=r.id,n=r.cameraId,i=r.videoTrack,a=r.profile,(s=new this.core.LocalVideoTrack).log.id+="-".concat(t),c={},n?c.deviceId=n:this.core.utils.isUndefined(i)||(c.customSource=i),this.core.utils.isUndefined(a)||(this.core.utils.isString(a)?this.core.constants.videoProfileMap[a]&&s.setProfile(this.core.constants.videoProfileMap[a]):s.setProfile(a)),e.n=1,s.capture(c);case 1:return e.a(2,s)}},e,this)})),function(e){return f.apply(this,arguments)})},{key:"updateCameraProfile",value:(u=t(o().m(function e(r){var t,n,i,a,s,c;return o().w(function(e){for(;;)switch(e.n){case 0:if(n=r.id,i=r.cameraId,a=r.videoTrack,s=r.profile,c=null==(t=this.localMixVideoTrack)?void 0:t.inputLocalVideoTracks.get(n)){e.n=1;break}return e.a(2);case 1:if(!i){e.n=3;break}return e.n=2,c.switchDevice(i);case 2:e.n=4;break;case 3:if(this.core.utils.isUndefined(a)){e.n=4;break}return e.n=4,c.setInputMediaStreamTrack(a);case 4:if(this.core.utils.isUndefined(s)){e.n=5;break}if(this.core.utils.isString(s)?this.core.constants.videoProfileMap[s]&&c.setProfile(this.core.constants.videoProfileMap[s]):c.setProfile(s),i&&c.isNeedToSwitchDevice(i)){e.n=5;break}return e.n=5,c.applyProfile();case 5:return e.a(2)}},e,this)})),function(e){return u.apply(this,arguments)})},{key:"captureScreen",value:(a=t(o().m(function e(r){var t,n,i,a,s,c,u,l=this;return o().w(function(e){for(;;)switch(e.n){case 0:return t=r.id,n=r.profile,i=r.captureElement,a=r.preferDisplaySurface,(s=new this.core.LocalScreenTrack).log.id+="-".concat(t),c={},this.core.utils.isUndefined(n)||(this.core.utils.isString(n)?this.core.constants.screenProfileMap[n]&&s.setProfile(this.core.constants.screenProfileMap[n]):s.setProfile(n)),i&&(c.captureElement=i),a&&(c.preferDisplaySurface=a),c.systemAudio=r.systemAudio,e.n=1,s.capture(c);case 1:return u=e.v,c.systemAudio&&u.getAudioTracks().length>0?(this.systemAudioTrackList[t]=u.getAudioTracks()[0],this.log.info(t+" system audio track captured")):this.removeSystemAudioTrack(t),s.mediaTrack.addEventListener(this.core.constants.NAME.ENDED,function(){var e,r,n;null==(e=l.localMixVideoTrack)||e.removeScreenSource(t),(null==(r=l._mixVideoConfig)?void 0:r.screen)&&(l._mixVideoConfig.screen=l._mixVideoConfig.screen.filter(function(e){return e.id!==t})),null==(n=l.onScreenShareStop)||n.call(l,t)}),e.a(2,s)}},e,this)})),function(e){return a.apply(this,arguments)})},{key:"_updatePreview",value:(r=t(o().m(function e(r){var t,n,i,a,s;return o().w(function(e){for(;;)switch(e.n){case 0:if(t=r.view,n=r.track,i=r.prevConfig,!(this.core.utils.isUndefined(t)&&i&&i.view)){e.n=1;break}if(!((a=this.core.utils.getViewListFromView(i.view)).length>0)){e.n=1;break}return e.n=1,n.play(a);case 1:if(this.core.utils.isUndefined(t)){e.n=4;break}if(!((s=this.core.utils.getViewListFromView(t)).length>0)){e.n=3;break}return e.n=2,n.play(s);case 2:e.n=4;break;case 3:n.stop();case 4:return e.a(2)}},e,this)})),function(e){return r.apply(this,arguments)})},{key:"stop",value:function(){var e;null==(e=this.localMixVideoTrack)||e.close(),this.localMixVideoTrack=null,Object.values(this.systemAudioTrackList).forEach(function(e){return e.stop()}),this.systemAudioTrackList={},delete this.onScreenShareStop,delete this._mixVideoConfig}},{key:"removeSystemAudioTrack",value:function(e){this.systemAudioTrackList[e]&&(this.systemAudioTrackList[e].stop(),this.log.info(e+" system audio track stop"),delete this.systemAudioTrackList[e])}}]);var r,a,u,f,d,p,h,m,y,b,w,C,O,I,P,_}();return g(C,"Name","VideoMixer"),C});
3
+ var e,r,t="function"==typeof Symbol?Symbol:{},i=t.iterator||"@@iterator",n=t.toStringTag||"@@toStringTag";function s(t,i,n,o){var s=i&&i.prototype instanceof u?i:u,l=Object.create(s.prototype);return a(l,"_invoke",function(t,i,n){var o,a,s,u=0,l=n||[],d=!1,p={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(r,t){return o=r,a=0,s=e,p.n=t,c}};function f(t,i){for(a=t,s=i,r=0;!d&&u&&!n&&r<l.length;r++){var n,o=l[r],f=p.p,h=o[2];t>3?(n=h===i)&&(s=o[(a=o[4])?5:(a=3,3)],o[4]=o[5]=e):o[0]<=f&&((n=t<2&&f<o[1])?(a=0,p.v=i,p.n=o[1]):f<h&&(n=t<3||o[0]>i||i>h)&&(o[4]=t,o[5]=i,p.n=h,a=0))}if(n||t>1)return c;throw d=!0,i}return function(n,l,h){if(u>1)throw TypeError("Generator is already running");for(d&&1===l&&f(l,h),a=l,s=h;(r=a<2?e:s)||!d;){o||(a?a<3?(a>1&&(p.n=-1),f(a,s)):p.n=s:p.v=s);try{if(u=2,o){if(a||(n="next"),r=o[n]){if(!(r=r.call(o,s)))throw TypeError("iterator result is not an object");if(!r.done)return r;s=r.value,a<2&&(a=0)}else 1===a&&(r=o.return)&&r.call(o),a<2&&(s=TypeError("The iterator does not provide a '"+n+"' method"),a=1);o=e}else if((r=(d=p.n<0)?s:t.call(i,p))!==c)break}catch(r){o=e,a=1,s=r}finally{u=1}}return{value:r,done:d}}}(t,n,o),!0),l}var c={};function u(){}function l(){}function d(){}r=Object.getPrototypeOf;var p=[][i]?r(r([][i]())):(a(r={},i,function(){return this}),r),f=d.prototype=u.prototype=Object.create(p);function h(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,a(e,n,"GeneratorFunction")),e.prototype=Object.create(f),e}return l.prototype=d,a(f,"constructor",d),a(d,"constructor",l),l.displayName="GeneratorFunction",a(d,n,"GeneratorFunction"),a(f),a(f,n,"Generator"),a(f,i,function(){return this}),a(f,"toString",function(){return"[object Generator]"}),(o=function(){return{w:s,m:h}})()}function a(e,r,t,i){var n=Object.defineProperty;try{n({},"",{})}catch(e){n=0}a=function(e,r,t,i){function o(r,t){a(e,r,function(e){return this._invoke(r,t,e)})}r?n?n(e,r,{value:t,enumerable:!i,configurable:!i,writable:!i}):e[r]=t:(o("next",0),o("throw",1),o("return",2))},a(e,r,t,i)}function s(r){return function(r){if(Array.isArray(r))return e(r)}(r)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||l(r)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e){var r=function(e,r){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var i=t.call(e,r);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"==typeof r?r:r+""}function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function l(r,t){if(r){if("string"==typeof r)return e(r,t);var i={}.toString.call(r).slice(8,-1);return"Object"===i&&r.constructor&&(i=r.constructor.name),"Map"===i||"Set"===i?Array.from(r):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?e(r,t):void 0}}var d=Object.defineProperty,p=Object.getOwnPropertySymbols,f=Object.prototype.hasOwnProperty,h=Object.prototype.propertyIsEnumerable,v=function(e,r,t){return r in e?d(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t},y=function(e,r){for(var t in r||(r={}))f.call(r,t)&&v(e,t,r[t]);if(p){var i,o=n(p(r));try{for(o.s();!(i=o.n()).done;){t=i.value;h.call(r,t)&&v(e,t,r[t])}}catch(e){o.e(e)}finally{o.f()}}return e},m=function(e,r,t){return v(e,"symbol"!==u(r)?r+"":r,t)},k={x:{required:!0,type:"number"},y:{required:!0,type:"number"},width:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},height:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},zIndex:{required:!0,type:"number"},fillMode:{required:!1,type:"string"},mirror:{required:!1,type:"boolean"},rotation:{required:!1,type:"number"},hidden:{required:!1,type:"boolean"}},S=function(e){return{type:"object",required:arguments.length>1&&void 0!==arguments[1]&&arguments[1],properties:{canvasColor:{required:!1,type:["string",CanvasGradient,CanvasPattern]},width:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},height:{required:!0,type:"number",notLessThanZero:!0,min:1,max:3840},frameRate:{required:!1,type:"number",notLessThanZero:!0,min:1,max:60}},validate:function(r,t,i){var n=e.errorModule,o=n.RtcError,a=n.ErrorCode;if(n.ErrorCodeDictionary,r){var s=r.width,c=r.height;if(s&&c&&s*c>8294400)throw new o({code:a.INVALID_PARAMETER,message:"The mix resolution cannot be set higher than 3840 * 2160."})}}}},g=function(e){return{required:!1,type:["string",HTMLElement,null],validate:function(r,t,i){var n=e.errorModule,o=n.RtcError,a=n.ErrorCode,s=n.ErrorCodeDictionary;if(e.utils.isString(r)&&!document.getElementById(r))throw new o({code:a.INVALID_PARAMETER,extraCode:s.INVALID_ELEMENT_ID,fnName:i,messageParams:{key:t}})}}},b=function(e){return{type:"object",required:!(arguments.length>1&&void 0!==arguments[1])||arguments[1],properties:y({},k),validate:function(r,t,i){var n=e.errorModule,o=n.RtcError,a=n.ErrorCode,s=n.ErrorCodeDictionary;if(r){if(r.fillMode&&!["contain","cover","fill"].includes(r.fillMode))throw new o({code:a.INVALID_PARAMETER,extraCode:s.INVALID_PARAMETER_TYPE,message:"The fillMode parameter must be 'contain', 'cover' or 'fill'",fnName:i});if(r.rotation&&![0,90,180,270].includes(r.rotation))throw new o({code:a.INVALID_PARAMETER,extraCode:s.INVALID_PARAMETER_TYPE,message:"The rotation parameter must be 0, 90, 180 or 270",fnName:i})}}}},T=function(e){return{type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},cameraId:{required:!1,type:"string"},videoTrack:{required:!1,instanceof:MediaStreamTrack},profile:{required:!1,type:["string","object"],properties:{width:{type:"number"},height:{type:"number"},frameRate:{type:"number"},bitrate:{type:"number"}}},layout:y({},b(e))}}}},w=function(e){return{type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},profile:{required:!1,type:["string","object"],properties:{width:{type:"number"},height:{type:"number"},frameRate:{type:"number"},bitrate:{type:"number"}}},captureElement:{required:!1,type:HTMLElement},preferDisplaySurface:{required:!1,type:"string"},layout:y({},b(e))},validate:function(r,t,i){var n=e.errorModule,o=n.RtcError,a=n.ErrorCode,s=n.ErrorCodeDictionary;if(!e.rtcDectection.isScreenCaptureApiAvailable())throw new o({code:a.ENV_NOT_SUPPORTED,fnName:i,extraCode:s.NOT_SUPPORTED_SCREEN_SHARE})}}}},E=function(e){return{type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},content:{required:!0,type:"string"},font:{required:!1,type:"string"},color:{required:!1,type:["string",CanvasGradient,CanvasPattern]},layout:y({},b(e))}}}},x=function(e){return{type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},url:{required:!0,type:"string"},layout:y({},b(e))}}}},V=function(e){return{type:"array",required:!1,arrayItem:{type:"object",properties:{id:{required:!0,type:"string"},url:{required:!0,type:"string"},layout:y({},b(e))}}}};var A=0,C=function(){function e(r){!function(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}(this,e),this.core=r,m(this,"seq"),m(this,"log"),m(this,"localMixVideoTrack",null),m(this,"systemAudioTrackList",{}),m(this,"_mixVideoConfig"),m(this,"onScreenShareStop"),m(this,"eventListeners",new Map),A+=1,this.seq=A,this.log=r.log.createChild({id:"".concat(this.getAlias()).concat(A)}),this.log.info("created")}return i(e,[{key:"getName",value:function(){return e.Name}},{key:"getAlias",value:function(){return"vmix"}},{key:"getValidateRule",value:function(e){switch(e){case"start":return r=this.core,{name:"VideoMixerOptions",type:"object",required:!0,allowEmpty:!1,properties:{view:y({},g(r)),canvasInfo:y({},S(r,!0)),camera:y({},T(r)),screen:y({},w(r)),text:y({},E(r)),image:y({},x(r)),video:y({},V(r))},validate:function(e,t,i,n){var o=r.errorModule,a=o.RtcError,s=o.ErrorCode,c=o.ErrorCodeDictionary;if(r.environment.isMobile())throw new a({code:s.ENV_NOT_SUPPORTED,message:"VideoMixer is not supported on mobile devices currently"});var l=e.onScreenShareStop;if(l&&!r.utils.isFunction(l))throw new a({code:s.INVALID_PARAMETER,extraCode:c.INVALID_PARAMETER_TYPE,fnName:i,messageParams:{key:"onScreenShareStop",value:u(l),rule:{type:"Function"}}})}};case"update":return function(e){return{name:"VideoMixerOptions",type:"object",required:!1,allowEmpty:!1,properties:{view:y({},g(e)),canvasInfo:y({},S(e)),camera:y({},T(e)),screen:y({},w(e)),text:y({},E(e)),image:y({},x(e)),video:y({},V(e))}}}(this.core);case"stop":return this.core,{name:"StopVideoMixerOptions",required:!1}}var r}},{key:"getGroup",value:function(){return"vmix"}},{key:"start",value:(q=t(o().m(function e(r){var t,i,n,a;return o().w(function(e){for(;;)switch(e.n){case 0:return this.localMixVideoTrack||(this.localMixVideoTrack=new this.core.LocalMixVideoTrack(this.core.room.videoManager)),this._mixVideoConfig={canvasInfo:{width:1920,height:1080}},r=this.core.utils.deepCloneBasic(r),i=(t=r).view,n=t.onScreenShareStop,e.n=1,this.parseMixOptions(r);case 1:return a=e.v,n&&(this.onScreenShareStop=n,this._mixVideoConfig.onScreenShareStop=n),this._updatePreview({view:i,track:this.localMixVideoTrack}),this.core.utils.isUndefined(i)||(this._mixVideoConfig.view=i),e.n=2,this.localMixVideoTrack.startMix();case 2:return e.a(2,{track:this.localMixVideoTrack._outputTrack,systemAudioTrackList:this.systemAudioTrackList,result:a})}},e,this)})),function(e){return q.apply(this,arguments)})},{key:"update",value:(_=t(o().m(function e(r){var t,i,n,a,s;return o().w(function(e){for(;;)switch(e.n){case 0:if(t=this.core.errorModule,i=t.RtcError,n=t.ErrorCode,this.localMixVideoTrack){e.n=1;break}throw new i({code:n.INVALID_OPERATION,message:"mixTrack doesn't initialize!"});case 1:return r=this.core.utils.deepCloneBasic(r),a=r.view,e.n=2,this.parseMixOptions(r);case 2:return s=e.v,e.n=3,this._updatePreview({view:a,track:this.localMixVideoTrack,prevConfig:this._mixVideoConfig});case 3:return this.core.utils.isUndefined(a)||(this._mixVideoConfig.view=a),e.a(2,{track:this.localMixVideoTrack._outputTrack,systemAudioTrackList:this.systemAudioTrackList,result:s})}},e,this)})),function(e){return _.apply(this,arguments)})},{key:"stop",value:function(){var e,r=this;this.eventListeners.forEach(function(e,t){r.removeEventListeners(t)}),this.eventListeners.clear(),null==(e=this.localMixVideoTrack)||e.close(),this.localMixVideoTrack=null,Object.values(this.systemAudioTrackList).forEach(function(e){return e.stop()}),this.systemAudioTrackList={},delete this.onScreenShareStop,delete this._mixVideoConfig}},{key:"parseMixOptions",value:(P=t(o().m(function e(r){var t,i,n,a,c,u,l,d,p,f,h,v,m,k,S,g,b,T,w,E,x,V;return o().w(function(e){for(;;)switch(e.n){case 0:if(t={successOptions:{},failedDetails:[]},i=this.core.errorModule,n=i.RtcError,a=i.ErrorCode,this.localMixVideoTrack&&this._mixVideoConfig){e.n=1;break}return e.a(2,t);case 1:c=[],u=y({},r),l=r.canvasInfo,d=r.camera,p=r.screen,f=r.text,h=r.image,v=r.video,l&&this.parseCanvasOptions(l),m=0,k=0,S=[{key:"camera",options:d,parser:this.parseCameraOptions.bind(this)},{key:"screen",options:p,parser:this.parseScreenOptions.bind(this)},{key:"text",options:f,parser:this.parseTextOptions.bind(this)},{key:"image",options:h,parser:this.parseImageOptions.bind(this)},{key:"video",options:v,parser:this.parseVideoOptions.bind(this)}],g=0,b=S;case 2:if(!(g<b.length)){e.n=5;break}if(T=b[g],w=T.key,E=T.options,x=T.parser,!E){e.n=4;break}return m++,e.n=3,x(this.localMixVideoTrack,E,this._mixVideoConfig[w]||[]);case 3:V=e.v,this._mixVideoConfig[w]=V.finalOptions,u[w]=V.finalOptions,V.errors.length>0&&(c.push.apply(c,s(V.errors)),V.errors.length===E.length&&k++);case 4:g++,e.n=2;break;case 5:if(!(k>0&&k===m)){e.n=6;break}throw new n({code:a.INVALID_PARAMETER,message:"all sources mix failed",data:{failedDetails:c}});case 6:return e.a(2,{successOptions:u,failedDetails:c})}},e,this)})),function(e){return P.apply(this,arguments)})},{key:"parseCanvasOptions",value:function(e){if(this.localMixVideoTrack&&this._mixVideoConfig){var r=e.canvasColor,t=e.width,i=e.height,n=e.frameRate;r&&this.localMixVideoTrack.setMixBackground(r),n&&this.localMixVideoTrack.setFps(n),this.localMixVideoTrack.resizeMixCanvas(t,i),this._mixVideoConfig.canvasInfo=e}}},{key:"prepareSourceOptions",value:function(e,r){var t=new Set(e.map(function(e){return e.id}));return{removeIdList:r.filter(function(e){return!t.has(e.id)}).map(function(e){return e.id}),preOptionsMap:new Map(r.map(function(e){return[e.id,e]}))}}},{key:"recordSourceError",value:function(e,r,t,i,n){n.push({id:e,error:r}),t.has(e)&&i.push(t.get(e))}},{key:"parseCameraOptions",value:(I=t(o().m(function e(r,t){var i,a,s,c,u,l,d,p,f,h,v,y,m,k,S=arguments;return o().w(function(e){for(;;)switch(e.p=e.n){case 0:i=S.length>2&&void 0!==S[2]?S[2]:[],a=this.prepareSourceOptions(t,i),s=a.removeIdList,c=a.preOptionsMap,u=n(s);try{for(u.s();!(l=u.n()).done;)d=l.value,r.removeCameraSource(d)}catch(e){u.e(e)}finally{u.f()}p=[],f=[],h=n(t),e.p=1,h.s();case 2:if((v=h.n()).done){e.n=7;break}return y=v.value,e.p=3,e.n=4,this.processSingleCameraSource(r,y);case 4:p.push(y),e.n=6;break;case 5:e.p=5,m=e.v,this.recordSourceError(y.id,m,c,p,f);case 6:e.n=2;break;case 7:e.n=9;break;case 8:e.p=8,k=e.v,h.e(k);case 9:return e.p=9,h.f(),e.f(9);case 10:return e.a(2,{finalOptions:p,errors:f})}},e,this,[[3,5],[1,8,9,10]])})),function(e,r){return I.apply(this,arguments)})},{key:"processSingleCameraSource",value:(L=t(o().m(function e(r,t){var i,n;return o().w(function(e){for(;;)switch(e.n){case 0:if(n=t.id,t.layout,t.profile,t.useInternalTrack&&((null==(i=this.core.trtc.localVideoTrack)?void 0:i.sourceTrack)?t.videoTrack=this.core.trtc.localVideoTrack.sourceTrack:t.videoTrack=this.createPlaceholderVideoTrack()),this.log.info("videomixer camera option ".concat(JSON.stringify(t))),!r.inputLocalVideoTracks.has(n)){e.n=2;break}return e.n=1,this.updateExistingCameraSource(r,t);case 1:e.n=3;break;case 2:return e.n=3,this.addNewCameraSource(r,t);case 3:return e.a(2)}},e,this)})),function(e,r){return L.apply(this,arguments)})},{key:"updateExistingCameraSource",value:(O=t(o().m(function e(r,t){var i,n,a,s,c,u,l,d;return o().w(function(e){for(;;)switch(e.n){case 0:return a=t.id,s=t.layout,c=t.profile,u=null==(i=r.inputLocalVideoTracks.get(a))?void 0:i.mediaTrack,e.n=1,this.updateCameraProfile(t);case 1:l=null==(n=r.inputLocalVideoTracks.get(a))?void 0:n.mediaTrack,d=this.resolveVideoProfile(c),l!==u?r.updateCameraSource(a,s,l,d):r.updateCameraSource(a,s,null,d);case 2:return e.a(2)}},e,this)})),function(e,r){return O.apply(this,arguments)})},{key:"addNewCameraSource",value:(M=t(o().m(function e(r,t){var i,n,a,s,c,u,l=this;return o().w(function(e){for(;;)switch(e.p=e.n){case 0:return i=t.id,n=t.layout,a=t.useInternalTrack,e.n=1,this.captureCamera(t);case 1:s=e.v,this.removeEventListeners(i),a&&(c=function(e){var t,n;if(!(null==(t=e.track)?void 0:t.isScreen)){l.log.info("videomixer camera LOCAL_TRACK_CAPTURE_SUCCESS");var o=r.inputLocalVideoTracks.get(i);o&&(null==(n=e.track)?void 0:n.sourceTrack)&&o.setInputMediaStreamTrack(e.track.sourceTrack)}},this.core.innerEmitter.on("102",c),this.eventListeners.has(i)||this.eventListeners.set(i,{}),this.eventListeners.get(i).captureSuccess=function(){l.core.innerEmitter.off("102",c)}),e.p=2,r.addCameraSource(i,s,n),e.n=4;break;case 3:throw e.p=3,u=e.v,s.close(),u;case 4:return e.a(2)}},e,this,[[2,3]])})),function(e,r){return M.apply(this,arguments)})},{key:"resolveVideoProfile",value:function(e){if(!this.core.utils.isUndefined(e))return this.core.utils.isString(e)?this.core.constants.videoProfileMap[e]:e}},{key:"parseScreenOptions",value:(C=t(o().m(function e(r,t){var i,a,s,c,u,l,d,p,f,h,v,y,m,k,S=arguments;return o().w(function(e){for(;;)switch(e.p=e.n){case 0:i=S.length>2&&void 0!==S[2]?S[2]:[],a=this.prepareSourceOptions(t,i),s=a.removeIdList,c=a.preOptionsMap,u=n(s);try{for(u.s();!(l=u.n()).done;)d=l.value,r.removeScreenSource(d),this.removeSystemAudioTrack(d)}catch(e){u.e(e)}finally{u.f()}p=[],f=[],h=n(t),e.p=1,h.s();case 2:if((v=h.n()).done){e.n=7;break}return y=v.value,e.p=3,e.n=4,this.processSingleScreenSource(r,y,c);case 4:p.push(y),e.n=6;break;case 5:e.p=5,m=e.v,this.recordSourceError(y.id,m,c,p,f);case 6:e.n=2;break;case 7:e.n=9;break;case 8:e.p=8,k=e.v,h.e(k);case 9:return e.p=9,h.f(),e.f(9);case 10:return e.a(2,{finalOptions:p,errors:f})}},e,this,[[3,5],[1,8,9,10]])})),function(e,r){return C.apply(this,arguments)})},{key:"processSingleScreenSource",value:(b=t(o().m(function e(r,t,i){var n,a,s,c,u,l,d;return o().w(function(e){for(;;)switch(e.n){case 0:if(s=t.id,c=t.layout,t.useInternalTrack&&((null==(n=this.core.trtc.localScreenTrack)?void 0:n.mediaTrack)?(t.videoTrack=this.core.trtc.localScreenTrack.mediaTrack,(null==(a=this.core.trtc.localScreenAudioTrack)?void 0:a.mediaTrack)&&(t.audioTrack=this.core.trtc.localScreenAudioTrack.mediaTrack),delete t.captureElement,delete t.preferDisplaySurface,delete t.systemAudio):t.videoTrack=this.createPlaceholderVideoTrack()),this.log.info("videomixer screen option ".concat(JSON.stringify(t))),u=i.get(s),l=r.inputLocalScreenTracks.has(s),d=!(null==u?void 0:u.systemAudio)&&t.systemAudio,!l||d){e.n=1;break}this.updateExistingScreenSource(r,s,c,u,t),e.n=2;break;case 1:return e.n=2,this.addNewScreenSource(r,t,u);case 2:return e.a(2)}},e,this)})),function(e,r,t){return b.apply(this,arguments)})},{key:"updateExistingScreenSource",value:function(e,r,t,i,n){e.updateScreenSource(r,t),(null==i?void 0:i.systemAudio)&&!n.systemAudio&&this.removeSystemAudioTrack(r)}},{key:"addNewScreenSource",value:(k=t(o().m(function e(r,t,i){var n,a,s,c,u,l=this;return o().w(function(e){for(;;)switch(e.p=e.n){case 0:return n=t.id,a=t.useInternalTrack,e.n=1,this.captureScreen(t);case 1:s=e.v,this.removeEventListeners(n),a&&(c=function(e){var t,i,o;if(null==(t=e.track)?void 0:t.isScreen){l.log.info("videomixer screen LOCAL_TRACK_CAPTURE_SUCCESS");var a=r.inputLocalScreenTracks.get(n);a&&(null==(i=e.track)?void 0:i.mediaTrack)&&a.setInputMediaStreamTrack(e.track.mediaTrack),l.systemAudioTrackList[n]&&(null==(o=e.track)?void 0:o.mediaTrack)&&(l.systemAudioTrackList[n]=e.track.mediaTrack)}},this.core.innerEmitter.on("102",c),this.eventListeners.has(n)||this.eventListeners.set(n,{}),this.eventListeners.get(n).captureSuccess=function(){l.core.innerEmitter.off("102",c)}),!(null==i?void 0:i.systemAudio)&&t.systemAudio&&r.inputLocalScreenTracks.has(t.id)&&r.removeScreenSource(t.id),e.p=2,r.addScreenSource(t.id,s,t.layout),e.n=4;break;case 3:throw e.p=3,u=e.v,s.close(),u;case 4:return e.a(2)}},e,this,[[2,3]])})),function(e,r,t){return k.apply(this,arguments)})},{key:"parseTextOptions",value:(v=t(o().m(function e(r,t){var i,a,s,c,u,l,d,p,f,h,v,y,m=arguments;return o().w(function(e){for(;;)if(0===e.n){i=m.length>2&&void 0!==m[2]?m[2]:[],a=this.prepareSourceOptions(t,i),s=a.removeIdList,c=a.preOptionsMap,u=n(s);try{for(u.s();!(l=u.n()).done;)d=l.value,r.removeTextSource(d)}catch(e){u.e(e)}finally{u.f()}p=[],f=[],h=n(t);try{for(h.s();!(v=h.n()).done;){y=v.value;try{c.has(y.id)?r.updateTextSource(y):r.addTextSource(y),p.push(y)}catch(e){this.recordSourceError(y.id,e,c,p,f)}}}catch(e){h.e(e)}finally{h.f()}return e.a(2,{finalOptions:p,errors:f})}},e,this)})),function(e,r){return v.apply(this,arguments)})},{key:"parseImageOptions",value:(h=t(o().m(function e(r,t){var i,a,s,c,u,l,d,p,f,h,v,y,m,k,S=arguments;return o().w(function(e){for(;;)switch(e.p=e.n){case 0:i=S.length>2&&void 0!==S[2]?S[2]:[],a=this.prepareSourceOptions(t,i),s=a.removeIdList,c=a.preOptionsMap,u=n(s);try{for(u.s();!(l=u.n()).done;)d=l.value,r.removeImageSource(d)}catch(e){u.e(e)}finally{u.f()}p=[],f=[],h=n(t),e.p=1,h.s();case 2:if((v=h.n()).done){e.n=7;break}return y=v.value,e.p=3,e.n=4,this.processSingleImageSource(r,y,c);case 4:p.push(y),e.n=6;break;case 5:e.p=5,m=e.v,this.recordSourceError(y.id,m,c,p,f);case 6:e.n=2;break;case 7:e.n=9;break;case 8:e.p=8,k=e.v,h.e(k);case 9:return e.p=9,h.f(),e.f(9);case 10:return e.a(2,{finalOptions:p,errors:f})}},e,this,[[3,5],[1,8,9,10]])})),function(e,r){return h.apply(this,arguments)})},{key:"processSingleImageSource",value:(f=t(o().m(function e(r,t,i){var n,a,s,c,u,l;return o().w(function(e){for(;;)switch(e.n){case 0:if(n=t.id,a=t.url,s=t.layout,!(c=i.get(n))){e.n=3;break}if(c.url===a){e.n=2;break}return e.n=1,this.core.utils.loadImage(a);case 1:u=e.v;case 2:r.updateImageSource(n,s,u),e.n=5;break;case 3:return e.n=4,this.core.utils.loadImage(a);case 4:l=e.v,r.addImageSource(n,l,s);case 5:return e.a(2)}},e,this)})),function(e,r,t){return f.apply(this,arguments)})},{key:"parseVideoOptions",value:(p=t(o().m(function e(r,t){var i,a,s,c,u,l,d,p,f,h,v,y,m,k,S=arguments;return o().w(function(e){for(;;)switch(e.p=e.n){case 0:i=S.length>2&&void 0!==S[2]?S[2]:[],a=this.prepareSourceOptions(t,i),s=a.removeIdList,c=a.preOptionsMap,u=n(s);try{for(u.s();!(l=u.n()).done;)d=l.value,r.removeVideoSource(d)}catch(e){u.e(e)}finally{u.f()}p=[],f=[],h=n(t),e.p=1,h.s();case 2:if((v=h.n()).done){e.n=7;break}return y=v.value,e.p=3,e.n=4,this.processSingleVideoSource(r,y,c);case 4:p.push(y),e.n=6;break;case 5:e.p=5,m=e.v,this.recordSourceError(y.id,m,c,p,f);case 6:e.n=2;break;case 7:e.n=9;break;case 8:e.p=8,k=e.v,h.e(k);case 9:return e.p=9,h.f(),e.f(9);case 10:return e.a(2,{finalOptions:p,errors:f})}},e,this,[[3,5],[1,8,9,10]])})),function(e,r){return p.apply(this,arguments)})},{key:"processSingleVideoSource",value:(d=t(o().m(function e(r,t,i){var n,a,s,c,u,l;return o().w(function(e){for(;;)switch(e.n){case 0:if(n=t.id,a=t.url,s=t.layout,!(c=i.get(n))){e.n=3;break}if(c.url===a){e.n=2;break}return e.n=1,this.core.utils.loadVideo(a);case 1:u=e.v;case 2:r.updateVideoSource(n,s,u),e.n=5;break;case 3:return e.n=4,this.core.utils.loadVideo(a);case 4:l=e.v,r.addVideoSource(n,l,s);case 5:return e.a(2)}},e,this)})),function(e,r,t){return d.apply(this,arguments)})},{key:"createPlaceholderVideoTrack",value:function(){var e=document.createElement("canvas");e.width=640,e.height=480;var r=e.getContext("2d");return r&&(r.fillStyle="black",r.fillRect(0,0,e.width,e.height)),e.captureStream(1).getVideoTracks()[0]}},{key:"removeEventListeners",value:function(e){var r=this.eventListeners.get(e);r&&(r.inputMediaTrackChanged&&r.inputMediaTrackChanged(),r.captureSuccess&&r.captureSuccess(),this.eventListeners.delete(e))}},{key:"captureCamera",value:(l=t(o().m(function e(r){var t,i,n,a,s,c,u;return o().w(function(e){for(;;)switch(e.n){case 0:return t=r.id,i=r.cameraId,n=r.videoTrack,a=r.profile,(s=new this.core.LocalVideoTrack).log.id+="-".concat(t),c={},i?c.deviceId=i:this.core.utils.isUndefined(n)||(c.customSource=n),this.core.utils.isUndefined(a)||(u=this.resolveVideoProfile(a))&&s.setProfile(u),e.n=1,s.capture(c);case 1:return e.a(2,s)}},e,this)})),function(e){return l.apply(this,arguments)})},{key:"updateCameraProfile",value:(c=t(o().m(function e(r){var t,i,n,a,s,c,u;return o().w(function(e){for(;;)switch(e.n){case 0:if(i=r.id,n=r.cameraId,a=r.videoTrack,s=r.profile,c=null==(t=this.localMixVideoTrack)?void 0:t.inputLocalVideoTracks.get(i)){e.n=1;break}return e.a(2);case 1:if(!n){e.n=3;break}return e.n=2,c.switchDevice(n);case 2:e.n=4;break;case 3:if(this.core.utils.isUndefined(a)){e.n=4;break}return e.n=4,c.setInputMediaStreamTrack(a);case 4:if(this.core.utils.isUndefined(s)){e.n=5;break}if((u=this.resolveVideoProfile(s))&&c.setProfile(u),n&&c.isNeedToSwitchDevice(n)){e.n=5;break}return e.n=5,c.applyProfile();case 5:return e.a(2)}},e,this)})),function(e){return c.apply(this,arguments)})},{key:"captureScreen",value:(a=t(o().m(function e(r){var t,i,n,a,s,c,u,l,d,p,f,h=this;return o().w(function(e){for(;;)switch(e.n){case 0:return t=r.id,i=r.profile,n=r.captureElement,a=r.preferDisplaySurface,s=r.systemAudio,c=r.videoTrack,u=r.audioTrack,(l=new this.core.LocalScreenTrack).log.id+="-".concat(t),d={captureElement:n,preferDisplaySurface:a,systemAudio:s,videoTrack:c,audioTrack:u},this.core.utils.isUndefined(i)||(this.core.utils.isString(i)?(p=this.core.constants.screenProfileMap[i])&&l.setProfile(p):l.setProfile(i)),e.n=1,l.capture(d);case 1:return f=e.v,s&&f.getAudioTracks().length>0?(this.systemAudioTrackList[t]=f.getAudioTracks()[0],this.log.info("".concat(t," system audio track captured"))):this.removeSystemAudioTrack(t),l.mediaTrack.addEventListener(this.core.constants.NAME.ENDED,function(){h.handleScreenShareEnded(t)}),e.a(2,l)}},e,this)})),function(e){return a.apply(this,arguments)})},{key:"handleScreenShareEnded",value:function(e){var r,t,i;null==(r=this.localMixVideoTrack)||r.removeScreenSource(e),(null==(t=this._mixVideoConfig)?void 0:t.screen)&&(this._mixVideoConfig.screen=this._mixVideoConfig.screen.filter(function(r){return r.id!==e})),null==(i=this.onScreenShareStop)||i.call(this,e)}},{key:"_updatePreview",value:(r=t(o().m(function e(r){var t,i,n,a,s;return o().w(function(e){for(;;)switch(e.n){case 0:if(t=r.view,i=r.track,n=r.prevConfig,!this.core.utils.isUndefined(t)||!(null==n?void 0:n.view)){e.n=2;break}if(!((a=this.core.utils.getViewListFromView(n.view)).length>0)){e.n=1;break}return e.n=1,i.play(a);case 1:return e.a(2);case 2:if(this.core.utils.isUndefined(t)){e.n=5;break}if(!((s=this.core.utils.getViewListFromView(t)).length>0)){e.n=4;break}return e.n=3,i.play(s);case 3:e.n=5;break;case 4:i.stop();case 5:return e.a(2)}},e,this)})),function(e){return r.apply(this,arguments)})},{key:"removeSystemAudioTrack",value:function(e){var r=this.systemAudioTrackList[e];r&&(r.stop(),this.log.info("".concat(e," system audio track stop")),delete this.systemAudioTrackList[e])}}]);var r,a,c,l,d,p,f,h,v,k,b,C,M,O,L,I,P,_,q}();return m(C,"Name","VideoMixer"),C});
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/virtual-background",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "description": "TRTC Web SDK 5.x virtual background plugin",
5
5
  "main": "./virtual-background.esm.js",
6
6
  "module": "./virtual-background.esm.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/watermark",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "description": "TRTC Web SDK 5.x watermark plugin",
5
5
  "main": "./watermark.esm.js",
6
6
  "module": "./watermark.esm.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtc-plugin/voice-changer",
3
- "version": "5.15.1-beta.2",
3
+ "version": "5.15.1-beta.3",
4
4
  "description": "",
5
5
  "main": "./voice-changer.esm.js",
6
6
  "keywords": [],