@agora-js/media 4.20.2-300 → 4.21.0-100

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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * AgoraWebSDK_N-v4.20.2-300-0-g79f50841 Copyright AgoraInc.
2
+ * AgoraWebSDK_N-v4.21.0-100-0-g10df092c-dirty Copyright AgoraInc.
3
3
  */
4
4
 
5
- import"webrtc-adapter";import{getBrowserInfo as e,BrowserName as t,isChromeKernel as i,nextTick as s,isAboveChrome as o,isAboveFirefox as n,isAboveSafari as r,BrowserOS as a,isSafari as c,isWkWebview as d,getParameter as u,isFirefox as h,EventEmitter as l,getRandomString as p,AgoraAPIName as m,AgoraAPITag as v,AgoraRTCError as E,AgoraRTCErrorCode as g,emitAsPromise as T,emitAsPromiseNoResponse as _,isAndroidChromium as y,removeItemFromList as f,isIOS as S,isIpadOS as I,getOSWithVersion as A,isAboveIOS15_1 as N,isIOS15 as D,isInPage as k,isAndroid as b,wait as R,domLoadedPromise as w,noop as O,runOnce as C,emitAsInvokerNoResponse as M,elementVisibleChecker as P,isChrome as V,PromiseMutex as L,isHarmonyOS as U,detectSecureContext as x}from"@agora-js/shared";import{logger as F,report as B,AgoraRTCEventUploadType as G,apiInvoke as H}from"@agora-js/report";const W={getDisplayMedia:!1,getStreamFromExtension:!1,supportUnifiedPlan:!1,supportMinBitrate:!1,supportSetRtpSenderParameters:!1,supportDualStream:!0,webAudioMediaStreamDest:!1,supportReplaceTrack:!1,supportWebGL:!1,webAudioWithAEC:!1,supportRequestFrame:!1,supportShareAudio:!1,supportDualStreamEncoding:!1,supportDataChannel:!1,supportPCSetConfiguration:!1,supportWebRTCEncodedTransform:!1,supportWebRTCInsertableStream:!1};function j(){const l=e();W.getDisplayMedia=function(e){if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia)return!0;return!1}(),W.getStreamFromExtension=l.name===t.CHROME&&Number(l.version)>34,W.supportUnifiedPlan=function(){if(!window.RTCRtpTransceiver)return!1;if(!("currentDirection"in RTCRtpTransceiver.prototype))return!1;const e=new RTCPeerConnection;let t=!1;try{e.addTransceiver("audio"),t=!0}catch(e){}return e.close(),t}(),W.supportMinBitrate=l.name===t.CHROME||l.name===t.EDGE,W.supportSetRtpSenderParameters=function(){const s=e();if(!window.RTCRtpSender||!window.RTCRtpSender.prototype.setParameters||!window.RTCRtpSender.prototype.getParameters)return!1;return!!i()||(!(!c()&&!d())||s.name===t.FIREFOX&&Number(s.version)>=64)}(),l.name===t.SAFARI&&(Number(l.version)>=14?W.supportDualStream=!0:W.supportDualStream=!1),W.webAudioMediaStreamDest=function(){const i=e();if(i.name===t.SAFARI&&Number(i.version)<12)return!1;return!0}(),W.supportReplaceTrack=function(){if(!window.RTCRtpSender)return!1;if("function"==typeof RTCRtpSender.prototype.replaceTrack)return!0;return!1}(),W.supportWebGL="undefined"!=typeof WebGLRenderingContext,W.supportRequestFrame=!!window.CanvasCaptureMediaStreamTrack,i()||(W.webAudioWithAEC=!0),W.supportShareAudio=function(){const i=e();if((i.os===a.WIN_10||i.os===a.WIN_81||i.os===a.WIN_7||i.os===a.LINUX||i.os===a.MAC_OS||i.os===a.CHROMIUM_OS)&&i.name===t.CHROME&&Number(i.version)>=74)return!0;return!1}(),W.supportDataChannel=function(){if(o(76)||n(68)||r(14))return!0;return!1}(),W.supportPCSetConfiguration=function(){const e=window.RTCPeerConnection;return!h()&&!!e&&e.prototype.setConfiguration instanceof Function}(),W.supportWebRTCEncodedTransform=function(){const t=e();return"Chrome"===t.name&&Number(t.version)>=86||"Safari"===t.name&&Number(t.version)>=15}(),W.supportWebRTCInsertableStream=function(){const i=e();return(i.name===t.CHROME||i.name===t.EDGE)&&Number(i.version)>=94&&"MediaStreamTrackGenerator"in window&&"MediaStreamTrackProcessor"in window}(),s((()=>{W.supportDualStreamEncoding=function(){const t=e();if(u("DISABLE_WEBAUDIO"))return!0;return"Safari"===t.name&&Number(t.version)>=14||!!("Chrome"===t.name&&/Windows/i.test(t.os||"")&&Number(t.version)>=100&&u("CHROME_DUAL_STREAM_USE_ENCODING"))}(),F.info("browser compatibility",JSON.stringify(W),JSON.stringify(l))}))}function z(){return W}var K,Y,q,Q,X,Z,J,$,ee;!function(e){e.IOS_15_16_INTERRUPTION_START="ios15_16-interruption-start",e.IOS_15_16_INTERRUPTION_END="ios15_16-interruption-end",e.IOS_INTERRUPTION_START="ios-interruption-start",e.IOS_INTERRUPTION_END="ios-interruption-end",e.STATE_CHANGE="state-change"}(K||(K={})),function(e){e.NEED_RENEGOTIATE="@need_renegotiate",e.NEED_REPLACE_TRACK="@need_replace_track",e.NEED_REPLACE_MIXING_TRACK="@need_replace_mixing_track",e.NEED_CLOSE="@need_close",e.NEED_ENABLE_TRACK="@need_enable_track",e.NEED_DISABLE_TRACK="@need_disable_track",e.NEED_SESSION_ID="@need_sid",e.SET_OPTIMIZATION_MODE="@set_optimization_mode",e.GET_STATS="@get_stats",e.GET_RTC_STATS="@get_rtc_stats",e.GET_LOW_VIDEO_TRACK="@get_low_video_track",e.NEED_RESET_REMOTE_SDP="@need_reset_remote_sdp",e.NEED_UPDATE_VIDEO_ENCODER="@need_update_video_encoder",e.NEED_MUTE_TRACK="@need_mute_track",e.NEED_UNMUTE_TRACK="@need_unmute_track"}(Y||(Y={})),function(e){e.SCREEN_TRACK="screen_track",e.CUSTOM_TRACK="custome_track",e.LOW_STREAM="low_stream"}(q||(q={})),function(e){e[e.HIGH_STREAM=0]="HIGH_STREAM",e[e.LOW_STREAM=1]="LOW_STREAM"}(Q||(Q={})),function(e){e[e.HIGH_STREAM=0]="HIGH_STREAM",e[e.LOW_STREAM=1]="LOW_STREAM"}(X||(X={})),function(e){e[e.DISABLE=0]="DISABLE",e[e.LOW_STREAM=1]="LOW_STREAM",e[e.AUDIO_ONLY=2]="AUDIO_ONLY"}(Z||(Z={})),function(e){e.TRANSCEIVER_UPDATED="transceiver-updated",e.SEI_TO_SEND="sei-to-send",e.SEI_RECEIVED="sei-received",e.CLOSED="closed"}(J||(J={})),function(e){e.FIRST_FRAME_DECODED="first-frame-decoded",e.VIDEO_ELEMENT_VISIBLE_STATUS="video-element-visible-status",e.VIDEO_STATE_CHANGED="video-state-changed"}($||($={})),function(e){e.AUDIO_SOURCE_STATE_CHANGE="audio_source_state_change",e.RECEIVE_TRACK_BUFFER="receive_track_buffer",e.ON_AUDIO_BUFFER="on_audio_buffer",e.UPDATE_SOURCE="update_source"}(ee||(ee={}));const te={transportDelay:0,end2EndDelay:0,receiveBitrate:0,receiveLevel:0,receiveBytes:0,receiveDelay:0,receivePackets:0,receivePacketsLost:0,totalDuration:0,totalFreezeTime:0,freezeRate:0,packetLossRate:0,currentPacketLossRate:0,publishDuration:-1},ie={uplinkNetworkQuality:0,downlinkNetworkQuality:0},se={transportDelay:0,end2EndDelay:0,receiveBitrate:0,receiveBytes:0,receiveDelay:0,receivePackets:0,receivePacketsLost:0,receiveResolutionHeight:0,receiveResolutionWidth:0,totalDuration:0,totalFreezeTime:0,freezeRate:0,packetLossRate:0,currentPacketLossRate:0,publishDuration:-1};var oe,ne,re,ae,ce,de;!function(e){e.ON_TRACK="on_track",e.ON_NODE="on_node"}(oe||(oe={})),function(e){e.REQUEST_UPDATE_CONSTRAINTS="request_update_constraints",e.REQUEST_CONSTRAINTS="request_constraints"}(ne||(ne={})),function(e){e.IDLE="IDLE",e.INITING="INITING",e.INITEND="INITEND"}(re||(re={})),function(e){e.STATE_CHANGE="state_change",e.RECORDING_DEVICE_CHANGED="recordingDeviceChanged",e.PLAYOUT_DEVICE_CHANGED="playoutDeviceChanged",e.CAMERA_DEVICE_CHANGED="cameraDeviceChanged"}(ae||(ae={})),function(e){e.NONE="none",e.INIT="init",e.CANPLAY="canplay",e.PLAYING="playing",e.PAUSED="paused",e.SUSPEND="suspend",e.STALLED="stalled",e.WAITING="waiting",e.ERROR="error",e.DESTROYED="destroyed",e.ABORT="abort",e.ENDED="ended",e.EMPTIED="emptied",e.LOADEDDATA="loadeddata"}(ce||(ce={})),function(e){e[e.VideoStateStopped=0]="VideoStateStopped",e[e.VideoStateStarting=1]="VideoStateStarting",e[e.VideoStateDecoding=2]="VideoStateDecoding",e[e.VideoStateFrozen=3]="VideoStateFrozen"}(de||(de={}));const ue={uninit:100,none:110,init:120,loadeddata:130,canplay:200,playing:210,paused:220,suspend:300,stalled:310,waiting:320,error:330,destroyed:340,abort:350,ended:360,emptied:370},he=[];function le(e){he.includes(e)||he.push(e)}function pe(e){const t=he.indexOf(e);-1!==t&&he.splice(t,1)}class me extends l{constructor(e,t){super(),this._ID=void 0,this._rtpTransceiver=void 0,this._lowRtpTransceiver=void 0,this._hints=[],this._isClosed=!1,this._originMediaStreamTrack=void 0,this._mediaStreamTrack=void 0,this._external={},this._ID=t||p(8,"track-"),this._originMediaStreamTrack=e,this._mediaStreamTrack=e,le(this)}toString(){return this._ID}getTrackId(){return this._ID}getMediaStreamTrack(e){if(!e){const e=B.reportApiInvoke(null,{name:m.GET_MEDIA_STREAM_TRACK,options:[],tag:v.TRACER});this._mediaStreamTrack&&"string"==typeof this._mediaStreamTrack.label?e.onSuccess(this._mediaStreamTrack.label):e.onSuccess("")}return this._mediaStreamTrack}getRTCRtpTransceiver(e){return e===Q.LOW_STREAM?this._lowRtpTransceiver:this._rtpTransceiver}getMediaStreamTrackSettings(){return this.getMediaStreamTrack(!0).getSettings()}close(){this._isClosed=!0,this._lowRtpTransceiver=void 0,this._rtpTransceiver=void 0,pe(this),this.emit(J.CLOSED),this.removeAllListeners(J.SEI_RECEIVED)}_updateRtpTransceiver(e,t){if(t===Q.LOW_STREAM){if(this._lowRtpTransceiver===e)return;this._lowRtpTransceiver=e}else{if(this._rtpTransceiver===e)return;this._rtpTransceiver=e}this.emit(J.TRANSCEIVER_UPDATED,e,t)}}function ve(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,s)}return i}function Ee(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?ve(Object(i),!0).forEach((function(t){ge(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):ve(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function ge(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var s=i.call(e,t||"default");if("object"!=typeof s)return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}class Te extends l{constructor(e){super(),this.name="VideoProcessorDestination",this.ID="0",this._source=void 0,this.videoContext=void 0,this.inputTrack=void 0,this.videoContext=e}get kind(){return"video"}get enabled(){return!0}pipe(){throw new E(g.NOT_SUPPORTED,"VideoProcessor cannot pipe to any other Processor")}unpipe(){throw new E(g.NOT_SUPPORTED,"VideoProcessor cannot unpipe to any other Processor")}enable(){}disable(){}updateInput(e){if(e.context!==this.videoContext)throw new Error("ProcessorContext passed to VideoTrack.processorDestination doesn't match it's belonging VideoTrack's context.\nProbably you are making pipeline like this:\nvideoTrack1.pipe(processor).pipe(videoTrack2.processorDestination).");e.track&&e.track!==this.inputTrack&&(this.videoContext.chained=!0,this.inputTrack=e.track,this.emit(oe.ON_TRACK,e.track))}reset(){this.inputTrack=void 0,this.videoContext.chained=!1,this.emit(oe.ON_TRACK,void 0)}}class _e extends l{set chained(e){this._chained=e}get chained(){return this._chained}constructor(e,t){super(),this.constraintsMap=new Map,this.statsRegistry=[],this.usageRegistry=[],this.trackId=void 0,this.direction=void 0,this._chained=!1,this.trackId=e,this.direction=t}async getConstraints(){return await T(this,ne.REQUEST_CONSTRAINTS)}async requestApplyConstraints(e,t){return F.info("processor ".concat(t.name," requestApplyConstraints for ").concat(this.trackId)),e&&this.constraintsMap.set(t,e),_(this,ne.REQUEST_UPDATE_CONSTRAINTS,Array.from(this.constraintsMap.values()))}async requestRevertConstraints(e){if(this.constraintsMap.has(e))return F.info("processor ".concat(e.name," requestRevertConstraints for ").concat(this.trackId)),this.constraintsMap.delete(e),_(this,ne.REQUEST_UPDATE_CONSTRAINTS,Array.from(this.constraintsMap.values()))}registerStats(e,t,i){this.statsRegistry.find((i=>i.processorID===e.ID&&i.processorName===e.name&&i.type===t))||this.statsRegistry.push({processorName:e.name,processorID:e.ID,type:t,cb:i})}unregisterStats(e,t){const i=this.statsRegistry.findIndex((i=>i.processorID===e.ID&&i.processorName===e.name&&i.type===t));-1!==i&&this.statsRegistry.splice(i,1)}gatherStats(){const e=[];for(const{processorID:t,processorName:i,type:s,cb:o}of this.statsRegistry)try{const n=o();e.push({processorID:t,processorName:i,type:s,stats:n})}catch(e){F.error(new E(g.UNEXPECTED_ERROR,e.message))}return e}registerUsage(e,t){this.usageRegistry.find((t=>t.processorID===e.ID&&t.processorName===e.name))||this.usageRegistry.push({processorID:e.ID,processorName:e.name,cb:t})}unregisterUsage(e){const t=this.usageRegistry.findIndex((t=>t.processorID===e.ID&&t.processorName===e.name));-1!==t&&this.usageRegistry.splice(t,1)}async gatherUsage(){const e=[];if(!this.chained)return[];for(const{cb:t}of this.usageRegistry)try{let i=t();i instanceof Promise&&(i=await i),e.push(Ee(Ee({},i),{},{direction:this.direction}))}catch(e){F.error("gather extension usage error",e)}return e}getDirection(){return this.direction}}class ye extends l{constructor(e){super(),this.name="AudioProcessorDestination",this.ID="0",this.inputTrack=void 0,this.inputNode=void 0,this.audioProcessorContext=void 0,this._source=void 0,this.audioProcessorContext=e}get kind(){return"audio"}get enabled(){return!0}pipe(){throw new E(g.NOT_SUPPORTED,"AudioProcessorDestination cannot pipe to any other Processor")}unpipe(){throw new E(g.NOT_SUPPORTED,"AudioProcessor cannot unpipe to any other Processor")}enable(){}disable(){}reset(){this.inputTrack=void 0,this.inputNode=void 0,this.audioProcessorContext.chained=!1,this.emit(oe.ON_TRACK,void 0),this.emit(oe.ON_NODE,void 0)}updateInput(e){if(e.context!==this.audioProcessorContext)throw new Error("ProcessorContext passed to AudioTrack.processorDestination doesn't match it's belonging AudioTrack's context.\n Probably you are making pipeline like this: audioTrack1.pipe(processor).pipe(audioTrack2.processorDestination).");e.track&&this.inputTrack!==e.track&&(this.audioProcessorContext.chained=!0,this.inputTrack=e.track,this.emit(oe.ON_TRACK,this.inputTrack)),e.node&&this.inputNode!==e.node&&(this.audioProcessorContext.chained=!0,this.inputNode=e.node,this.emit(oe.ON_NODE,this.inputNode))}}class fe extends l{set chained(e){this._chained=e}get chained(){return this._chained}constructor(e,t,i){super(),this.constraintsMap=new Map,this.statsRegistry=[],this.audioContext=void 0,this.trackId=void 0,this.direction=void 0,this.usageRegistry=[],this._chained=!1,this.audioContext=e,this.trackId=t,this.direction=i}async getConstraints(){return T(this,ne.REQUEST_CONSTRAINTS)}getAudioContext(){return this.audioContext}async requestApplyConstraints(e,t){return F.info("processor ".concat(t.name," requestApplyConstraints for ").concat(this.trackId)),e&&this.constraintsMap.set(t,e),_(this,ne.REQUEST_UPDATE_CONSTRAINTS,Array.from(this.constraintsMap.values()))}async requestRevertConstraints(e){if(this.constraintsMap.has(e))return this.constraintsMap.delete(e),_(this,ne.REQUEST_UPDATE_CONSTRAINTS,Array.from(this.constraintsMap.values()))}registerStats(e,t,i){this.statsRegistry.find((i=>i.processorID===e.ID&&i.processorName===e.name&&i.type===t))||this.statsRegistry.push({processorName:e.name,processorID:e.ID,type:t,cb:i})}unregisterStats(e,t){const i=this.statsRegistry.findIndex((i=>i.processorID===e.ID&&i.processorName===e.name&&i.type===t));-1!==i&&this.statsRegistry.splice(i,1)}gatherStats(){const e=[];for(const{processorID:t,processorName:i,type:s,cb:o}of this.statsRegistry)try{const n=o();e.push({processorID:t,processorName:i,type:s,stats:n})}catch(e){F.error(new E(g.UNEXPECTED_ERROR,e.message))}return e}registerUsage(e,t){this.usageRegistry.find((t=>t.processorID===e.ID&&t.processorName===e.name))||this.usageRegistry.push({processorID:e.ID,processorName:e.name,cb:t})}unregisterUsage(e){const t=this.usageRegistry.findIndex((t=>t.processorID===e.ID&&t.processorName===e.name));-1!==t&&this.usageRegistry.splice(t,1)}async gatherUsage(){const e=[];if(!this.chained)return[];for(const{cb:t}of this.usageRegistry)try{let i=t();i instanceof Promise&&(i=await i),e.push(Ee(Ee({},i),{},{direction:this.direction}))}catch(e){F.error("gather extension usage error",e)}return e}getDirection(){return this.direction}}function Se(e,t,i,s){var o,n=arguments.length,r=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(n<3?o(r):n>3?o(t,i,r):o(t,i))||r);return n>3&&r&&Object.defineProperty(t,i,r),r}function Ie(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}const Ae=e=>{const t=document.createElement("canvas");return t.width=2,t.height=2,new Promise(((i,s)=>{t.toBlob((async e=>{if(t.remove(),e){const s=await Ne(e);i({buffer:s,width:t.width,height:t.height})}else s(new E(g.CONVERTING_VIDEO_FRAME_TO_BLOB_FAILED))}),e,1)}))},Ne=async e=>{const t=await e.arrayBuffer();return new Uint8Array(t)};let De=!1;const ke=new class extends l{constructor(){super(...arguments),this.onAutoplayFailed=void 0,this.onAudioAutoplayFailed=void 0}};function be(){if(e(),!De){const e=t=>{t.preventDefault(),De=!1,y()?document.body.removeEventListener("click",e,!0):(document.body.removeEventListener("touchstart",e,!0),document.body.removeEventListener("mousedown",e,!0))};De=!0,y()?document.body.addEventListener("click",e,!0):(document.body.addEventListener("touchstart",e,!0),document.body.addEventListener("mousedown",e,!0)),F.info("detect media autoplay failed, document: https://docs.agora.io/cn/Voice/autoplay_policy_web_ng?platform=Web"),ke.onAutoplayFailed?ke.onAutoplayFailed():ke.onAudioAutoplayFailed?F.warning("AgoraRTC.onAudioAutoplayFailed has been deprecated in favor of AgoraRTC.onAutoplayFailed.\n\n Please refer to the Agora document to migrate the newer API, https://docs.agora.io/en/Voice/autoplay_policy_web_ng?platform=Web ."):F.warning("We have detected a media autoplay failed event, and found out that you haven't implemented AgoraRTC.onAutoplayFailed callback yet.\n\n It will cause audio/video element not playing automatically on some browsers without user interaction, possibly hurting user experiences.\n\n Please refer to the Agora document to properly handle autoplay failed event, https://docs.agora.io/en/Voice/autoplay_policy_web_ng?platform=Web ."),ke.emit("autoplay-failed")}}const Re=window.AudioContext||window.webkitAudioContext;let we=null;const Oe=new class extends l{constructor(){super(...arguments),this.prevState=void 0,this.curState=void 0,this.currentTime=void 0,this.currentTimeStuckAt=void 0}get duringInterruption(){return"running"===this.prevState&&"interrupted"===this.curState}};function Ce(){if(!Re)return void F.error("your browser is not support web audio");F.info("create audio context");const t=Ee({},u("WEBAUDIO_INIT_OPTIONS"));F.debug("audio context init option:",JSON.stringify(t)),we=new Re(t),Oe.curState=we.state,we.onstatechange=()=>{Oe.prevState=Oe.curState,Oe.curState=we?we.state:void 0;const{prevState:t,curState:i}=Oe,s="running"===i,o="interrupted"===i,n="running"===t,r="suspended"===t,a="interrupted"===t,c=e().osVersion;(S()||I())&&n&&o&&(F.info("ios".concat(c,"-interruption-start")),Oe.emit(K.IOS_INTERRUPTION_START)),(S()||I())&&(r||a)&&s&&(F.info("ios".concat(c,"-interruption-end")),Oe.emit(K.IOS_INTERRUPTION_END)),t!==i&&Oe.emit(K.STATE_CHANGE,i,t)},setInterval((()=>{var e;const t=null===(e=we)||void 0===e?void 0:e.currentTime;if(Oe.currentTime!==t)Oe.currentTimeStuckAt&&(F.debug("AudioContext current time resume at ".concat(t)),Oe.currentTimeStuckAt=void 0),Oe.currentTime=t;else{if(t!==Oe.currentTimeStuckAt){B.reportApiInvoke(null,{name:"WEB_AUDIO_CURRENT_TIME_STUCK",options:{currentTime:t},tag:v.TRACER}).onSuccess(),F.warning("AudioContext current time stuck at ".concat(t))}Oe.currentTimeStuckAt=t}}),5e3),async function(e){const t=["click","contextmenu","auxclick","dblclick","mousedown","mouseup","touchend","keydown","keyup"];let i,s=!1,o=!1,n=!1;function r(t){"running"===e.state?a(!1):S()||I()?"suspended"===e.state&&(a(!0),t&&e.resume().then(d,d)):"closed"!==e.state&&(a(!0),t&&e.resume().then(d,d))}function a(e){if(s!==e){s=e;for(let i=0,s=t;i<s.length;i+=1){const t=s[i];e?window.addEventListener(t,u,{capture:!0,passive:!0}):window.removeEventListener(t,u,{capture:!0,passive:!0})}}}function c(){r(!0)}function d(){r(!1)}function u(){r(!0)}function h(e){if(!n)if(i.paused)if(e){let e;l(!1),n=!0;try{e=i.play(),e?e.then(p,p):(i.addEventListener("playing",p),i.addEventListener("abort",p),i.addEventListener("error",p))}catch(e){p()}}else l(!0);else l(!1)}function l(e){if(o!==e){o=e;for(let i=0,s=t;i<s.length;i++){const t=s[i];e?window.addEventListener(t,m,{capture:!0,passive:!0}):window.removeEventListener(t,m,{capture:!0,passive:!0})}}}function p(){i.removeEventListener("playing",p),i.removeEventListener("abort",p),i.removeEventListener("error",p),n=!1,h(!1)}function m(){h(!0)}if(S()){const t=e.createMediaStreamDestination(),s=document.createElement("div");s.innerHTML="<audio x-webkit-airplay='deny'></audio>",i=s.children.item(0),i.controls=!1,i.disableRemotePlayback=!0,i.preload="auto",i.srcObject=t.stream,h(!0)}Oe.on(K.STATE_CHANGE,c),r(!1)}(we)}function Me(){if(!we){if(Ce(),!we)throw new E(g.NOT_SUPPORTED,"can not create audio context");return we}return we}function Pe(){return!!we}function Ve(e){if(function(){if(null!==Ue)return Ue;const e=Me(),t=e.createBufferSource(),i=e.createGain(),s=e.createGain();t.connect(i),t.connect(s),t.disconnect(i);let o=!1;try{t.disconnect(i)}catch(e){o=!0}return t.disconnect(),Ue=o,o}())return;const t=e.connect,i=e.disconnect;e.connect=(i,s,o)=>(e._inputNodes||(e._inputNodes=[]),e._inputNodes.includes(i)||(i instanceof AudioNode?(e._inputNodes.push(i),t.call(e,i,s,o)):t.call(e,i,s)),e),e.disconnect=(s,o,n)=>{i.call(e),s?f(e._inputNodes,s):e._inputNodes=[];for(const i of e._inputNodes)t.call(e,i)}}function Le(e){const t=Me();return new Promise(((i,s)=>{t.decodeAudioData(e,(e=>{i(e)}),(e=>{s(new E(g.DECODE_AUDIO_FILE_FAILED,e.toString()))}))}))}let Ue=null;function xe(e,t){let i=!1;const s=1/t;if(u("DISABLE_WEBAUDIO")){const t=window.setInterval((()=>{i?window.clearInterval(t):e(performance.now()/1e3)}),1e3*s)}else{const t=Me();let o=t.createGain();o.gain.value=0,o.connect(t.destination);const n=()=>{if(i)return void(o=null);const r=t.createOscillator();r.onended=n,r.connect(o),r.start(0),r.stop(t.currentTime+s),e(t.currentTime)};n()}return()=>{i=!0}}let Fe=null;function Be(){if(Fe)return Fe;const e=Me();if(!e.createMediaStreamDestination)throw new E(g.NOT_SUPPORTED,"can not create silence audio track");const t=e.createBufferSource(),i=e.createBuffer(1,44100,44100);t.loop=!0,t.buffer=i;const s=e.createMediaStreamDestination();return t.connect(s),Fe=s.stream.getAudioTracks()[0],Fe}function Ge(e){for(let t=0;t<e.outputBuffer.numberOfChannels;t+=1){const i=e.outputBuffer.getChannelData(t);for(let e=0;e<i.length;e+=1)i[e]=0}return e.inputBuffer}function He(e){const t=e.getChannelData(0);let i=0,s=0;for(let e=0;e<t.length;e+=1)0===t[e]?(i+=1,i>s&&(s=i)):i=0;return s/t.length*e.duration}function We(e,t,i,s){if(!e)return;const o=B.getBaseInfoBySessionId(e);if(!o)return;const n=o.info,r=Date.now(),a=Ee(Ee({},n),{},{vid:void 0===n.vid?0:Number(n.vid),lts:r,elapse:r-o.startTime,cbRegistered:ke.onAutoplayFailed||ke.onAudioAutoplayFailed?1:-1,errorMsg:i,mediaType:t,trackId:s,extend:void 0});B.send({type:G.AUTOPLAY_FAILED,data:a},!0)}class je{get videoElementStatus(){return this._videoElementStatus}set videoElementStatus(e){e!==this._videoElementStatus&&(F.debug("[".concat(this.trackId,"] video-element-status change ").concat(this._videoElementStatus," => ").concat(e)),this._videoElementStatus=e)}get videoState(){return this._videoState}set videoState(e){var t;e!==this._videoState&&(F.debug("[".concat(this.trackId,"] video-status change ").concat(this._videoState," => ").concat(e)),this._videoState=e,null===(t=this.onVideoStateChanged)||void 0===t||t.call(this,this.videoState))}constructor(e){this.trackId=void 0,this.config=void 0,this.onFirstVideoFrameDecoded=void 0,this.onVideoStateChanged=void 0,this.freezeTimeCounterList=[],this.renderFreezeAccTime=0,this.isKeepLastFrame=!1,this.timeUpdatedCount=0,this.freezeTime=0,this.playbackTime=0,this.lastTimeUpdatedTime=0,this.autoplayFailed=!1,this.videoTrack=void 0,this.videoElement=void 0,this.cacheVideoElement=void 0,this._videoState=de.VideoStateStopped,this.videoElementCheckInterval=void 0,this.videoElementFreezeTimeout=void 0,this._videoElementStatus=ce.NONE,this.isGettingVideoDimensions=!1,this.startGetVideoDimensions=()=>{const e=()=>{if(this.isGettingVideoDimensions=!0,this.videoElement.videoWidth*this.videoElement.videoHeight>4)return F.debug("[".concat(this.trackId,"] current video dimensions:"),this.videoElement.videoWidth,this.videoElement.videoHeight),void(this.isGettingVideoDimensions=!1);setTimeout(e,500)};!this.isGettingVideoDimensions&&e()},this.autoResumeAfterInterruption=()=>{this.videoTrack&&"live"===this.videoTrack.readyState&&"running"===Oe.curState&&(F.debug("[track-".concat(this.trackId,"] video element paused, auto resume for ").concat(A())),N()?(this.videoElement.srcObject=null,this.videoElement.srcObject=new MediaStream([this.videoTrack]),this.videoElement.play()):(this.videoElement.pause(),this.videoElement.play()))},this.handleVideoEvents=e=>{switch(e.type){case"play":case"playing":this.startGetVideoDimensions(),this.videoElementStatus=ce.PLAYING;break;case"loadeddata":if(this.videoState=de.VideoStateStarting,this.onFirstVideoFrameDecoded&&this.onFirstVideoFrameDecoded(),this.cacheVideoElement){try{this.cacheVideoElement.srcObject=null,this.cacheVideoElement.remove()}catch(e){}this.cacheVideoElement=void 0}break;case"canplay":this.videoElementStatus=ce.CANPLAY;break;case"stalled":this.videoElementStatus=ce.STALLED;break;case"suspend":this.videoElementStatus=ce.SUSPEND;break;case"pause":this.videoElementStatus=ce.PAUSED,S()||I()||c()&&this.autoplayFailed||!this.videoTrack||"live"!==this.videoTrack.readyState||(F.debug("[track-".concat(this.trackId,"] video element paused, auto resume")),this.videoElement.play());break;case"waiting":this.videoElementStatus=ce.WAITING;break;case"abort":this.videoElementStatus=ce.ABORT;break;case"ended":this.videoElementStatus=ce.ENDED;break;case"emptied":this.videoElementStatus=ce.EMPTIED;break;case"error":{this.videoElementStatus=ce.ERROR;const e=this.videoElement.error;e&&F.error("[".concat(this.trackId,"] media error, code: ").concat(e.code,", message: ").concat(e.message));break}case"timeupdate":{const e=performance.now();if(this.timeUpdatedCount+=1,this.timeUpdatedCount<10)return void(this.lastTimeUpdatedTime=e);const t=e-this.lastTimeUpdatedTime,i=this.lastTimeUpdatedTime;if(this.lastTimeUpdatedTime=e,ut.lastVisibleTime<ut.lastHiddenTime||i<ut.lastHiddenTime||i<ut.lastVisibleTime)return;for(t>u("VIDEO_FREEZE_DURATION")&&(this.freezeTime+=t),this.playbackTime+=t;this.playbackTime>=6e3;){this.playbackTime-=6e3;const e=Math.min(6e3,this.freezeTime);this.freezeTimeCounterList.push(e),this.freezeTime=Math.max(0,this.freezeTime-6e3)}break}}},this.autoResumeAfterInterruptionOnIOS15_16=()=>{this.videoTrack&&"live"===this.videoTrack.readyState&&(F.debug("[track-".concat(this.trackId,"] video element paused, auto resume for ").concat(A())),N()?(this.videoElement.srcObject=null,this.videoElement.srcObject=new MediaStream([this.videoTrack]),this.videoElement.play()):(this.videoElement.pause(),this.videoElement.play()))},this.trackId=e.trackId,this.config=e,e.element instanceof HTMLVideoElement?this.videoElement=e.element:this.videoElement=document.createElement("video"),Oe.on(K.IOS_INTERRUPTION_END,this.autoResumeAfterInterruption),Oe.on(K.IOS_15_16_INTERRUPTION_END,this.autoResumeAfterInterruptionOnIOS15_16)}getVideoElement(){return this.videoElement}getContainerElement(){var e;return null!==(e=this.videoElement.parentElement)&&void 0!==e?e:void 0}updateConfig(e){this.config=e,this.trackId=e.trackId,e.element!==this.videoElement&&(this.destroy(),this.videoElement=e.element),this.videoTrack&&this.initVideoElement()}updateVideoTrack(e){this.videoTrack!==e&&(this.videoTrack=e,this.initVideoElement())}play(t){const i=this.videoElement.play();i&&i.catch&&i.catch((e=>{t&&We(t,"video",e.message,this.trackId),"NotAllowedError"===e.name?(F.warning("detected video element autoplay failed",e),this.autoplayFailed=!0,this.handleAutoPlayFailed()):F.warning("[".concat(this.trackId,"] play warning: "),e)}));const s=e();if(("Safari"===s.name&&15===Number(s.version)||D())&&i&&i.then){const e=()=>{this.config.mirror&&(this.videoElement.style.transform="rotateY(180deg)")};i.then(e).catch(e)}}getCurrentFrame(){const e=document.createElement("canvas");e.width=this.videoElement.videoWidth,e.height=this.videoElement.videoHeight;const t=e.getContext("2d");if(!t)return F.error("create canvas context failed!"),new ImageData(2,2);t.drawImage(this.videoElement,0,0,e.width,e.height);const i=t.getImageData(0,0,e.width,e.height);return e.remove(),i}async getCurrentFrameToUint8Array(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;const i=document.createElement("canvas");i.width=this.videoElement.videoWidth,i.height=this.videoElement.videoHeight;const s=i.getContext("2d");return s?(s.drawImage(this.videoElement,0,0,i.width,i.height),new Promise(((s,o)=>{i.toBlob((async e=>{if(i.remove(),e){const t=await Ne(e);s({buffer:t,width:i.width,height:i.height})}else o(new E(g.CONVERTING_VIDEO_FRAME_TO_BLOB_FAILED))}),e,t<0?.1:t>1?1:t)}))):await Ae(e)}destroy(){Oe.off(K.IOS_INTERRUPTION_END,this.autoResumeAfterInterruption),Oe.off(K.IOS_15_16_INTERRUPTION_END,this.autoResumeAfterInterruptionOnIOS15_16),this.videoElement.srcObject=null,this.resetVideoElement(),this.freezeTimeCounterList=[],this.videoState=de.VideoStateStopped}initVideoElement(){if(this.videoElementStatus=ce.INIT,!this.videoElementCheckInterval&&(ze.forEach((e=>{this.videoElement.addEventListener(e,this.handleVideoEvents)})),this.videoElementCheckInterval=window.setInterval((()=>{k(this.videoElement)||(this.videoElementStatus=ce.DESTROYED)}),1e3),u("ENABLE_VIDEO_FRAME_CALLBACK"))){var t,i;let e;const s=()=>{"visible"===document.visibilityState&&(document.removeEventListener("visibilitychange",s),this.videoElementFreezeTimeout=window.setTimeout(o,u("VIDEO_FREEZE_DURATION")))},o=()=>{this.videoElementFreezeTimeout=void 0,this.videoState===de.VideoStateDecoding&&("visible"===document.visibilityState?this.videoState=de.VideoStateFrozen:document.addEventListener("visibilitychange",s))},n=(t,i)=>{if(this.videoElementStatus===ce.PLAYING){if(e){const t=i.presentationTime-e.presentationTime;this.videoState===de.VideoStateStarting&&(this.videoState=de.VideoStateDecoding),this.videoState===de.VideoStateDecoding&&this.onVideoStateChanged&&(this.videoElementFreezeTimeout&&window.clearTimeout(this.videoElementFreezeTimeout),this.videoElementFreezeTimeout=window.setTimeout(o,u("VIDEO_FREEZE_DURATION"))),t<u("VIDEO_FREEZE_DURATION")&&this.videoState===de.VideoStateFrozen&&(this.videoState=de.VideoStateDecoding),t>u("VIDEO_FREEZE_DURATION")&&ut.lastVisibleTime>=ut.lastHiddenTime&&e.timestamp>ut.lastVisibleTime&&e.timestamp>ut.lastHiddenTime&&(this.renderFreezeAccTime+=t)}e=Ee(Ee({},i),{},{timestamp:t})}var s,r;u("ENABLE_VIDEO_FRAME_CALLBACK")&&(null===(s=(r=this.videoElement).requestVideoFrameCallback)||void 0===s||s.call(r,n))};null===(t=(i=this.videoElement).requestVideoFrameCallback)||void 0===t||t.call(i,n)}this.videoElement.controls=!1,this.videoElement.setAttribute("playsinline",""),b()&&(this.videoElement.poster="noposter");const s=e();if("Safari"===s.name&&15===Number(s.version)||D()||!this.config.mirror||(this.videoElement.style.transform="rotateY(180deg)"),this.config.fit?this.videoElement.style.objectFit=this.config.fit:this.videoElement.style.objectFit="cover",this.videoElement.setAttribute("muted",""),this.videoElement.muted=!0,this.videoElement.srcObject&&this.videoElement.srcObject instanceof MediaStream){this.videoElement.srcObject.getVideoTracks()[0]!==this.videoTrack&&(this.videoElement.srcObject=this.videoTrack?new MediaStream([this.videoTrack]):null,h()&&this.videoElement.load())}else this.videoElement.srcObject=this.videoTrack?new MediaStream([this.videoTrack]):null,h()&&this.videoElement.load();const o=this.videoElement.play();void 0!==o&&o.catch((e=>{F.debug("[".concat(this.trackId,"] playback interrupted"),e.toString())}))}resetVideoElement(){ze.forEach((e=>{this.videoElement&&this.videoElement.removeEventListener(e,this.handleVideoEvents)})),this.videoElementCheckInterval&&(window.clearInterval(this.videoElementCheckInterval),this.videoElementCheckInterval=void 0),this.videoElementStatus=ce.NONE}handleAutoPlayFailed(){const e=t=>{t.preventDefault(),this.videoElement.play().then((()=>{F.debug("[".concat(this.trackId,"] Video element for trackId:").concat(this.trackId," autoplay resumed."))})).catch((e=>{F.error(e)})),this.autoplayFailed=!1,y()?document.body.removeEventListener("click",e,!0):(document.body.removeEventListener("touchstart",e,!0),document.body.removeEventListener("mousedown",e,!0))};y()?document.body.addEventListener("click",e,!0):(document.body.addEventListener("touchstart",e,!0),document.body.addEventListener("mousedown",e,!0)),be()}}const ze=["play","playing","loadeddata","canplay","pause","stalled","suspend","waiting","abort","emptied","ended","timeupdate","error"];class Ke extends je{constructor(e){super(e),this.container=void 0,this.slot=void 0,this.slot=e.element,this.updateConfig(e)}updateConfig(e){this.config=e,this.trackId=e.trackId;const t=e.element;t!==this.slot&&(this.destroy(),this.slot=t),this.createElements()}updateVideoTrack(e){this.videoTrack!==e&&(this.videoTrack=e,this.createElements())}play(e){var t;null!==(t=this.container)&&void 0!==t&&t.contains(this.videoElement)&&super.play(e)}getCurrentFrame(){var e;return null!==(e=this.container)&&void 0!==e&&e.contains(this.videoElement)?super.getCurrentFrame():new ImageData(2,2)}async getCurrentFrameToUint8Array(e){var t;let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return null!==(t=this.container)&&void 0!==t&&t.contains(this.videoElement)?await super.getCurrentFrameToUint8Array(e,i):await Ae(e)}destroy(){if(super.destroy(),this.videoElement.remove(),this.videoElement=document.createElement("video"),this.container){try{this.container.remove(),this.slot.removeChild(this.container)}catch(e){}this.container=void 0}}createElements(){this.container||(this.container=document.createElement("div")),this.container.id="agora-video-player-".concat(this.trackId),this.container.style.width="100%",this.container.style.height="100%",this.container.style.position="relative",this.container.style.overflow="hidden",this.videoTrack?(this.container.style.backgroundColor="black",u("KEEP_LAST_FRAME")&&this.isKeepLastFrame&&this.videoElement.paused&&this.resetVideoElement(),this.mountedVideoElement()):this.unmountedVideoElement(),this.slot.appendChild(this.container)}mountedVideoElement(){var e;!this.container||null!==(e=this.container)&&void 0!==e&&e.contains(this.videoElement)||this.container.appendChild(this.videoElement),super.initVideoElement(),this.videoElement.id="video_".concat(this.trackId),this.videoElement.className="agora_video_player",this.videoElement.style.width="100%",this.videoElement.style.height="100%",this.videoElement.style.position="absolute",this.videoElement.style.left="0",this.videoElement.style.top="0"}unmountedVideoElement(){var e;if(null!==(e=this.container)&&void 0!==e&&e.contains(this.videoElement)){super.resetVideoElement();try{this.container&&this.container.removeChild(this.videoElement)}catch(e){}this.videoElement=document.createElement("video")}}resetVideoElement(){var e;null!==(e=this.container)&&void 0!==e&&e.contains(this.videoElement)&&(super.resetVideoElement(),this.cacheVideoElement=this.videoElement,this.videoElement=document.createElement("video"))}getContainerElement(){return this.container}}class Ye{constructor(){this.context=void 0,this.analyserNode=void 0,this.sourceNode=void 0,this.context=Me(),this.analyserNode=this.context.createAnalyser(),this.analyserNode.fftSize=2048,this.analyserNode.smoothingTimeConstant=.4}updateSource(e){if(e!==this.sourceNode){if(this.sourceNode)try{this.sourceNode.disconnect(this.analyserNode)}catch(e){}this.sourceNode=e,null==e||e.connect(this.analyserNode)}}getVolumeLevel(){if(!this.sourceNode)return 0;if(!this.context||S()||I()||"running"!==this.context.state&&this.context.resume(),!this.analyserNode)return 0;const e=new Float32Array(this.analyserNode.fftSize);if(this.analyserNode.getFloatTimeDomainData)this.analyserNode.getFloatTimeDomainData(e);else{const t=new Uint8Array(this.analyserNode.fftSize);this.analyserNode.getByteTimeDomainData(t);for(let i=0;i<e.length;++i)e[i]=t[i]/128-1}const t=e.reduce(((e,t)=>e+t*t),0)/e.length;return Math.max(10*Math.log10(t)+100,0)/100}getAnalyserNode(){return this.analyserNode}rebuildAnalyser(){try{var e,t;null===(e=this.sourceNode)||void 0===e||e.disconnect(this.analyserNode),this.analyserNode=this.context.createAnalyser(),this.analyserNode.fftSize=2048,this.analyserNode.smoothingTimeConstant=.4,null===(t=this.sourceNode)||void 0===t||t.connect(this.analyserNode)}catch(e){F.warning("rebuild analyser node failed.")}}destroy(){this.updateSource(void 0)}}class qe extends l{get processSourceNode(){return this.sourceNode}set processedNode(e){var t;if(!this.isDestroyed&&this._processedNode!==e){try{var i;null===(i=this.sourceNode)||void 0===i||i.disconnect(this.outputNode)}catch(e){}null===(t=this._processedNode)||void 0===t||t.disconnect(),this._processedNode=e,this.connect()}}get processedNode(){return this._processedNode}constructor(){super(),this.outputNode=void 0,this.outputTrack=void 0,this.isPlayed=!1,this.context=void 0,this.audioBufferNode=void 0,this.destNode=void 0,this.audioOutputLevel=0,this.volumeLevelAnalyser=void 0,this._processedNode=void 0,this.playNode=void 0,this.isDestroyed=!1,this.onNoAudioInput=void 0,this.isNoAudioInput=!1,this._noAudioInputCount=0,this.context=Me(),this.playNode=this.context.destination,this.outputNode=this.context.createGain(),Ve(this.outputNode),this.volumeLevelAnalyser=new Ye}startGetAudioBuffer(e){this.audioBufferNode||(this.audioBufferNode=this.context.createScriptProcessor(e),this.outputNode.connect(this.audioBufferNode),this.audioBufferNode.connect(this.context.destination),this.audioBufferNode.onaudioprocess=e=>{this.emit(ee.ON_AUDIO_BUFFER,Ge(e))})}stopGetAudioBuffer(){this.audioBufferNode&&(this.audioBufferNode.onaudioprocess=null,this.outputNode.disconnect(this.audioBufferNode),this.audioBufferNode=void 0)}createOutputTrack(){if(!z().webAudioMediaStreamDest)throw new E(g.NOT_SUPPORTED,"your browser is not support audio processor");return this.destNode&&this.outputTrack||(this.destNode=this.context.createMediaStreamDestination(),this.outputNode.connect(this.destNode),this.outputTrack=this.destNode.stream.getAudioTracks()[0]),this.outputTrack}play(e){"running"!==this.context.state&&s((()=>{Oe.emit("autoplay-failed")})),this.isPlayed=!0,this.playNode=e||this.context.destination,this.outputNode.connect(this.playNode)}stop(){if(this.isPlayed)try{this.outputNode.disconnect(this.playNode)}catch(e){}this.isPlayed=!1}getAccurateVolumeLevel(){return this.volumeLevelAnalyser.getVolumeLevel()}async checkHasAudioInput(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if(e>5)return this.isNoAudioInput=!0,this.onNoAudioInput&&this.onNoAudioInput(),!1;S()||I()?"suspended"===this.context.state&&this.context.resume():"running"!==this.context.state&&this.context.resume();const t=this.volumeLevelAnalyser.getAnalyserNode();let i;t.getFloatTimeDomainData?(i=new Float32Array(t.fftSize),t.getFloatTimeDomainData(i)):(i=new Uint8Array(t.fftSize),t.getByteTimeDomainData(i));let s=!1;for(let e=0;e<i.length;e++)0!==i[e]&&(s=!0);return s?(this.isNoAudioInput=!1,!0):(await R(200),await this.checkHasAudioInput(e?e+1:1)&&s)}getAudioVolume(){return this.outputNode.gain.value}setVolume(e){this.outputNode.gain.setValueAtTime(e,this.context.currentTime)}destroy(){this.disconnect(),this.stop(),this.isDestroyed=!0,this.onNoAudioInput=void 0}disconnect(){var e,t;null===(e=this.processedNode)||void 0===e||e.disconnect(),null===(t=this.sourceNode)||void 0===t||t.disconnect(),this.outputNode&&this.outputNode.disconnect()}connect(){var e;this.processedNode?null===(e=this.processedNode)||void 0===e||e.connect(this.outputNode):this.sourceNode&&this.sourceNode.connect(this.outputNode);this.volumeLevelAnalyser.updateSource(this.outputNode)}}class Qe extends qe{get isFreeze(){return!1}constructor(t,i,s){var o;if(super(),this.sourceNode=void 0,this.track=void 0,this.clonedTrack=void 0,this.audioElement=void 0,this.isCurrentTrackCloned=!1,this.isRemoteTrack=!1,this.originVolumeLevelAnalyser=void 0,this.rebuildWebAudio=async()=>{if(F.debug("ready to rebuild web audio, state:",this.context.state),this.isNoAudioInput&&await this.checkHasAudioInput(),!this.isNoAudioInput||this.isDestroyed)return document.body.removeEventListener("click",this.rebuildWebAudio,!0),void F.debug("rebuild web audio success, current volume status",this.getAccurateVolumeLevel());this.context.resume().then((()=>F.info("resume success"))),F.debug("rebuild web audio because of ios 12 bugs"),this.disconnect();const e=this.track;this.track=this.track.clone(),this.isCurrentTrackCloned?e.stop():this.isCurrentTrackCloned=!0;const t=new MediaStream([this.track]);this.sourceNode=this.context.createMediaStreamSource(t),Ve(this.sourceNode),this.volumeLevelAnalyser.rebuildAnalyser();const i=this.outputNode.gain.value;this.outputNode=this.context.createGain(),this.outputNode.gain.setValueAtTime(i,this.context.currentTime),Ve(this.outputNode),this.emit(ee.UPDATE_SOURCE),this.connect(),this.audioElement.srcObject=t,this.isPlayed&&this.play(this.playNode),this.checkHasAudioInput()},"audio"!==t.kind)throw new E(g.UNEXPECTED_ERROR);this.track=t;const n=new MediaStream([this.track]);if(this.isRemoteTrack=!!i,this.sourceNode=this.context.createMediaStreamSource(n),Ve(this.sourceNode),s){const e=s.clone();e.enabled=!0,this.clonedTrack=e,F.debug("create an unmuted track ".concat(e.id," from the original track ").concat(s.id," to get the volume"));const t=this.context.createMediaStreamSource(new MediaStream([e]));Ve(t),this.originVolumeLevelAnalyser=new Ye,this.originVolumeLevelAnalyser.updateSource(t)}this.connect(),this.audioElement=document.createElement("audio"),this.audioElement.srcObject=n;const r=e();i&&r.os===a.IOS&&Number(null===(o=r.osVersion)||void 0===o?void 0:o.split(".")[0])<15&&(Oe.on(K.STATE_CHANGE,(()=>{"suspended"===this.context.state?document.body.addEventListener("click",this.rebuildWebAudio,!0):"running"===this.context.state&&this.rebuildWebAudio()})),this.checkHasAudioInput().then((e=>{e||document.body.addEventListener("click",this.rebuildWebAudio,!0)})))}updateTrack(e){this.sourceNode.disconnect(),this.track=e,this.isCurrentTrackCloned=!1;const t=new MediaStream([e]);this.sourceNode=this.context.createMediaStreamSource(t),Ve(this.sourceNode),this.processedNode||this.sourceNode.connect(this.outputNode),this.emit(ee.UPDATE_SOURCE),this.audioElement.srcObject=t}destroy(){var e;this.audioElement.srcObject=null,this.audioElement.remove(),Oe.off("state-change",this.rebuildWebAudio),null===(e=this.originVolumeLevelAnalyser)||void 0===e||e.destroy(),this.clonedTrack=void 0,super.destroy()}createMediaStreamSourceNode(e){return this.context.createMediaStreamSource(new MediaStream([e]))}updateOriginTrack(e){const t=e.clone();t.enabled=!0,this.clonedTrack&&(this.clonedTrack.stop(),this.clonedTrack=t),F.debug("create an unmuted track ".concat(t.id," from the original track ").concat(e.id," to get the volume"));const i=this.context.createMediaStreamSource(new MediaStream([t]));Ve(i),this.originVolumeLevelAnalyser&&this.originVolumeLevelAnalyser.updateSource(i)}getOriginVolumeLevel(){return this.originVolumeLevelAnalyser?this.originVolumeLevelAnalyser.getVolumeLevel():this.getAccurateVolumeLevel()}}const Xe=["play","playing","loadeddata","canplay","pause","stalled","suspend","waiting","abort","emptied","ended","error"],Ze=new class{constructor(){this.onAutoplayFailed=void 0,this.elementMap=new Map,this.elementStateMap=new Map,this.elementsNeedToResume=[],this.sinkIdMap=new Map,this.autoResumeAfterInterruption=e=>{Array.from(this.elementMap.entries()).forEach((t=>{let[i,s]=t;const o=this.elementStateMap.get(i),n=s.srcObject.getAudioTracks()[0],r=n&&n.readyState;if(F.debug("resume after interrupted, ele: ".concat(o," audio: ").concat(r," ").concat(e)),"live"===r){if(e)return s.pause(),void s.play();if("running"===Oe.curState)return D()?(s.pause(),void s.play()):void(o&&"paused"===o&&s.play())}}))},this.autoResumeAfterInterruptionOnIOS15_16=()=>{Array.from(this.elementMap.entries()).forEach((e=>{let[t,i]=e;const s=i.srcObject.getAudioTracks()[0];s&&"live"===s.readyState&&(F.debug("auto resume after interruption inside autoResumeAfterInterruptionOnIOS15"),i.pause(),i.play())}))},this.autoResumeAudioElement(),Oe.on(K.IOS_INTERRUPTION_END,this.autoResumeAfterInterruption),Oe.on(K.IOS_15_16_INTERRUPTION_END,this.autoResumeAfterInterruptionOnIOS15_16),Oe.on(K.STATE_CHANGE,(()=>{S()&&"suspended"===Oe.prevState&&"running"===Oe.curState&&this.autoResumeAfterInterruption()}))}async setSinkID(e,t){const i=this.elementMap.get(e);if(this.sinkIdMap.set(e,t),i)try{await i.setSinkId(t)}catch(e){throw new E(g.PERMISSION_DENIED,"can not set sink id: "+e.toString())}}play(e,t,i,o){if(this.elementMap.has(t))return;const n=document.createElement("audio");n.autoplay=!0,n.srcObject=new MediaStream([e]),this.bindAudioElementEvents(t,n),this.elementMap.set(t,n),this.elementStateMap.set(t,ce.INIT),this.setVolume(t,i);const r=this.sinkIdMap.get(t);if(r)try{n.setSinkId(r).catch((e=>{F.warning("[".concat(t,"] set sink id failed"),e.toString())}))}catch(e){F.warning("[".concat(t,"] set sink id failed"),e.toString())}const a=n.play();a&&a.then&&a.catch((e=>{o&&We(o,"audio",e.message,t),F.warning("audio element play warning",e.toString()),this.elementMap.has(t)&&"NotAllowedError"===e.name&&(F.warning("detected audio element autoplay failed"),this.elementsNeedToResume.push(n),s((()=>{this.onAutoplayFailed&&this.onAutoplayFailed(),be()})))}))}updateTrack(e,t){const i=this.elementMap.get(e);i&&(i.srcObject=new MediaStream([t]))}isPlaying(e){return this.elementMap.has(e)&&"playing"===this.elementStateMap.get(e)}setVolume(e,t){const i=this.elementMap.get(e);i&&(t=Math.max(0,Math.min(100,t)),i.volume=t/100)}stop(e){const t=this.elementMap.get(e);if(this.sinkIdMap.delete(e),!t)return;const i=this.elementsNeedToResume.indexOf(t);this.elementsNeedToResume.splice(i,1),t.srcObject=null,t.remove(),this.elementMap.delete(e),this.elementStateMap.delete(e)}bindAudioElementEvents(e,t){Xe.forEach((i=>{t.addEventListener(i,(i=>{const s=this.elementStateMap.get(e),o="pause"===i.type?"paused":i.type;if(F.debug("[".concat(e,"] audio-element-status change ").concat(s," => ").concat(o)),"error"===i.type){const i=null==t?void 0:t.error;i&&F.error("[".concat(e,"] media error, code: ").concat(i.code,", message: ").concat(i.message))}this.elementStateMap.set(e,o)}))}))}getPlayerState(e){return this.elementStateMap.get(e)||"uninit"}autoResumeAudioElement(){const e=()=>{this.elementsNeedToResume.forEach((e=>{e.play().then((e=>{F.debug("Auto resume audio element success")})).catch((e=>{F.warning("Auto resume audio element failed!",e)}))})),this.elementsNeedToResume=[]};w().then((()=>{y()?document.body.addEventListener("click",e,!0):(document.body.addEventListener("touchstart",e,!0),document.body.addEventListener("mousedown",e,!0))}))}};class Je extends l{get isPlayed(){return!0}get isFreeze(){return!1}constructor(){super(),this.context=void 0,this.processSourceNode=void 0,this.outputTrack=void 0,this.processedNode=void 0,this.clonedTrack=void 0,this.outputNode=void 0,this.outputNode=new $e}setVolume(){}createOutputTrack(){throw new E(g.NOT_SUPPORTED,"can not create output MediaStreamTrack when WebAudio disabled")}getOriginVolumeLevel(){return 0}getAccurateVolumeLevel(){return 0}stopGetAudioBuffer(){}startGetAudioBuffer(){}play(){}stop(){}destroy(){}updateTrack(){}updateOriginTrack(){}createMediaStreamSourceNode(){}}class $e{disconnect(){}connect(){}}function et(e){return new Promise(((t,i)=>{let s=!1;const o=document.createElement("video");o.setAttribute("autoplay",""),o.setAttribute("muted",""),o.muted=!0,o.autoplay=!0,o.setAttribute("playsinline",""),o.setAttribute("style","position: fixed; top: 0; left: 0; width: 1px; height: 1px"),document.body.appendChild(o);const n=S()?"canplay":"playing";o.addEventListener(n,(()=>{const e=o.videoWidth,i=o.videoHeight;!e&&h()||(s=!0,o.srcObject=null,o.remove(),t([e,i]))})),o.srcObject=new MediaStream([e]),o.play().catch(O),setTimeout((()=>{s||(o.srcObject=null,o.remove(),t([o.videoWidth,o.videoHeight]))}),4e3)}))}class tt extends me{getUserId(){return this._userId}constructor(e,t,i,s){super(e,"track-".concat(e.kind,"-").concat(t,"-").concat(s.clientId,"_").concat(p(5,""))),this._userId=void 0,this._uintId=void 0,this._isDestroyed=!1,this.store=void 0,this.processor=void 0,this._userId=t,this._uintId=i,this.store=s}_updateOriginMediaStreamTrack(e){this._originMediaStreamTrack=e,this._mediaStreamTrack=e,this._updatePlayerSource(),this.processor&&this.processor.updateInput({track:this._originMediaStreamTrack,context:this.processorContext})}_destroy(){this._isDestroyed=!0,F.info("[".concat(this.getTrackId(),"] is destroyed")),this.stop(),super.close()}getProcessorStats(){return this.processorContext.gatherStats()}getProcessorUsage(){return this.processorContext.gatherUsage()}}class it extends tt{get isPlaying(){return!(!this._player||this._player.videoElementStatus!==ce.PLAYING)}get __className__(){return"RemoteVideoTrack"}constructor(e,t,i,s){super(e,t,i,s),this._videoVisibleTimer=null,this._previousVideoVisibleStatus=void 0,this._clearPreviousVideoVisibleStatus=()=>this._previousVideoVisibleStatus=void 0,this.trackMediaType="video",this._videoWidth=void 0,this._videoHeight=void 0,this._player=void 0,this.processorDestination=void 0,this.processorContext=void 0,this.updateMediaStreamTrackResolution(),this.processorContext=new _e(this.getTrackId(),"remote"),this.processorDestination=new Te(this.processorContext),this.bindProcessorDestinationEvents()}getStats(){C((()=>{F.warning("[deprecated] RemoteVideoTrack.getStats will be removed in the future, use AgoraRTCClient.getRemoteVideoStats instead")}),"remoteVideoTrackGetStatsWarning");return M(this,Y.GET_STATS)||Ee({},se)}play(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("string"==typeof e){const t=document.getElementById(e);t?e=t:(F.warning("[".concat(this.getTrackId(),'] can not find "#').concat(e,'" element, use document.body')),e=document.body)}F.debug("[".concat(this.getTrackId(),"] start video playback in ").concat(e instanceof HTMLVideoElement?"HTMLVideoElement":"HTMLElement"),JSON.stringify(t));const i=Ee(Ee({fit:"cover"},t),{},{trackId:this.getTrackId(),element:e});this._player?this._player.updateConfig(i):(e instanceof HTMLVideoElement?this._player=new je(i):this._player=new Ke(i),this._player.updateVideoTrack(this._mediaStreamTrack),this._player.onFirstVideoFrameDecoded=()=>{this.store.subscribe(this.getUserId(),"video",void 0,void 0,Date.now()),this.safeEmit($.FIRST_FRAME_DECODED)},this._player.onVideoStateChanged=e=>{this.safeEmit($.VIDEO_STATE_CHANGED,e)}),this._player.play(this.store.sessionId||void 0),this._videoVisibleTimer&&window.clearInterval(this._videoVisibleTimer),this._clearPreviousVideoVisibleStatus(),this._videoVisibleTimer=window.setInterval((()=>{try{const e=this.getVideoElementVisibleStatus();this.safeEmit($.VIDEO_ELEMENT_VISIBLE_STATUS,e)}catch(e){}}),u("CHECK_VIDEO_VISIBLE_INTERVAL"))}stop(){this._player&&(this._videoVisibleTimer&&(window.clearInterval(this._videoVisibleTimer),this._videoVisibleTimer=null),this._clearPreviousVideoVisibleStatus(),this._player.destroy(),this._player=void 0,F.debug("[".concat(this.getTrackId(),"] stop video playback")))}getCurrentFrameData(){return this._player?this._player.getCurrentFrame():new ImageData(2,2)}updateMediaStreamTrackResolution(){et(this._originMediaStreamTrack).then((e=>{let[t,i]=e;this._videoHeight=i,this._videoWidth=t})).catch(O)}_updatePlayerSource(){F.debug("[".concat(this.getTrackId(),"] update player source track")),this._player&&this._player.updateVideoTrack(this._mediaStreamTrack)}getVideoElementVisibleStatus(){try{var e,t;const i=null==this||null===(e=this._player)||void 0===e?void 0:e.getContainerElement(),s={track:this,element:null==this||null===(t=this._player)||void 0===t?void 0:t.getVideoElement(),slot:null==i?void 0:i.parentElement},{element:o,slot:n}=s;if(this.isPlaying&&o instanceof HTMLVideoElement&&n instanceof HTMLElement){const e=P.checkOneElementVisible(o),t=Object.assign({},e);if(t.visible!==this._previousVideoVisibleStatus){this._previousVideoVisibleStatus=t.visible;const e=B.reportApiInvoke(null,{tag:v.TRACER,name:m.REMOTE_VIDEO_TRACK_GET_VIDEO_VISIBLE,options:[this.getTrackId()]});t.visible?e.onSuccess("Video is visible"):e.onSuccess("Invisible because of ".concat(t.reason))}return t}return}catch(e){throw new E(g.GET_VIDEO_ELEMENT_VISIBLE_ERROR,e.message)}}pipe(e){if(this.processor===e)return e;if(e._source)throw new E(g.INVALID_OPERATION,"Processor ".concat(e.name," already piped, please call unpipe beforehand."));return this.unpipe(),this.processor=e,this.processor._source=this,e.updateInput({track:this._originMediaStreamTrack,context:this.processorContext}),e}unpipe(){if(!this.processor)return;const e=this.processor;this.processor._source=void 0,this.processor=void 0,e.reset()}bindProcessorDestinationEvents(){this.processorDestination.on(oe.ON_TRACK,(async e=>{e?e!==this._mediaStreamTrack&&(this._mediaStreamTrack=e,this._updatePlayerSource()):this._mediaStreamTrack!==this._originMediaStreamTrack&&(this._mediaStreamTrack=this._originMediaStreamTrack,this._updatePlayerSource())}))}unbindProcessorDestinationEvents(){this.processorDestination.removeAllListeners(oe.ON_TRACK)}_destroy(){super._destroy(),this.unbindProcessorDestinationEvents()}_onSei(e){this.emit(J.SEI_RECEIVED,e)}}Se([H({argsMap:(e,t,i)=>[e.getTrackId(),"string"==typeof t?t:t instanceof HTMLVideoElement?"HTMLVideoElement":"HTMLElement",i]}),Ie("design:type",Function),Ie("design:paramtypes",[Object,Object]),Ie("design:returntype",void 0)],it.prototype,"play",null),Se([H({argsMap:e=>[e.getTrackId()]}),Ie("design:type",Function),Ie("design:paramtypes",[]),Ie("design:returntype",void 0)],it.prototype,"stop",null),Se([H({argsMap:(e,t)=>[e.getTrackId(),t.name]}),Ie("design:type",Function),Ie("design:paramtypes",[Object]),Ie("design:returntype",Object)],it.prototype,"pipe",null),Se([H({argsMap:e=>[e.getTrackId()]}),Ie("design:type",Function),Ie("design:paramtypes",[]),Ie("design:returntype",void 0)],it.prototype,"unpipe",null);class st extends tt{get isPlaying(){return this._useAudioElement?Ze.isPlaying(this.getTrackId()):this._source.isPlayed}get __className__(){return"RemoteAudioTrack"}constructor(e,t,i,s){super(e,t,i,s),this.trackMediaType="audio",this._source=void 0,this._useAudioElement=!0,this._volume=100,this.processorContext=void 0,this.processorDestination=void 0,this._played=!1,this._bypassWebAudio=!1,u("DISABLE_WEBAUDIO")?(this._source=new Je,this._bypassWebAudio=!0,this._useAudioElement=!0):(this._source=new Qe(e,!0),u("REMOTE_AUDIO_TRACK_USES_WEB_AUDIO")&&(this._useAudioElement=!1)),this._source.once(ee.RECEIVE_TRACK_BUFFER,(()=>{this.safeEmit($.FIRST_FRAME_DECODED)})),this.processorContext=new fe(this._source.context,this.getTrackId(),"remote"),this.processorDestination=new ye(this.processorContext),this.bindProcessorDestinationEvents(),this._source.on(ee.UPDATE_SOURCE,(()=>{this.processor&&this.processor.updateInput({node:this._source.processSourceNode,context:this.processorContext})}))}setAudioFrameCallback(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4096;if(!e)return this._source.removeAllListeners(ee.ON_AUDIO_BUFFER),void this._source.stopGetAudioBuffer();this._source.startGetAudioBuffer(t),this._source.removeAllListeners(ee.ON_AUDIO_BUFFER),this._source.on(ee.ON_AUDIO_BUFFER,(t=>e(t)))}setVolume(e){this._volume=e,this._useAudioElement?Ze.setVolume(this.getTrackId(),e):this._source.setVolume(e/100)}async setPlaybackDevice(e){if(!this._useAudioElement||!V()&&u("RESTRICTION_SET_PLAYBACK_DEVICE"))throw new E(g.NOT_SUPPORTED,"your browser does not support setting the audio output device");await Ze.setSinkID(this.getTrackId(),e)}getVolumeLevel(){return this._source.getAccurateVolumeLevel()}getStats(){C((()=>{F.warning("[deprecated] RemoteAudioTrack.getStats will be removed in the future, use AgoraRTCClient.getRemoteAudioStats instead")}),"remoteAudioTrackGetStatsWarning");return M(this,Y.GET_STATS)||Ee({},te)}play(){F.debug("[".concat(this.getTrackId(),"] start audio playback")),this._played=!0,this._useAudioElement?(F.debug("[".concat(this.getTrackId(),"] use audio element to play")),Ze.play(this._mediaStreamTrack,this.getTrackId(),this._volume,this.store.sessionId||void 0)):this._source.play()}stop(){F.debug("[".concat(this.getTrackId(),"] stop audio playback")),this._played=!1,this._useAudioElement?Ze.stop(this.getTrackId()):this._source.stop()}_destroy(){super._destroy(),this._played=!1,this.unbindProcessorDestinationEvents(),this._source.destroy()}_isFreeze(){return this._source.isFreeze}_updatePlayerSource(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];F.debug("[".concat(this.getTrackId(),"] update player source track")),e&&this._source.updateTrack(this._mediaStreamTrack),this._useAudioElement&&Ze.updateTrack(this.getTrackId(),this._mediaStreamTrack)}pipe(e){if(this._bypassWebAudio)throw new E(g.NOT_SUPPORTED,"can not pipe extension when WebAudio disabled");if(this.processor===e)return e;if(e._source)throw new E(g.INVALID_OPERATION,"Processor ".concat(e.name," already piped, please call unpipe beforehand."));return this.unpipe(),this.processor=e,this.processor._source=this,e.updateInput({track:this._originMediaStreamTrack,node:this._source.processSourceNode,context:this.processorContext}),e}unpipe(){var e;if(this._bypassWebAudio)throw new E(g.NOT_SUPPORTED,"can not unpipe extension when WebAudio disabled");if(!this.processor)return;const t=this.processor;null===(e=this._source.processSourceNode)||void 0===e||e.disconnect(),this.processor._source=!1,this.processor=void 0,t.reset()}bindProcessorDestinationEvents(){this.processorDestination.on(oe.ON_TRACK,(async e=>{e?e!==this._mediaStreamTrack&&(this._mediaStreamTrack=e,this._updatePlayerSource(!1),this._source.processedNode=this._source.createMediaStreamSourceNode(e)):this._mediaStreamTrack!==this._originMediaStreamTrack&&(this._mediaStreamTrack=this._originMediaStreamTrack,this._updatePlayerSource())})),this.processorDestination.on(oe.ON_NODE,(e=>{this._source.processedNode=e;const t=!e;this._useAudioElement!==t&&(this._played?(this.stop(),this._useAudioElement=t,this.play()):this._useAudioElement=t)}))}unbindProcessorDestinationEvents(){this.processorDestination.removeAllListeners(oe.ON_TRACK),this.processorDestination.removeAllListeners(oe.ON_NODE)}}Se([H({argsMap:(e,t)=>[e.getTrackId(),t],throttleTime:300}),Ie("design:type",Function),Ie("design:paramtypes",[Number]),Ie("design:returntype",void 0)],st.prototype,"setVolume",null),Se([H({argsMap:(e,t)=>[e.getTrackId(),t]}),Ie("design:type",Function),Ie("design:paramtypes",[String]),Ie("design:returntype",Promise)],st.prototype,"setPlaybackDevice",null),Se([H({argsMap:e=>[e.getTrackId()]}),Ie("design:type",Function),Ie("design:paramtypes",[]),Ie("design:returntype",void 0)],st.prototype,"play",null),Se([H({argsMap:e=>[e.getTrackId()]}),Ie("design:type",Function),Ie("design:paramtypes",[]),Ie("design:returntype",void 0)],st.prototype,"stop",null),Se([H({argsMap:(e,t)=>[e.getTrackId(),t.name]}),Ie("design:type",Function),Ie("design:paramtypes",[Object]),Ie("design:returntype",Object)],st.prototype,"pipe",null),Se([H({argsMap:e=>[e.getTrackId()]}),Ie("design:type",Function),Ie("design:paramtypes",[]),Ie("design:returntype",void 0)],st.prototype,"unpipe",null);const ot=new L("safari"),nt=!1,rt=!1;function at(e,t){switch(e){case"Starting video failed":case"OverconstrainedError":case"TrackStartError":return new E(g.MEDIA_OPTION_INVALID,"".concat(e,": ").concat(t));case"NotFoundError":case"DevicesNotFoundError":return new E(g.DEVICE_NOT_FOUND,"".concat(e,": ").concat(t));case"NotSupportedError":return new E(g.NOT_SUPPORTED,"".concat(e,": ").concat(t));case"NotReadableError":return new E(g.NOT_READABLE,"".concat(e,": ").concat(t));case"InvalidStateError":case"NotAllowedError":case"PERMISSION_DENIED":case"PermissionDeniedError":return new E(g.PERMISSION_DENIED,"".concat(e,": ").concat(t));case"ConstraintNotSatisfiedError":return new E(g.CONSTRAINT_NOT_SATISFIED,"".concat(e,": ").concat(t));default:return F.error("getUserMedia unexpected error",e),new E(g.UNEXPECTED_ERROR,"".concat(e,": ").concat(t))}}class ct extends l{get state(){return this._state}set state(e){e!==this._state&&(this.emit(ae.STATE_CHANGE,e),this._state=e)}constructor(){super(),this._state=re.IDLE,this.isAccessMicrophonePermission=!1,this.isAccessCameraPermission=!1,this.lastAccessMicrophonePermission=!1,this.lastAccessCameraPermission=!1,this.checkdeviceMatched=!1,this.deviceInfoMap=new Map,this.init().then((()=>{navigator.mediaDevices.addEventListener&&navigator.mediaDevices.addEventListener("devicechange",this.updateDevicesInfo.bind(this)),window.setInterval((()=>{(u("ENUMERATE_DEVICES_INTERVAL")||(b()||U())&&i())&&this.updateDevicesInfo()}),u("ENUMERATE_DEVICES_INTERVAL_TIME"))})).catch((e=>F.error(e.toString())))}async enumerateDevices(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices){return new E(g.NOT_SUPPORTED,"enumerateDevices() not supported.").throw()}const s=await navigator.mediaDevices.enumerateDevices(),o=this.checkMediaDeviceInfoIsOk(s);let n=!this.isAccessMicrophonePermission&&e,r=!this.isAccessCameraPermission&&t;o.audio&&(n=!1),o.video&&(r=!1);let a=null,c=null,d=null;if(!i&&(n||r)){if(ot.isLocked){F.debug("[device manager] wait GUM lock");(await ot.lock())(),F.debug("[device manager] GUM unlock")}if(F.debug("[device manager] check media device permissions",e,t,n,r),n&&r){try{d=await navigator.mediaDevices.getUserMedia({audio:!0,video:!0})}catch(e){const t=at(e.name||e.code||e,e.message);if(t.code===g.PERMISSION_DENIED)throw t;F.warning("getUserMedia failed in getDevices",t)}this.isAccessCameraPermission=!0,this.isAccessMicrophonePermission=!0}else if(n){try{a=await navigator.mediaDevices.getUserMedia({audio:e})}catch(e){const t=at(e.name||e.code||e,e.message);if(t.code===g.PERMISSION_DENIED)throw t;F.warning("getUserMedia failed in getDevices",t)}this.isAccessMicrophonePermission=!0}else if(r){try{c=await navigator.mediaDevices.getUserMedia({video:t})}catch(e){const t=at(e.name||e.code||e,e.message);if(t.code===g.PERMISSION_DENIED)throw t;F.warning("getUserMedia failed in getDevices",t)}this.isAccessCameraPermission=!0}F.debug("[device manager] mic permission",e,"cam permission",t)}try{const e=await navigator.mediaDevices.enumerateDevices();return a&&a.getTracks().forEach((e=>e.stop())),c&&c.getTracks().forEach((e=>e.stop())),d&&d.getTracks().forEach((e=>e.stop())),a=null,c=null,d=null,e}catch(e){a&&a.getTracks().forEach((e=>e.stop())),c&&c.getTracks().forEach((e=>e.stop())),d&&d.getTracks().forEach((e=>e.stop())),a=null,c=null,d=null;return new E(g.ENUMERATE_DEVICES_FAILED,e.toString()).throw()}}async getRecordingDevices(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return(await this.enumerateDevices(!0,!1,e)).filter((e=>"audioinput"===e.kind))}async getCamerasDevices(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return(await this.enumerateDevices(!1,!0,e)).filter((e=>"videoinput"===e.kind))}async getSpeakers(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return(await this.enumerateDevices(!0,!1,e)).filter((e=>"audiooutput"===e.kind))}searchDeviceIdByName(e){let t=null;return this.deviceInfoMap.forEach((i=>{i.device.label===e&&(t=i.device.deviceId)})),t}async getDeviceById(e){const t=(await this.enumerateDevices(!0,!0,!0)).find((t=>t.deviceId===e));if(!t)throw new E(g.DEVICE_NOT_FOUND,"deviceId: ".concat(e));return t}async init(){this.state=re.INITING;try{await this.updateDevicesInfo(),this.state=re.INITEND}catch(e){if(F.warning("Device Detection functionality cannot start properly.",e.toString()),this.state=re.IDLE,!x()){new E(g.WEB_SECURITY_RESTRICT,"Your context is limited by web security, please try using https protocol or localhost.").throw()}throw e}}async updateDevicesInfo(){const e=await this.enumerateDevices(!0,!0,!0),t=Date.now(),i=[];if(e[0]&&e[0].label&&!1===this.checkdeviceMatched){this.checkdeviceMatched=!0;const t=e.find((e=>"audioinput"===e.kind&&"default"===e.deviceId)),i=e.find((e=>"audiooutput"===e.kind&&"default"===e.deviceId));t&&i?i.groupId===t.groupId?F.debug("[device-check] default input ".concat(t.label," and output ").concat(i.label," is the same group")):F.warning("[device-check] default input ".concat(t.label," and output ").concat(i.label," is not the same group")):F.debug("[device-check] default input or output not found")}const s=this.checkMediaDeviceInfoIsOk(e);if(e.forEach((e=>{if(!e.deviceId)return;const s=this.deviceInfoMap.get("".concat(e.kind,"_").concat(e.deviceId));if("ACTIVE"!==(s?s.state:"INACTIVE")){const s={initAt:t,updateAt:t,device:e,state:"ACTIVE"};this.deviceInfoMap.set("".concat(e.kind,"_").concat(e.deviceId),s),i.push(s)}s&&(s.updateAt=t)})),this.deviceInfoMap.forEach(((e,s)=>{"ACTIVE"===e.state&&e.updateAt!==t&&(e.state="INACTIVE",i.push(e))})),this.state!==re.INITEND)return s.audio&&(this.lastAccessMicrophonePermission=!0,this.isAccessMicrophonePermission=!0),void(s.video&&(this.lastAccessCameraPermission=!0,this.isAccessCameraPermission=!0));i.forEach((e=>{switch(e.device.kind){case"audioinput":this.lastAccessMicrophonePermission&&this.isAccessMicrophonePermission&&this.emit(ae.RECORDING_DEVICE_CHANGED,e);break;case"videoinput":this.lastAccessCameraPermission&&this.isAccessCameraPermission&&this.emit(ae.CAMERA_DEVICE_CHANGED,e);break;case"audiooutput":this.lastAccessMicrophonePermission&&this.isAccessMicrophonePermission&&this.emit(ae.PLAYOUT_DEVICE_CHANGED,e)}})),s.audio&&(this.lastAccessMicrophonePermission=!0,this.isAccessMicrophonePermission=!0),s.video&&(this.lastAccessCameraPermission=!0,this.isAccessCameraPermission=!0)}checkMediaDeviceInfoIsOk(e){const t=e.filter((e=>"audioinput"===e.kind)),i=e.filter((e=>"videoinput"===e.kind)),s={audio:!1,video:!1};for(const e of t)if(e.label&&e.deviceId){s.audio=!0;break}for(const e of i)if(e.label&&e.deviceId){s.video=!0;break}return s}}const dt=new ct;const ut=new class extends l{get visibility(){return document.visibilityState}get lastHiddenTime(){return this._lastHiddenTime}get lastVisibleTime(){return this._lastVisibleTime}constructor(){super(),this._lastHiddenTime=0,this._lastVisibleTime=0,document.addEventListener("visibilitychange",(()=>{"hidden"===document.visibilityState?this._lastHiddenTime=performance.now():this._lastVisibleTime=performance.now(),F.debug("document visibility went ".concat(document.visibilityState)),this.emit("VISIBILITY_CHANGE",document.visibilityState)}))}};j();export{K as AUDIO_CONTEXT_EVENT,fe as AudioProcessorContext,ye as AudioProcessorDestination,ee as AudioSourceEvents,ie as DEFAULT_NETWORK_QUALITY_STATS,te as DEFAULT_REMOTE_AUDIO_TRACK_STATS,se as DEFAULT_REMOTE_VIDEO_TRACK_STATS,ct as DeviceManager,ae as DeviceManagerEvent,re as DeviceManagerState,nt as HAS_GUM_AUDIO,rt as HAS_GUM_VIDEO,ue as MediaElementNumStatus,ce as MediaElementStatus,ne as PROCESSOR_CONTEXT_EVENTS,oe as PROCESSOR_DESTINATION_EVENTS,st as RemoteAudioTrack,Z as RemoteStreamFallbackType,X as RemoteStreamType,tt as RemoteTrack,$ as RemoteTrackEvents,it as RemoteVideoTrack,ot as SAFARI_GLOBAL_GUM_LOCK,Q as StreamType,me as Track,J as TrackEvents,q as TrackHint,Y as TrackInternalEvent,_e as VideoProcessorContext,Te as VideoProcessorDestination,de as VideoState,he as __TRACK_LIST__,le as addTrack,Oe as audioContextState,Ze as audioElementPlayCenter,xe as audioTimerLoop,ke as autoPlayGestureEventEmitter,Ne as blob2Uint8Array,et as checkMediaStreamTrackResolution,Le as decodeAudioData,dt as deviceManager,Ae as emptyImage2TypedArray,Me as getAudioContext,z as getCompatibility,Be as getSilenceAudioTrack,He as getSilenceSamplesDuration,at as handleGetUserMediaError,Pe as hasAudioContext,Ve as polyfillAudioNode,pe as removeTrack,be as requestAutoplayGesture,Ge as silenceScriptProcessHandler,j as updateAgoraRTCCompatibility,ut as visibilityWatcher};
5
+ import"webrtc-adapter";import{getBrowserInfo as e,BrowserName as t,isChromeKernel as i,nextTick as r,isAboveChrome as s,isAboveFirefox as o,isAboveSafari as n,BrowserOS as a,isSafari as c,isWkWebview as d,getParameter as u,isFirefox as h,isChrome as l,isEdge as p,isMobile as m,checkValidConstrainLong as g,checkValidNumber as _,checkValidBoolean as v,checkValidEnum as f,AgoraRTCError as T,AgoraRTCErrorCode as E,isEmpty as y,EventEmitter as S,getRandomString as k,runOnce as b,AgoraAPIName as I,AgoraAPITag as A,PromiseMutex as w,emitAsPromiseNoResponse as D,removeItemFromList as C,isIOS as R,isIpadOS as N,wait as O,showElectronSelectSourceWindow as M,getElectronInstance as L,isElectron as P,recursiveMerge as V,isAndroid as x,isHarmonyOS as U,detectSecureContext as B,isAndroidChromium as F,domLoadedPromise as H,isIOS15 as W,emitAsPromise as G,noop as K,isLegacyChrome as z,isAboveEdge as j,isAboveOpera as Z,constrainLongToNumber as Y,hexToBytes as J,md5 as X,atom as q,emitAsInvokerNoResponse as Q,isIOS16 as $,retryable as ee,getOSWithVersion as te,isAboveIOS15_1 as ie,isInPage as re,isBetweenBrowser as se,isWindows as oe,elementVisibleChecker as ne,safeCloneJson as ae,jsonClone as ce,isAboveIOS15_2 as de,isWechatBrowser as ue}from"@agora-js/shared";export{isElectron}from"@agora-js/shared";import{logger as he,report as le,AgoraRTCEventUploadType as pe,apiInvoke as me}from"@agora-js/report";import ge from"axios";import{inflate as _e,deflate as ve}from"pako";const fe={getDisplayMedia:!1,getStreamFromExtension:!1,supportUnifiedPlan:!1,supportMinBitrate:!1,supportSetRtpSenderParameters:!1,supportDualStream:!0,webAudioMediaStreamDest:!1,supportReplaceTrack:!1,supportWebGL:!1,webAudioWithAEC:!1,supportRequestFrame:!1,supportShareAudio:!1,supportDualStreamEncoding:!1,supportDataChannel:!1,supportPCSetConfiguration:!1,supportWebRTCEncodedTransform:!1,supportWebRTCInsertableStream:!1,supportRequestVideoFrameCallback:!1,supportWebCrypto:!1};function Te(){const l=e();fe.getDisplayMedia=function(e){if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia)return!0;return!1}(),fe.getStreamFromExtension=l.name===t.CHROME&&Number(l.version)>34,fe.supportUnifiedPlan=function(){if(!window.RTCRtpTransceiver)return!1;if(!("currentDirection"in RTCRtpTransceiver.prototype))return!1;const e=new RTCPeerConnection;let t=!1;try{e.addTransceiver("audio"),t=!0}catch(e){}return e.close(),t}(),fe.supportMinBitrate=l.name===t.CHROME||l.name===t.EDGE,fe.supportSetRtpSenderParameters=function(){const r=e();if(!window.RTCRtpSender||!window.RTCRtpSender.prototype.setParameters||!window.RTCRtpSender.prototype.getParameters)return!1;return!!i()||(!(!c()&&!d())||r.name===t.FIREFOX&&Number(r.version)>=64)}(),l.name===t.SAFARI&&(Number(l.version)>=14?fe.supportDualStream=!0:fe.supportDualStream=!1),fe.webAudioMediaStreamDest=function(){const i=e();if(i.name===t.SAFARI&&Number(i.version)<12)return!1;return!0}(),fe.supportReplaceTrack=function(){if(!window.RTCRtpSender)return!1;if("function"==typeof RTCRtpSender.prototype.replaceTrack)return!0;return!1}(),fe.supportWebGL="undefined"!=typeof WebGLRenderingContext,fe.supportRequestFrame=!!window.CanvasCaptureMediaStreamTrack,i()||(fe.webAudioWithAEC=!0),fe.supportShareAudio=function(){const i=e();if((i.os===a.WIN_10||i.os===a.WIN_81||i.os===a.WIN_7||i.os===a.LINUX||i.os===a.MAC_OS||i.os===a.CHROMIUM_OS)&&i.name===t.CHROME&&Number(i.version)>=74)return!0;return!1}(),fe.supportDataChannel=function(){if(s(76)||o(68)||n(14))return!0;return!1}(),fe.supportPCSetConfiguration=function(){const e=window.RTCPeerConnection;return!h()&&!!e&&e.prototype.setConfiguration instanceof Function}(),fe.supportWebRTCEncodedTransform=function(){const t=e();return"Chrome"===t.name&&Number(t.version)>=87||"Safari"===t.name&&Number(t.version)>=15}(),fe.supportWebRTCInsertableStream=function(){const i=e();return(i.name===t.CHROME||i.name===t.EDGE)&&Number(i.version)>=94&&"MediaStreamTrackGenerator"in window&&"MediaStreamTrackProcessor"in window}(),fe.supportRequestVideoFrameCallback=function(){if("requestVideoFrameCallback"in HTMLVideoElement.prototype)return!0;return!1}(),fe.supportWebCrypto="undefined"!=typeof window&&void 0!==window.crypto&&void 0!==window.crypto.subtle,r((()=>{fe.supportDualStreamEncoding=function(){const t=e();if(u("DISABLE_WEBAUDIO"))return!0;return"Safari"===t.name&&Number(t.version)>=14||!!("Chrome"===t.name&&/Windows/i.test(t.os||"")&&Number(t.version)>=100&&u("CHROME_DUAL_STREAM_USE_ENCODING"))}(),he.info("browser compatibility",JSON.stringify(fe),JSON.stringify(l))}))}function Ee(){return fe}function ye(){return"setSinkId"in HTMLAudioElement.prototype&&(!u("RESTRICTION_SET_PLAYBACK_DEVICE")||(l()||p())&&!m())}let Se=function(e){return e.IOS_15_16_INTERRUPTION_START="ios15_16-interruption-start",e.IOS_15_16_INTERRUPTION_END="ios15_16-interruption-end",e.IOS_INTERRUPTION_START="ios-interruption-start",e.IOS_INTERRUPTION_END="ios-interruption-end",e.STATE_CHANGE="state-change",e}({});function ke(e,t,i){return{sampleRate:e,stereo:t,bitrate:i}}function be(e,t,i,r,s){return{width:e,height:t,frameRate:i,bitrateMin:r,bitrateMax:s}}function Ie(e,t,i,r,s){return{width:{max:e},height:{max:t},frameRate:i,bitrateMin:r,bitrateMax:s}}function Ae(e,t){return{numSpatialLayers:e,numTemporalLayers:t}}const we={"90p":be(160,90),"90p_1":be(160,90),"120p":be(160,120,15,30,65),"120p_1":be(160,120,15,30,65),"120p_3":be(120,120,15,30,50),"120p_4":be(212,120),"180p":be(320,180,15,30,140),"180p_1":be(320,180,15,30,140),"180p_3":be(180,180,15,30,100),"180p_4":be(240,180,15,30,120),"240p":be(320,240,15,40,200),"240p_1":be(320,240,15,40,200),"240p_3":be(240,240,15,40,140),"240p_4":be(424,240,15,40,220),"360p":be(640,360,15,80,400),"360p_1":be(640,360,15,80,400),"360p_3":be(360,360,15,80,260),"360p_4":be(640,360,30,80,600),"360p_6":be(360,360,30,80,400),"360p_7":be(480,360,15,80,320),"360p_8":be(480,360,30,80,490),"360p_9":be(640,360,15,80,800),"360p_10":be(640,360,24,80,800),"360p_11":be(640,360,24,80,1e3),"480p":be(640,480,15,100,500),"480p_1":be(640,480,15,100,500),"480p_2":be(640,480,30,100,1e3),"480p_3":be(480,480,15,100,400),"480p_4":be(640,480,30,100,750),"480p_6":be(480,480,30,100,600),"480p_8":be(848,480,15,100,610),"480p_9":be(848,480,30,100,930),"480p_10":be(640,480,10,100,400),"720p":be(1280,720,15,120,1130),"720p_auto":be(1280,720,30,900,3e3),"720p_1":be(1280,720,15,120,1130),"720p_2":be(1280,720,30,120,2e3),"720p_3":be(1280,720,30,120,1710),"720p_5":be(960,720,15,120,910),"720p_6":be(960,720,30,120,1380),"1080p":be(1920,1080,15,120,2080),"1080p_1":be(1920,1080,15,120,2080),"1080p_2":be(1920,1080,30,120,3e3),"1080p_3":be(1920,1080,30,120,3150),"1080p_5":be(1920,1080,60,120,4780),"1440p":be(2560,1440,30,120,4850),"1440p_1":be(2560,1440,30,120,4850),"1440p_2":be(2560,1440,60,120,7350),"4k":be(3840,2160,30,120,8910),"4k_1":be(3840,2160,30,120,8910),"4k_3":be(3840,2160,60,120,13500)},De=[{scaleResolutionDownBy:2,width:1280,height:720,frameRate:30,bitrateMin:300,bitrateMax:900},{scaleResolutionDownBy:1.333333,width:1280,height:720,frameRate:30,bitrateMin:600,bitrateMax:2e3},{scaleResolutionDownBy:1,width:1280,height:720,frameRate:30,bitrateMin:900,bitrateMax:3e3}],Ce={"480p":Ie(640,480,5),"480p_1":Ie(640,480,5),"480p_2":Ie(640,480,30),"480p_3":Ie(640,480,15),"720p":Ie(1280,720,5),"720p_auto":be(1280,720,30,900,3e3),"720p_1":Ie(1280,720,5),"720p_2":Ie(1280,720,30),"720p_3":Ie(1280,720,15),"1080p":Ie(1920,1080,5),"1080p_1":Ie(1920,1080,5),"1080p_2":Ie(1920,1080,30),"1080p_3":Ie(1920,1080,15)},Re={"1SL1TL":Ae(1,1),"3SL3TL":Ae(3,3),"2SL3TL":Ae(2,3)};function Ne(e){return e||(e="480p_1"),"string"==typeof e?Object.assign({},we[e]):e}function Oe(e){return"string"==typeof e?Object.assign({},Ce[e]):e}function Me(e){return"string"==typeof e?Object.assign({},Re[e]):e}const Le={speech_low_quality:ke(16e3,!1),speech_standard:ke(32e3,!1,18),music_standard:ke(48e3,!1),standard_stereo:ke(48e3,!0,56),high_quality:ke(48e3,!1,128),high_quality_stereo:ke(48e3,!0,192)};function Pe(e){return"string"==typeof e?Object.assign({},Le[e]):e}const Ve=[];function xe(e){Ve.includes(e)||Ve.push(e)}function Ue(e){const t=Ve.indexOf(e);-1!==t&&Ve.splice(t,1)}function Be(e){return g(e.width,"config.width"),g(e.height,"config.height"),void 0!==e.frameRate&&g(e.frameRate,"config.frameRate"),void 0!==e.bitrateMax&&_(e.bitrateMax,"config.bitrateMax"),void 0!==e.bitrateMin&&_(e.bitrateMin,"config.bitrateMin"),!0}function Fe(e){return void 0!==e.sampleRate&&_(e.sampleRate,"config.sampleRate",0,96e3,!0),void 0!==e.sampleSize&&_(e.sampleRate,"config.sampleSize",0,128,!0),void 0!==e.stereo&&v(e.stereo,"config.stereo"),void 0!==e.bitrate&&_(e.bitrate,"config.bitrate",0,1e4,!1),!0}function He(e){return"string"==typeof e?f(e,"profile",Object.keys(we)):Be(e),!0}function We(e){return"string"==typeof e?f(e,"profile",Object.keys(Le)):Fe(e),!0}function Ge(e){return f(e,"mediaSource",["screen","window","application"]),!0}let Ke=function(e){return e.NEED_RENEGOTIATE="@need_renegotiate",e.NEED_REPLACE_TRACK="@need_replace_track",e.NEED_REPLACE_MIXING_TRACK="@need_replace_mixing_track",e.NEED_CLOSE="@need_close",e.NEED_ENABLE_TRACK="@need_enable_track",e.NEED_DISABLE_TRACK="@need_disable_track",e.NEED_SESSION_ID="@need_sid",e.SET_OPTIMIZATION_MODE="@set_optimization_mode",e.GET_STATS="@get_stats",e.GET_RTC_STATS="@get_rtc_stats",e.GET_LOW_VIDEO_TRACK="@get_low_video_track",e.NEED_RESET_REMOTE_SDP="@need_reset_remote_sdp",e.NEED_UPDATE_VIDEO_ENCODER="@need_update_video_encoder",e.NEED_UPDATE_VIDEO_SEND_PARAMETERS="@need_update_video_send_parameters",e.NEED_MUTE_TRACK="@need_mute_track",e.NEED_UNMUTE_TRACK="@need_unmute_track",e}({}),ze=function(e){return e.SCREEN_TRACK="screen_track",e.CUSTOM_TRACK="custome_track",e.LOW_STREAM="low_stream",e}({});function je(e){if(!e)throw new T(E.INVALID_PARAMS);return y(e.width)||g(e.width,"streamParameter.width"),y(e.height)||g(e.height,"streamParameter.height"),y(e.framerate)||g(e.framerate,"streamParameter.framerate"),y(e.bitrate)||_(e.bitrate,"streamParameter.bitrate"),!0}let Ze=function(e){return e[e.HIGH_STREAM=0]="HIGH_STREAM",e[e.LOW_STREAM=1]="LOW_STREAM",e}({}),Ye=function(e){return e[e.HIGH_STREAM=0]="HIGH_STREAM",e[e.LOW_STREAM=1]="LOW_STREAM",e}({}),Je=function(e){return e[e.DISABLE=0]="DISABLE",e[e.LOW_STREAM=1]="LOW_STREAM",e[e.AUDIO_ONLY=2]="AUDIO_ONLY",e}({}),Xe=function(e){return e.TRANSCEIVER_UPDATED="transceiver-updated",e.SEI_TO_SEND="sei-to-send",e.SEI_RECEIVED="sei-received",e.TRACK_UPDATED="track-updated",e}({}),qe=function(e){return e.SOURCE_STATE_CHANGE="source-state-change",e.TRACK_ENDED="track-ended",e.BEAUTY_EFFECT_OVERLOAD="beauty-effect-overload",e.VIDEO_ELEMENT_VISIBLE_STATUS="video-element-visible-status",e.CLOSED="closed",e}({}),Qe=function(e){return e.FIRST_FRAME_DECODED="first-frame-decoded",e.VIDEO_ELEMENT_VISIBLE_STATUS="video-element-visible-status",e.VIDEO_STATE_CHANGED="video-state-changed",e}({}),$e=function(e){return e.AUDIO_SOURCE_STATE_CHANGE="audio_source_state_change",e.RECEIVE_TRACK_BUFFER="receive_track_buffer",e.ON_AUDIO_BUFFER="on_audio_buffer",e.UPDATE_SOURCE="update_source",e}({}),et=function(e){return e.UPDATE_TRACK_SOURCE="update-track-source",e}({});const tt={sendVolumeLevel:0,sendBitrate:0,sendBytes:0,sendPackets:0,sendPacketsLost:0,sendJitterMs:0,sendRttMs:0,currentPacketLossRate:0},it={sendBytes:0,sendBitrate:0,sendPackets:0,sendPacketsLost:0,sendJitterMs:0,sendRttMs:0,sendResolutionHeight:0,sendResolutionWidth:0,captureResolutionHeight:0,captureResolutionWidth:0,targetSendBitrate:0,totalDuration:0,totalFreezeTime:0,currentPacketLossRate:0},rt={transportDelay:0,end2EndDelay:0,receiveBitrate:0,receiveLevel:0,receiveBytes:0,receiveDelay:0,receivePackets:0,receivePacketsLost:0,totalDuration:0,totalFreezeTime:0,freezeRate:0,packetLossRate:0,currentPacketLossRate:0,publishDuration:-1},st={uplinkNetworkQuality:0,downlinkNetworkQuality:0},ot={transportDelay:0,end2EndDelay:0,receiveBitrate:0,receiveBytes:0,receiveDelay:0,receivePackets:0,receivePacketsLost:0,receiveResolutionHeight:0,receiveResolutionWidth:0,totalDuration:0,totalFreezeTime:0,freezeRate:0,packetLossRate:0,currentPacketLossRate:0,publishDuration:-1};let nt=function(e){return e.ON_TRACK="on_track",e.ON_NODE="on_node",e}({}),at=function(e){return e.REQUEST_UPDATE_CONSTRAINTS="request_update_constraints",e.REQUEST_CONSTRAINTS="request_constraints",e}({}),ct=function(e){return e.IDLE="IDLE",e.INITING="INITING",e.INITEND="INITEND",e}({}),dt=function(e){return e.STATE_CHANGE="state_change",e.RECORDING_DEVICE_CHANGED="recordingDeviceChanged",e.PLAYOUT_DEVICE_CHANGED="playoutDeviceChanged",e.CAMERA_DEVICE_CHANGED="cameraDeviceChanged",e}({});function ut(e){return void 0!==e.smoothnessLevel&&_(e.smoothnessLevel,"options.smoothnessLevel",0,1,!1),void 0!==e.lighteningLevel&&_(e.lighteningLevel,"options.lighteningLevel",0,1,!1),void 0!==e.rednessLevel&&_(e.rednessLevel,"options.rednessLevel",0,1,!1),void 0!==e.lighteningContrastLevel&&f(e.lighteningContrastLevel,"options.lighteningContrastLevel",[0,1,2]),!0}let ht=function(e){return e.NONE="none",e.INIT="init",e.CANPLAY="canplay",e.PLAYING="playing",e.PAUSED="paused",e.SUSPEND="suspend",e.STALLED="stalled",e.WAITING="waiting",e.ERROR="error",e.DESTROYED="destroyed",e.ABORT="abort",e.ENDED="ended",e.EMPTIED="emptied",e.LOADEDDATA="loadeddata",e}({}),lt=function(e){return e[e.VideoStateStopped=0]="VideoStateStopped",e[e.VideoStateStarting=1]="VideoStateStarting",e[e.VideoStateDecoding=2]="VideoStateDecoding",e[e.VideoStateFrozen=3]="VideoStateFrozen",e}({});const pt={uninit:100,none:110,init:120,loadeddata:130,canplay:200,playing:210,paused:220,suspend:300,stalled:310,waiting:320,error:330,destroyed:340,abort:350,ended:360,emptied:370};let mt=function(e){return e.OPEN="open",e.MESSAGE="message",e.CLOSE="close",e.CLOSING="closing",e.ERROR="error",e}({});function gt(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,r)}return i}function _t(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?gt(Object(i),!0).forEach((function(t){vt(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):gt(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function vt(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var r=i.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function ft(e,t,i,r,s){var o={};return Object.keys(r).forEach((function(e){o[e]=r[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=i.slice().reverse().reduce((function(i,r){return r(e,t,i)||i}),o),s&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(s):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}class Tt extends S{set _mediaStreamTrack(e){e!==this.mediaStreamTrack&&(this.safeEmit(Xe.TRACK_UPDATED,e),this.mediaStreamTrack=e)}get _mediaStreamTrack(){return this.mediaStreamTrack}constructor(e,t){super(),vt(this,"trackMediaType",void 0),vt(this,"_ID",void 0),vt(this,"_rtpTransceiver",void 0),vt(this,"_lowRtpTransceiver",void 0),vt(this,"_hints",[]),vt(this,"_isClosed",!1),vt(this,"_originMediaStreamTrack",void 0),vt(this,"mediaStreamTrack",void 0),vt(this,"_external",{}),this._ID=t||k(8,"track-"),this._originMediaStreamTrack=e,this.mediaStreamTrack=e,xe(this)}toString(){return this._ID}getTrackId(){return this._ID}getMediaStreamTrack(e){return e||b((()=>{var e;le.reportApiInvoke(null,{name:I.GET_MEDIA_STREAM_TRACK,options:[],tag:A.TRACER}).onSuccess((null===(e=this._mediaStreamTrack)||void 0===e?void 0:e.label)||"")}),this.mediaStreamTrack.id||this.getTrackId()),this._mediaStreamTrack}getRTCRtpTransceiver(e){return e===Ze.LOW_STREAM?this._lowRtpTransceiver:this._rtpTransceiver}getMediaStreamTrackSettings(){return this.getMediaStreamTrack(!0).getSettings()}close(){this._isClosed=!0,this._lowRtpTransceiver=void 0,this._rtpTransceiver=void 0,Ue(this),this.emit(qe.CLOSED),this.removeAllListeners(Xe.SEI_RECEIVED)}_updateRtpTransceiver(e,t){if(t===Ze.LOW_STREAM){if(this._lowRtpTransceiver===e)return;this._lowRtpTransceiver=e}else{if(this._rtpTransceiver===e)return;this._rtpTransceiver=e}this.emit(Xe.TRANSCEIVER_UPDATED,e,t)}}class Et extends Tt{get isExternalTrack(){return this._isExternalTrack}get muted(){return this._muted}get enabled(){return this._enabled}get processorContext(){return this._processorContext}constructor(e,t){super(e,t),vt(this,"_enabled",!0),vt(this,"_muted",!1),vt(this,"_isExternalTrack",!1),vt(this,"_isClosed",!1),vt(this,"_enabledMutex",void 0),vt(this,"processor",void 0),vt(this,"_processorContext",void 0),vt(this,"_handleTrackEnded",(()=>{this.onTrackEnded()})),this._enabledMutex=new w("".concat(this.getTrackId())),e.addEventListener("ended",this._handleTrackEnded)}getTrackLabel(){var e,t;return null!==(e=null===(t=this._originMediaStreamTrack)||void 0===t?void 0:t.label)&&void 0!==e?e:""}close(){this._isClosed||(this.stop(),this._originMediaStreamTrack.stop(),this._mediaStreamTrack!==this._originMediaStreamTrack&&(this._mediaStreamTrack.stop(),this._mediaStreamTrack=null),this._originMediaStreamTrack=null,this._enabledMutex=null,he.debug("[".concat(this.getTrackId(),"] close")),this.emit(Ke.NEED_CLOSE),super.close())}async _updateOriginMediaStreamTrack(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this._isExternalTrack=i,e!==this._originMediaStreamTrack&&(this._originMediaStreamTrack&&(this._originMediaStreamTrack.removeEventListener("ended",this._handleTrackEnded),t&&this._originMediaStreamTrack.stop()),e.addEventListener("ended",this._handleTrackEnded),this._originMediaStreamTrack=e,this._muted&&(this._originMediaStreamTrack.enabled=!1),this._mediaStreamTrack=this._originMediaStreamTrack,this._updatePlayerSource(),await D(this,Ke.NEED_REPLACE_TRACK,this),this.processor&&this._processorContext&&this.processor.updateInput({track:this._originMediaStreamTrack,context:this._processorContext}))}_getDefaultPlayerConfig(){return{}}onTrackEnded(){he.debug("[".concat(this.getTrackId(),"] track ended")),this.safeEmit(qe.TRACK_ENDED)}stateCheck(e,t){if(he.debug("check track state, [muted: ".concat(this._muted,", enabled: ").concat(this._enabled,"] to [").concat(e,": ").concat(t,"]")),v(t,e),this._enabled&&this._muted&&"enabled"===e&&!1===t)throw new T(E.TRACK_STATE_UNREACHABLE,"cannot set enabled while the track is muted").print("error",he);if(!this._enabled&&!this._muted&&"muted"===e&&!0===t)throw new T(E.TRACK_STATE_UNREACHABLE,"cannot set muted while the track is disabled").print("error",he)}getProcessorStats(){return this._processorContext&&this._processorContext.gatherStats()||[]}getProcessorUsage(){return this._processorContext?this._processorContext.gatherUsage():Promise.resolve([])}}const yt=window.AudioContext||window.webkitAudioContext;let St=null;const kt=new class extends S{constructor(){super(...arguments),vt(this,"prevState",void 0),vt(this,"curState",void 0),vt(this,"currentTime",void 0),vt(this,"currentTimeStuckAt",void 0),vt(this,"interruptDetectorTrack",void 0),vt(this,"onLocalAudioTrackMute",(()=>{he.info("ios15-interruption-start"),this.emit(Se.IOS_15_16_INTERRUPTION_START)})),vt(this,"onLocalAudioTrackUnmute",(async()=>{he.info("ios15-interruption-end"),"running"!==this.curState||this.duringInterruption?he.info("ios15-interruption-end-canceled"):(St&&await St.suspend(),this.emit(Se.IOS_15_16_INTERRUPTION_END))}))}get duringInterruption(){return"running"===this.prevState&&"interrupted"===this.curState}bindInterruptDetectorTrack(e){he.debug("webaudio bindInterruptDetectorTrack ".concat(e.getTrackId())),this.interruptDetectorTrack||(this.interruptDetectorTrack=e,this.interruptDetectorTrack._mediaStreamTrack.onmute=this.onLocalAudioTrackMute,this.interruptDetectorTrack._mediaStreamTrack.onunmute=this.onLocalAudioTrackUnmute)}unbindInterruptDetectorTrack(e){he.debug("webaudio unbindInterruptDetectorTrack ".concat(e.getTrackId())),this.interruptDetectorTrack&&this.interruptDetectorTrack===e&&(this.interruptDetectorTrack._mediaStreamTrack&&(this.interruptDetectorTrack._mediaStreamTrack.onmute=null,this.interruptDetectorTrack._mediaStreamTrack.onunmute=null),this.interruptDetectorTrack=void 0)}};function bt(){if(!yt)return void he.error("your browser is not support web audio");he.info("create audio context");const t=_t({},u("WEBAUDIO_INIT_OPTIONS"));he.debug("audio context init option:",JSON.stringify(t)),St=new yt(t),kt.curState=St.state,St.onstatechange=()=>{kt.prevState=kt.curState,kt.curState=St?St.state:void 0;const{prevState:t,curState:i}=kt,r="running"===i,s="interrupted"===i,o="running"===t,n="suspended"===t,a="interrupted"===t,c=e().osVersion;(R()||N())&&o&&s&&(he.info("ios".concat(c,"-interruption-start")),kt.emit(Se.IOS_INTERRUPTION_START)),(R()||N())&&(n||a)&&r&&(he.info("ios".concat(c,"-interruption-end")),kt.emit(Se.IOS_INTERRUPTION_END)),t!==i&&kt.emit(Se.STATE_CHANGE,i,t)},setInterval((()=>{var e;const t=null===(e=St)||void 0===e?void 0:e.currentTime;if(kt.currentTime!==t)kt.currentTimeStuckAt&&(he.debug("AudioContext current time resume at ".concat(t)),kt.currentTimeStuckAt=void 0),kt.currentTime=t;else{if(t!==kt.currentTimeStuckAt){le.reportApiInvoke(null,{name:"WEB_AUDIO_CURRENT_TIME_STUCK",options:{currentTime:t},tag:A.TRACER}).onSuccess(),he.warning("AudioContext current time stuck at ".concat(t))}kt.currentTimeStuckAt=t}}),5e3),async function(e){const t=["click","contextmenu","auxclick","dblclick","mousedown","mouseup","touchend","keydown","keyup"];let i,r=!1,s=!1,o=!1;function n(t){"running"===e.state?a(!1):R()||N()?"suspended"===e.state&&(a(!0),t&&e.resume().then(d,d)):"closed"!==e.state&&(a(!0),t&&e.resume().then(d,d))}function a(e){if(r!==e){r=e;for(let i=0,r=t;i<r.length;i+=1){const t=r[i];e?window.addEventListener(t,u,{capture:!0,passive:!0}):window.removeEventListener(t,u,{capture:!0,passive:!0})}}}function c(){n(!0)}function d(){n(!1)}function u(){n(!0)}function h(e){if(!o)if(i.paused)if(e){let e;l(!1),o=!0;try{e=i.play(),e?e.then(p,p):(i.addEventListener("playing",p),i.addEventListener("abort",p),i.addEventListener("error",p))}catch(e){p()}}else l(!0);else l(!1)}function l(e){if(s!==e){s=e;for(let i=0,r=t;i<r.length;i++){const t=r[i];e?window.addEventListener(t,m,{capture:!0,passive:!0}):window.removeEventListener(t,m,{capture:!0,passive:!0})}}}function p(){i.removeEventListener("playing",p),i.removeEventListener("abort",p),i.removeEventListener("error",p),o=!1,h(!1)}function m(){h(!0)}if(R()){const t=e.createMediaStreamDestination(),r=document.createElement("div");r.innerHTML="<audio x-webkit-airplay='deny'></audio>",i=r.children.item(0),i.controls=!1,i.disableRemotePlayback=!0,i.preload="auto",i.srcObject=t.stream,h(!0)}kt.on(Se.STATE_CHANGE,c),n(!1)}(St)}function It(){if(!St){if(bt(),!St)throw new T(E.NOT_SUPPORTED,"can not create audio context");return St}return St}function At(){return!!St}function wt(e){if(function(){if(null!==Ct)return Ct;const e=It(),t=e.createBufferSource(),i=e.createGain(),r=e.createGain();t.connect(i),t.connect(r),t.disconnect(i);let s=!1;try{t.disconnect(i)}catch(e){s=!0}return t.disconnect(),Ct=s,s}())return;const t=e.connect,i=e.disconnect;e.connect=(i,r,s)=>(e._inputNodes||(e._inputNodes=[]),e._inputNodes.includes(i)||(i instanceof AudioNode?(e._inputNodes.push(i),t.call(e,i,r,s)):t.call(e,i,r)),e),e.disconnect=(r,s,o)=>{i.call(e),r?C(e._inputNodes,r):e._inputNodes=[];for(const i of e._inputNodes)t.call(e,i)}}function Dt(e){const t=It();return new Promise(((i,r)=>{t.decodeAudioData(e,(e=>{i(e)}),(e=>{r(new T(E.DECODE_AUDIO_FILE_FAILED,e.toString()))}))}))}let Ct=null;function Rt(e,t){let i=!1;const r=1/t;if(u("DISABLE_WEBAUDIO")){const t=window.setInterval((()=>{i?window.clearInterval(t):e(performance.now()/1e3)}),1e3*r)}else{const t=It();let s=t.createGain();s.gain.value=0,s.connect(t.destination);const o=()=>{if(i)return void(s=null);const n=t.createOscillator();n.onended=o,n.connect(s),n.start(0),n.stop(t.currentTime+r),e(t.currentTime)};o()}return()=>{i=!0}}let Nt=null;function Ot(){if(Nt)return Nt;const e=It();if(!e.createMediaStreamDestination)throw new T(E.NOT_SUPPORTED,"can not create silence audio track");const t=e.createBufferSource(),i=e.createBuffer(1,44100,44100);t.loop=!0,t.buffer=i;const r=e.createMediaStreamDestination();return t.connect(r),Nt=r.stream.getAudioTracks()[0],Nt}function Mt(e){for(let t=0;t<e.outputBuffer.numberOfChannels;t+=1){const i=e.outputBuffer.getChannelData(t);for(let e=0;e<i.length;e+=1)i[e]=0}return e.inputBuffer}function Lt(e){const t=e.getChannelData(0);let i=0,r=0;for(let e=0;e<t.length;e+=1)0===t[e]?(i+=1,i>r&&(r=i)):i=0;return r/t.length*e.duration}class Pt{constructor(){vt(this,"context",void 0),vt(this,"analyserNode",void 0),vt(this,"sourceNode",void 0),this.context=It(),this.analyserNode=this.context.createAnalyser(),this.analyserNode.fftSize=2048,this.analyserNode.smoothingTimeConstant=.4}updateSource(e){if(e!==this.sourceNode){if(this.sourceNode)try{this.sourceNode.disconnect(this.analyserNode)}catch(e){}this.sourceNode=e,null==e||e.connect(this.analyserNode)}}getVolumeLevel(){if(!this.sourceNode)return 0;if(!this.context||R()||N()||"running"!==this.context.state&&this.context.resume(),!this.analyserNode)return 0;const e=new Float32Array(this.analyserNode.fftSize);if(this.analyserNode.getFloatTimeDomainData)this.analyserNode.getFloatTimeDomainData(e);else{const t=new Uint8Array(this.analyserNode.fftSize);this.analyserNode.getByteTimeDomainData(t);for(let i=0;i<e.length;++i)e[i]=t[i]/128-1}const t=e.reduce(((e,t)=>e+t*t),0)/e.length;return Math.max(10*Math.log10(t)+100,0)/100}getAnalyserNode(){return this.analyserNode}rebuildAnalyser(){try{var e,t;null===(e=this.sourceNode)||void 0===e||e.disconnect(this.analyserNode),this.analyserNode=this.context.createAnalyser(),this.analyserNode.fftSize=2048,this.analyserNode.smoothingTimeConstant=.4,null===(t=this.sourceNode)||void 0===t||t.connect(this.analyserNode)}catch(e){he.warning("rebuild analyser node failed.")}}destroy(){this.updateSource(void 0)}}class Vt extends S{get processSourceNode(){return this.sourceNode}set processedNode(e){var t;if(!this.isDestroyed&&this._processedNode!==e){try{var i;null===(i=this.sourceNode)||void 0===i||i.disconnect(this.outputNode)}catch(e){}null===(t=this._processedNode)||void 0===t||t.disconnect(),this._processedNode=e,this.connect()}}get processedNode(){return this._processedNode}constructor(){super(),vt(this,"outputNode",void 0),vt(this,"outputTrack",void 0),vt(this,"isPlayed",!1),vt(this,"sourceNode",void 0),vt(this,"context",void 0),vt(this,"audioBufferNode",void 0),vt(this,"destNode",void 0),vt(this,"audioOutputLevel",0),vt(this,"volumeLevelAnalyser",void 0),vt(this,"_processedNode",void 0),vt(this,"playNode",void 0),vt(this,"isDestroyed",!1),vt(this,"onNoAudioInput",void 0),vt(this,"isNoAudioInput",!1),vt(this,"_noAudioInputCount",0),this.context=It(),this.playNode=this.context.destination,this.outputNode=this.context.createGain(),wt(this.outputNode),this.volumeLevelAnalyser=new Pt}startGetAudioBuffer(e){this.audioBufferNode||(this.audioBufferNode=this.context.createScriptProcessor(e),this.outputNode.connect(this.audioBufferNode),this.audioBufferNode.connect(this.context.destination),this.audioBufferNode.onaudioprocess=e=>{this.emit($e.ON_AUDIO_BUFFER,Mt(e))})}stopGetAudioBuffer(){this.audioBufferNode&&(this.audioBufferNode.onaudioprocess=null,this.outputNode.disconnect(this.audioBufferNode),this.audioBufferNode=void 0)}createOutputTrack(){if(!Ee().webAudioMediaStreamDest)throw new T(E.NOT_SUPPORTED,"your browser is not support audio processor");return this.destNode&&this.outputTrack||(this.destNode=this.context.createMediaStreamDestination(),this.outputNode.connect(this.destNode),this.outputTrack=this.destNode.stream.getAudioTracks()[0]),this.outputTrack}play(e){"running"!==this.context.state&&r((()=>{kt.emit("autoplay-failed")})),this.isPlayed=!0,this.playNode=e||this.context.destination,this.outputNode.connect(this.playNode)}stop(){if(this.isPlayed)try{this.outputNode.disconnect(this.playNode)}catch(e){}this.isPlayed=!1}getAccurateVolumeLevel(){return this.volumeLevelAnalyser.getVolumeLevel()}async checkHasAudioInput(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if(e>5)return this.isNoAudioInput=!0,this.onNoAudioInput&&this.onNoAudioInput(),!1;R()||N()?"suspended"===this.context.state&&this.context.resume():"running"!==this.context.state&&this.context.resume();const t=this.volumeLevelAnalyser.getAnalyserNode();let i;t.getFloatTimeDomainData?(i=new Float32Array(t.fftSize),t.getFloatTimeDomainData(i)):(i=new Uint8Array(t.fftSize),t.getByteTimeDomainData(i));let r=!1;for(let e=0;e<i.length;e++)0!==i[e]&&(r=!0);return r?(this.isNoAudioInput=!1,!0):(await O(200),await this.checkHasAudioInput(e?e+1:1)&&r)}getAudioVolume(){return this.outputNode.gain.value}setVolume(e){this.outputNode.gain.setValueAtTime(e,this.context.currentTime)}destroy(){this.disconnect(),this.stop(),this.isDestroyed=!0,this.onNoAudioInput=void 0}disconnect(){var e,t;null===(e=this.processedNode)||void 0===e||e.disconnect(),null===(t=this.sourceNode)||void 0===t||t.disconnect(),this.outputNode&&this.outputNode.disconnect()}connect(){var e;this.processedNode?null===(e=this.processedNode)||void 0===e||e.connect(this.outputNode):this.sourceNode&&this.sourceNode.connect(this.outputNode);this.volumeLevelAnalyser.updateSource(this.outputNode)}}class xt extends Vt{get isFreeze(){return!1}constructor(t,i,r){var s;if(super(),vt(this,"sourceNode",void 0),vt(this,"track",void 0),vt(this,"clonedTrack",void 0),vt(this,"audioElement",void 0),vt(this,"isCurrentTrackCloned",!1),vt(this,"isRemoteTrack",!1),vt(this,"originVolumeLevelAnalyser",void 0),vt(this,"rebuildWebAudio",(async()=>{if(he.debug("ready to rebuild web audio, state:",this.context.state),this.isNoAudioInput&&await this.checkHasAudioInput(),!this.isNoAudioInput||this.isDestroyed)return document.body.removeEventListener("click",this.rebuildWebAudio,!0),void he.debug("rebuild web audio success, current volume status",this.getAccurateVolumeLevel());this.context.resume().then((()=>he.info("resume success"))),he.debug("rebuild web audio because of ios 12 bugs"),this.disconnect();const e=this.track;this.track=this.track.clone(),this.isCurrentTrackCloned?e.stop():this.isCurrentTrackCloned=!0;const t=new MediaStream([this.track]);this.sourceNode=this.context.createMediaStreamSource(t),wt(this.sourceNode),this.volumeLevelAnalyser.rebuildAnalyser();const i=this.outputNode.gain.value;this.outputNode=this.context.createGain(),this.outputNode.gain.setValueAtTime(i,this.context.currentTime),wt(this.outputNode),this.emit($e.UPDATE_SOURCE),this.connect(),this.audioElement.srcObject=t,this.isPlayed&&this.play(this.playNode),this.checkHasAudioInput()})),"audio"!==t.kind)throw new T(E.UNEXPECTED_ERROR);this.track=t;const o=new MediaStream([this.track]);if(this.isRemoteTrack=!!i,this.sourceNode=this.context.createMediaStreamSource(o),wt(this.sourceNode),r){const e=r.clone();e.enabled=!0,this.clonedTrack=e,he.debug("create an unmuted track ".concat(e.id," from the original track ").concat(r.id," to get the volume"));const t=this.context.createMediaStreamSource(new MediaStream([e]));wt(t),this.originVolumeLevelAnalyser=new Pt,this.originVolumeLevelAnalyser.updateSource(t)}this.connect(),this.audioElement=document.createElement("audio"),this.audioElement.srcObject=o;const n=e();i&&n.os===a.IOS&&Number(null===(s=n.osVersion)||void 0===s?void 0:s.split(".")[0])<15&&(kt.on(Se.STATE_CHANGE,(()=>{"suspended"===this.context.state?document.body.addEventListener("click",this.rebuildWebAudio,!0):"running"===this.context.state&&this.rebuildWebAudio()})),this.checkHasAudioInput().then((e=>{e||document.body.addEventListener("click",this.rebuildWebAudio,!0)})))}updateTrack(e){this.sourceNode.disconnect(),this.track=e,this.isCurrentTrackCloned=!1;const t=new MediaStream([e]);this.sourceNode=this.context.createMediaStreamSource(t),wt(this.sourceNode),this.processedNode||this.sourceNode.connect(this.outputNode),this.emit($e.UPDATE_SOURCE),this.audioElement.srcObject=t}destroy(){var e;this.audioElement.srcObject=null,this.audioElement.remove(),kt.off("state-change",this.rebuildWebAudio),null===(e=this.originVolumeLevelAnalyser)||void 0===e||e.destroy(),this.clonedTrack=void 0,super.destroy()}createMediaStreamSourceNode(e){return this.context.createMediaStreamSource(new MediaStream([e]))}updateOriginTrack(e){const t=e.clone();t.enabled=!0,this.clonedTrack&&(this.clonedTrack.stop(),this.clonedTrack=t),he.debug("create an unmuted track ".concat(t.id," from the original track ").concat(e.id," to get the volume"));const i=this.context.createMediaStreamSource(new MediaStream([t]));wt(i),this.originVolumeLevelAnalyser&&this.originVolumeLevelAnalyser.updateSource(i)}getOriginVolumeLevel(){return this.originVolumeLevelAnalyser?this.originVolumeLevelAnalyser.getVolumeLevel():this.getAccurateVolumeLevel()}}async function Ut(e,t,i){const r=(e,t)=>e?"number"!=typeof e?e.max||e.exact||e.ideal||e.min||t:e:t,s={audio:!!i&&{mandatory:{chromeMediaSource:"desktop"}},video:{mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:e,maxHeight:r(t.height,1080),maxWidth:r(t.width,1920)}}};return t.frameRate&&"number"!=typeof t.frameRate?(s.video.mandatory.maxFrameRate=t.frameRate.max,s.video.mandatory.minFrameRate=t.frameRate.min):"number"==typeof t.frameRate&&(s.video.mandatory.maxFrameRate=t.frameRate),await navigator.mediaDevices.getUserMedia(s)}async function Bt(e,t){const i=await Ft(e.mediaSource),{sourceId:r,audio:s}=await M(i,t);return await Ut(r,e,s)}async function Ft(e){let t=["window","screen"];"application"!==e&&"window"!==e||(t=["window"]),"screen"===e&&(t=["screen"]);const i=L();if(!i)throw console.error("failed to fetch electron, please mount it to window"),new T(E.ELECTRON_IS_NULL);let r=null;try{var s;r=(null===(s=i.desktopCapturer)||void 0===s?void 0:s.getSources({types:t}))||i.ipcRenderer.invoke("DESKTOP_CAPTURER_GET_SOURCES",{types:t})}catch(e){r=null}r&&r.then||(r=new Promise(((e,r)=>{i.desktopCapturer.getSources({types:t},((t,i)=>{t?r(t):e(i)}))})));try{return await r}catch(e){throw new T(E.ELECTRON_DESKTOP_CAPTURER_GET_SOURCES_ERROR,e.toString())}}const Ht=new w("safari");let Wt=!1,Gt=!1;async function Kt(e,t){let i=0,r=null;for(;i<2;)try{r=await zt(e,t,i>0);break}catch(e){if(e instanceof T)throw he.error("[".concat(t,"] ").concat(e.toString())),e;const r=jt(e.name||e.code||e,e.message);if(r.code===E.MEDIA_OPTION_INVALID){he.debug("[".concat(t,"] detect media option invalid, retry")),i+=1,await O(500);continue}throw he.error("[".concat(t,"] ").concat(r.toString())),r}if(!r)throw new T(E.UNEXPECTED_ERROR,"can not find stream after getUserMedia");return r}async function zt(t,i,r){if(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)throw new T(E.NOT_SUPPORTED,"can not find getUserMedia");r&&(t.video&&(delete t.video.width,delete t.video.height),t.screen&&(delete t.screen.width,delete t.screen.height));const s=Ee(),o=new MediaStream;if(t.audioSource&&o.addTrack(t.audioSource),t.videoSource&&o.addTrack(t.videoSource),!t.audio&&!t.video&&!t.screen)return he.debug("Using Video Source/ Audio Source"),o;if(t.screen)if(P())if(t.screen.sourceId){Zt(o,await Ut(t.screen.sourceId,t.screen,t.screenAudio))}else{Zt(o,await Bt(t.screen,t.screenAudio))}else if(l()&&t.screen.extensionId&&t.screen.mandatory){if(!s.getStreamFromExtension)throw new T(E.NOT_SUPPORTED,"This browser does not support screen sharing");he.debug("[".concat(i,'] Screen access on chrome stable, looking for extension"'));const e=await(a=t.screen.extensionId,p=i,new Promise(((e,t)=>{try{chrome.runtime.sendMessage(a,{getStream:!0},(i=>{if(!i||!i.streamId)return he.error("[".concat(p,"] No response from Chrome Plugin. Plugin not installed properly"),i),void t(new T(E.CHROME_PLUGIN_NO_RESPONSE,"No response from Chrome Plugin. Plugin not installed properly"));e(i.streamId)}))}catch(e){he.error("[".concat(p,"] AgoraRTC screensharing plugin is not accessible(").concat(a,")"),e.toString()),t(new T(E.CHROME_PLUGIN_NOT_INSTALL))}})));t.screen.mandatory.chromeMediaSourceId=e;Zt(o,await navigator.mediaDevices.getUserMedia({video:{mandatory:t.screen.mandatory}}))}else if(s.getDisplayMedia){var n;t.screen.mediaSource&&Ge(t.screen.mediaSource);const e={width:t.screen.width,height:t.screen.height,frameRate:t.screen.frameRate,displaySurface:null!==(n=t.screen.displaySurface)&&void 0!==n?n:"screen"===t.screen.mediaSource?"monitor":t.screen.mediaSource},{selfBrowserSurface:r,surfaceSwitching:s,systemAudio:a}=t.screen,c={selfBrowserSurface:r,surfaceSwitching:s,systemAudio:a};!r&&delete c.selfBrowserSurface,!s&&delete c.surfaceSwitching,!a&&delete c.systemAudio,he.debug("[".concat(i,"] getDisplayMedia:"),JSON.stringify({video:e,audio:!!t.screenAudio,controls:c}));Zt(o,await navigator.mediaDevices.getDisplayMedia(_t({video:e,audio:!!t.screenAudio},c)))}else{if(!h())throw he.error("[".concat(i,"] This browser does not support screenSharing")),new T(E.NOT_SUPPORTED,"This browser does not support screen sharing");{t.screen.mediaSource&&Ge(t.screen.mediaSource);const e={video:{mediaSource:t.screen.mediaSource,width:t.screen.width,height:t.screen.height,frameRate:t.screen.frameRate}};he.debug("[".concat(i,"] getUserMedia: ").concat(JSON.stringify(e)));Zt(o,await navigator.mediaDevices.getUserMedia(e))}}var a,p;if(!t.video&&!t.audio)return o;let m={video:t.video,audio:t.audio},g=u("MEDIA_DEVICE_CONSTRAINTS");if(g)try{"string"==typeof g&&(g=JSON.parse(g)),m=V(m,g)}catch(e){}he.debug("[".concat(i,"] GetUserMedia"),JSON.stringify(m)),e();let _,v=null;(c()||R()||d())&&(v=await Ht.lock());try{_=await navigator.mediaDevices.getUserMedia(m)}catch(e){throw v&&v(),e}return m.audio&&(Wt=!0),m.video&&(Gt=!0),Zt(o,_),v&&v(),o}function jt(e,t){switch(e){case"Starting video failed":case"OverconstrainedError":case"TrackStartError":return new T(E.MEDIA_OPTION_INVALID,"".concat(e,": ").concat(t));case"NotFoundError":case"DevicesNotFoundError":return new T(E.DEVICE_NOT_FOUND,"".concat(e,": ").concat(t));case"NotSupportedError":return new T(E.NOT_SUPPORTED,"".concat(e,": ").concat(t));case"NotReadableError":return new T(E.NOT_READABLE,"".concat(e,": ").concat(t));case"InvalidStateError":case"NotAllowedError":case"PERMISSION_DENIED":case"PermissionDeniedError":return new T(E.PERMISSION_DENIED,"".concat(e,": ").concat(t));case"ConstraintNotSatisfiedError":return new T(E.CONSTRAINT_NOT_SATISFIED,"".concat(e,": ").concat(t));default:return he.error("getUserMedia unexpected error",e),new T(E.UNEXPECTED_ERROR,"".concat(e,": ").concat(t))}}function Zt(e,t){const i=e.getVideoTracks()[0],r=e.getAudioTracks()[0],s=t.getVideoTracks()[0],o=t.getAudioTracks()[0];o&&(r&&e.removeTrack(r),e.addTrack(o)),s&&(i&&e.removeTrack(i),e.addTrack(s))}class Yt extends S{get state(){return this._state}set state(e){e!==this._state&&(this.emit(dt.STATE_CHANGE,e),this._state=e)}constructor(){super(),vt(this,"_state",ct.IDLE),vt(this,"isAccessMicrophonePermission",!1),vt(this,"isAccessCameraPermission",!1),vt(this,"lastAccessMicrophonePermission",!1),vt(this,"lastAccessCameraPermission",!1),vt(this,"checkdeviceMatched",!1),vt(this,"deviceInfoMap",new Map),this.init().then((()=>{navigator.mediaDevices.addEventListener&&navigator.mediaDevices.addEventListener("devicechange",this.updateDevicesInfo.bind(this)),window.setInterval((()=>{(u("ENUMERATE_DEVICES_INTERVAL")||(x()||U())&&i())&&this.updateDevicesInfo()}),u("ENUMERATE_DEVICES_INTERVAL_TIME"))})).catch((e=>he.error(e.toString())))}async enumerateDevices(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices){return new T(E.NOT_SUPPORTED,"enumerateDevices() not supported.").throw()}const r=await navigator.mediaDevices.enumerateDevices(),s=this.checkMediaDeviceInfoIsOk(r);let o=!this.isAccessMicrophonePermission&&e,n=!this.isAccessCameraPermission&&t;s.audio&&(o=!1),s.video&&(n=!1);let a=null,c=null,d=null;if(!i&&(o||n)){if(Ht.isLocked){he.debug("[device manager] wait GUM lock");(await Ht.lock())(),he.debug("[device manager] GUM unlock")}if(Wt&&(o=!1,this.isAccessMicrophonePermission=!0),Gt&&(n=!1,this.isAccessCameraPermission=!0),he.debug("[device manager] check media device permissions",e,t,o,n),o&&n){try{d=await navigator.mediaDevices.getUserMedia({audio:!0,video:!0})}catch(e){const t=jt(e.name||e.code||e,e.message);if(t.code===E.PERMISSION_DENIED)throw t;he.warning("getUserMedia failed in getDevices",t)}this.isAccessCameraPermission=!0,this.isAccessMicrophonePermission=!0}else if(o){try{a=await navigator.mediaDevices.getUserMedia({audio:e})}catch(e){const t=jt(e.name||e.code||e,e.message);if(t.code===E.PERMISSION_DENIED)throw t;he.warning("getUserMedia failed in getDevices",t)}this.isAccessMicrophonePermission=!0}else if(n){try{c=await navigator.mediaDevices.getUserMedia({video:t})}catch(e){const t=jt(e.name||e.code||e,e.message);if(t.code===E.PERMISSION_DENIED)throw t;he.warning("getUserMedia failed in getDevices",t)}this.isAccessCameraPermission=!0}he.debug("[device manager] mic permission",e,"cam permission",t)}try{const e=await navigator.mediaDevices.enumerateDevices();return a&&a.getTracks().forEach((e=>e.stop())),c&&c.getTracks().forEach((e=>e.stop())),d&&d.getTracks().forEach((e=>e.stop())),a=null,c=null,d=null,e}catch(e){a&&a.getTracks().forEach((e=>e.stop())),c&&c.getTracks().forEach((e=>e.stop())),d&&d.getTracks().forEach((e=>e.stop())),a=null,c=null,d=null;return new T(E.ENUMERATE_DEVICES_FAILED,e.toString()).throw()}}async getRecordingDevices(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return(await this.enumerateDevices(!0,!1,e)).filter((e=>"audioinput"===e.kind))}async getCamerasDevices(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return(await this.enumerateDevices(!1,!0,e)).filter((e=>"videoinput"===e.kind))}async getSpeakers(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return(await this.enumerateDevices(!0,!1,e)).filter((e=>"audiooutput"===e.kind))}searchDeviceIdByName(e){let t=null;return this.deviceInfoMap.forEach((i=>{i.device.label===e&&(t=i.device.deviceId)})),t}async getDeviceById(e){const t=(await this.enumerateDevices(!0,!0,!0)).find((t=>t.deviceId===e));if(!t)throw new T(E.DEVICE_NOT_FOUND,"deviceId: ".concat(e));return t}async init(){this.state=ct.INITING;try{await this.updateDevicesInfo(),this.state=ct.INITEND}catch(e){if(he.warning("Device Detection functionality cannot start properly.",e.toString()),this.state=ct.IDLE,!B()){new T(E.WEB_SECURITY_RESTRICT,"Your context is limited by web security, please try using https protocol or localhost.").throw()}throw e}}async updateDevicesInfo(){const e=await this.enumerateDevices(!0,!0,!0),t=Date.now(),i=[];if(e[0]&&e[0].label&&!1===this.checkdeviceMatched){this.checkdeviceMatched=!0;const t=e.find((e=>"audioinput"===e.kind&&"default"===e.deviceId)),i=e.find((e=>"audiooutput"===e.kind&&"default"===e.deviceId));t&&i?i.groupId===t.groupId?he.debug("[device-check] default input ".concat(t.label," and output ").concat(i.label," is the same group")):he.warning("[device-check] default input ".concat(t.label," and output ").concat(i.label," is not the same group")):he.debug("[device-check] default input or output not found")}const r=this.checkMediaDeviceInfoIsOk(e);if(e.forEach((e=>{if(!e.deviceId)return;const r=this.deviceInfoMap.get("".concat(e.kind,"_").concat(e.deviceId));if("ACTIVE"!==(r?r.state:"INACTIVE")){const r={initAt:t,updateAt:t,device:e,state:"ACTIVE"};this.deviceInfoMap.set("".concat(e.kind,"_").concat(e.deviceId),r),i.push(r)}r&&(r.updateAt=t)})),this.deviceInfoMap.forEach(((e,r)=>{"ACTIVE"===e.state&&e.updateAt!==t&&(e.state="INACTIVE",i.push(e))})),this.state!==ct.INITEND)return r.audio&&(this.lastAccessMicrophonePermission=!0,this.isAccessMicrophonePermission=!0),void(r.video&&(this.lastAccessCameraPermission=!0,this.isAccessCameraPermission=!0));i.forEach((e=>{switch(e.device.kind){case"audioinput":this.lastAccessMicrophonePermission&&this.isAccessMicrophonePermission&&this.emit(dt.RECORDING_DEVICE_CHANGED,e);break;case"videoinput":this.lastAccessCameraPermission&&this.isAccessCameraPermission&&this.emit(dt.CAMERA_DEVICE_CHANGED,e);break;case"audiooutput":this.lastAccessMicrophonePermission&&this.isAccessMicrophonePermission&&this.emit(dt.PLAYOUT_DEVICE_CHANGED,e)}})),r.audio&&(this.lastAccessMicrophonePermission=!0,this.isAccessMicrophonePermission=!0),r.video&&(this.lastAccessCameraPermission=!0,this.isAccessCameraPermission=!0)}checkMediaDeviceInfoIsOk(e){const t=e.filter((e=>"audioinput"===e.kind)),i=e.filter((e=>"videoinput"===e.kind)),r={audio:!1,video:!1};for(const e of t)if(e.label&&e.deviceId){r.audio=!0;break}for(const e of i)if(e.label&&e.deviceId){r.video=!0;break}return r}}const Jt=new Yt;let Xt=!1;const qt=new class extends S{constructor(){super(...arguments),vt(this,"onAutoplayFailed",void 0),vt(this,"onAudioAutoplayFailed",void 0)}};function Qt(){if(e(),!Xt){const e=t=>{t.preventDefault(),Xt=!1,F()?document.body.removeEventListener("click",e,!0):(document.body.removeEventListener("touchstart",e,!0),document.body.removeEventListener("mousedown",e,!0))};Xt=!0,F()?document.body.addEventListener("click",e,!0):(document.body.addEventListener("touchstart",e,!0),document.body.addEventListener("mousedown",e,!0)),he.info("detect media autoplay failed, document: https://docs.agora.io/cn/Voice/autoplay_policy_web_ng?platform=Web"),qt.onAutoplayFailed?qt.onAutoplayFailed():qt.onAudioAutoplayFailed?he.warning("AgoraRTC.onAudioAutoplayFailed has been deprecated in favor of AgoraRTC.onAutoplayFailed.\n\n Please refer to the Agora document to migrate the newer API, https://docs.agora.io/en/Voice/autoplay_policy_web_ng?platform=Web ."):he.warning("We have detected a media autoplay failed event, and found out that you haven't implemented AgoraRTC.onAutoplayFailed callback yet.\n\n It will cause audio/video element not playing automatically on some browsers without user interaction, possibly hurting user experiences.\n\n Please refer to the Agora document to properly handle autoplay failed event, https://docs.agora.io/en/Voice/autoplay_policy_web_ng?platform=Web ."),qt.emit("autoplay-failed")}}function $t(e,t,i,r){if(!e)return;const s=le.getBaseInfoBySessionId(e);if(!s)return;const o=s.info,n=Date.now(),a=_t(_t({},o),{},{vid:void 0===o.vid?0:Number(o.vid),lts:n,elapse:n-s.startTime,cbRegistered:qt.onAutoplayFailed||qt.onAudioAutoplayFailed?1:-1,errorMsg:i,mediaType:t,trackId:r,extend:void 0});le.send({type:pe.AUTOPLAY_FAILED,data:a},!0)}const ei=["play","playing","loadeddata","canplay","pause","stalled","suspend","waiting","abort","emptied","ended","error"],ti=new class{constructor(){vt(this,"onAutoplayFailed",void 0),vt(this,"elementMap",new Map),vt(this,"elementStateMap",new Map),vt(this,"elementsNeedToResume",[]),vt(this,"sinkIdMap",new Map),vt(this,"autoResumeAfterInterruption",(e=>{Array.from(this.elementMap.entries()).forEach((t=>{let[i,r]=t;const s=this.elementStateMap.get(i),o=r.srcObject.getAudioTracks()[0],n=o&&o.readyState;if(he.debug("resume after interrupted, ele: ".concat(s," audio: ").concat(n," ").concat(e)),"live"===n){if(e)return r.pause(),void r.play();if("running"===kt.curState)return W()?(r.pause(),void r.play()):void(s&&"paused"===s&&r.play())}}))})),vt(this,"autoResumeAfterInterruptionOnIOS15_16",(()=>{Array.from(this.elementMap.entries()).forEach((e=>{let[t,i]=e;const r=i.srcObject.getAudioTracks()[0];r&&"live"===r.readyState&&(he.debug("auto resume after interruption inside autoResumeAfterInterruptionOnIOS15"),i.pause(),i.play())}))})),this.autoResumeAudioElement(),kt.on(Se.IOS_INTERRUPTION_END,this.autoResumeAfterInterruption),kt.on(Se.IOS_15_16_INTERRUPTION_END,this.autoResumeAfterInterruptionOnIOS15_16),kt.on(Se.STATE_CHANGE,(()=>{R()&&"suspended"===kt.prevState&&"running"===kt.curState&&this.autoResumeAfterInterruption()}))}async setSinkID(e,t){const i=this.elementMap.get(e);if(this.sinkIdMap.set(e,t),i)try{await i.setSinkId(t)}catch(e){throw new T(E.PERMISSION_DENIED,"can not set sink id: "+e.toString())}}play(e,t,i,s){if(this.elementMap.has(t))return;const o=document.createElement("audio");o.autoplay=!0,o.srcObject=new MediaStream([e]),this.bindAudioElementEvents(t,o),this.elementMap.set(t,o),this.elementStateMap.set(t,ht.INIT),this.setVolume(t,i);const n=this.sinkIdMap.get(t);if(n)try{o.setSinkId(n).catch((e=>{he.warning("[".concat(t,"] set sink id failed"),e.toString())}))}catch(e){he.warning("[".concat(t,"] set sink id failed"),e.toString())}const a=o.play();a&&a.then&&a.catch((e=>{s&&$t(s,"audio",e.message,t),he.warning("audio element play warning",e.toString()),this.elementMap.has(t)&&"NotAllowedError"===e.name&&(he.warning("detected audio element autoplay failed"),this.elementsNeedToResume.push(o),r((()=>{this.onAutoplayFailed&&this.onAutoplayFailed(),Qt()})))}))}updateTrack(e,t){const i=this.elementMap.get(e);i&&(i.srcObject=new MediaStream([t]))}isPlaying(e){return this.elementMap.has(e)&&"playing"===this.elementStateMap.get(e)}setVolume(e,t){const i=this.elementMap.get(e);i&&(t=Math.max(0,Math.min(100,t)),i.volume=t/100)}stop(e){const t=this.elementMap.get(e);if(this.sinkIdMap.delete(e),!t)return;const i=this.elementsNeedToResume.indexOf(t);this.elementsNeedToResume.splice(i,1),t.srcObject=null,t.remove(),this.elementMap.delete(e),this.elementStateMap.delete(e)}bindAudioElementEvents(e,t){ei.forEach((i=>{t.addEventListener(i,(i=>{const r=this.elementStateMap.get(e),s="pause"===i.type?"paused":i.type;if(he.debug("[".concat(e,"] audio-element-status change ").concat(r," => ").concat(s)),"error"===i.type){const i=null==t?void 0:t.error;i&&he.error("[".concat(e,"] media error, code: ").concat(i.code,", message: ").concat(i.message))}this.elementStateMap.set(e,s)}))}))}getPlayerState(e){return this.elementStateMap.get(e)||"uninit"}autoResumeAudioElement(){const e=()=>{this.elementsNeedToResume.forEach((e=>{e.play().then((e=>{he.debug("Auto resume audio element success")})).catch((e=>{he.warning("Auto resume audio element failed!",e)}))})),this.elementsNeedToResume=[]};H().then((()=>{F()?document.body.addEventListener("click",e,!0):(document.body.addEventListener("touchstart",e,!0),document.body.addEventListener("mousedown",e,!0))}))}};function ii(){return function(e,t,i){const r=i.value;return"function"==typeof r&&(i.value=function(){this._isClosed&&new T(E.INVALID_OPERATION,"[".concat(this.getTrackId(),"] cannot operate a closed track")).print("warning",he);for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const s=r.apply(this,t);return s instanceof Promise?new Promise(((e,t)=>{s.then(e).catch(t)})):s}),i}}class ri extends S{constructor(e){super(),vt(this,"name","VideoProcessorDestination"),vt(this,"ID","0"),vt(this,"_source",void 0),vt(this,"videoContext",void 0),vt(this,"inputTrack",void 0),this.videoContext=e}get kind(){return"video"}get enabled(){return!0}pipe(){throw new T(E.NOT_SUPPORTED,"VideoProcessor cannot pipe to any other Processor")}unpipe(){throw new T(E.NOT_SUPPORTED,"VideoProcessor cannot unpipe to any other Processor")}enable(){}disable(){}updateInput(e){if(e.context!==this.videoContext)throw new Error("ProcessorContext passed to VideoTrack.processorDestination doesn't match it's belonging VideoTrack's context.\nProbably you are making pipeline like this:\nvideoTrack1.pipe(processor).pipe(videoTrack2.processorDestination).");e.track&&e.track!==this.inputTrack&&(this.videoContext.chained=!0,this.inputTrack=e.track,this.emit(nt.ON_TRACK,e.track))}reset(){this.inputTrack=void 0,this.videoContext.chained=!1,this.emit(nt.ON_TRACK,void 0)}}class si extends S{set chained(e){this._chained=e}get chained(){return this._chained}constructor(e,t){super(),vt(this,"constraintsMap",new Map),vt(this,"statsRegistry",[]),vt(this,"usageRegistry",[]),vt(this,"trackId",void 0),vt(this,"direction",void 0),vt(this,"_chained",!1),this.trackId=e,this.direction=t}async getConstraints(){return await G(this,at.REQUEST_CONSTRAINTS)}async requestApplyConstraints(e,t){return he.info("processor ".concat(t.name," requestApplyConstraints for ").concat(this.trackId)),e&&this.constraintsMap.set(t,e),D(this,at.REQUEST_UPDATE_CONSTRAINTS,Array.from(this.constraintsMap.values()))}async requestRevertConstraints(e){if(this.constraintsMap.has(e))return he.info("processor ".concat(e.name," requestRevertConstraints for ").concat(this.trackId)),this.constraintsMap.delete(e),D(this,at.REQUEST_UPDATE_CONSTRAINTS,Array.from(this.constraintsMap.values()))}registerStats(e,t,i){this.statsRegistry.find((i=>i.processorID===e.ID&&i.processorName===e.name&&i.type===t))||this.statsRegistry.push({processorName:e.name,processorID:e.ID,type:t,cb:i})}unregisterStats(e,t){const i=this.statsRegistry.findIndex((i=>i.processorID===e.ID&&i.processorName===e.name&&i.type===t));-1!==i&&this.statsRegistry.splice(i,1)}gatherStats(){const e=[];for(const{processorID:t,processorName:i,type:r,cb:s}of this.statsRegistry)try{const o=s();e.push({processorID:t,processorName:i,type:r,stats:o})}catch(e){he.error(new T(E.UNEXPECTED_ERROR,e.message))}return e}registerUsage(e,t){this.usageRegistry.find((t=>t.processorID===e.ID&&t.processorName===e.name))||this.usageRegistry.push({processorID:e.ID,processorName:e.name,cb:t})}unregisterUsage(e){const t=this.usageRegistry.findIndex((t=>t.processorID===e.ID&&t.processorName===e.name));-1!==t&&this.usageRegistry.splice(t,1)}async gatherUsage(){const e=[];if(!this.chained)return[];for(const{cb:t}of this.usageRegistry)try{let i=t();i instanceof Promise&&(i=await i),e.push(_t(_t({},i),{},{direction:this.direction}))}catch(e){he.error("gather extension usage error",e)}return e}getDirection(){return this.direction}}class oi extends S{constructor(e){super(),vt(this,"name","AudioProcessorDestination"),vt(this,"ID","0"),vt(this,"inputTrack",void 0),vt(this,"inputNode",void 0),vt(this,"audioProcessorContext",void 0),vt(this,"_source",void 0),this.audioProcessorContext=e}get kind(){return"audio"}get enabled(){return!0}pipe(){throw new T(E.NOT_SUPPORTED,"AudioProcessorDestination cannot pipe to any other Processor")}unpipe(){throw new T(E.NOT_SUPPORTED,"AudioProcessor cannot unpipe to any other Processor")}enable(){}disable(){}reset(){this.inputTrack=void 0,this.inputNode=void 0,this.audioProcessorContext.chained=!1,this.emit(nt.ON_TRACK,void 0),this.emit(nt.ON_NODE,void 0)}updateInput(e){if(e.context!==this.audioProcessorContext)throw new Error("ProcessorContext passed to AudioTrack.processorDestination doesn't match it's belonging AudioTrack's context.\n Probably you are making pipeline like this: audioTrack1.pipe(processor).pipe(audioTrack2.processorDestination).");e.track&&this.inputTrack!==e.track&&(this.audioProcessorContext.chained=!0,this.inputTrack=e.track,this.emit(nt.ON_TRACK,this.inputTrack)),e.node&&this.inputNode!==e.node&&(this.audioProcessorContext.chained=!0,this.inputNode=e.node,this.emit(nt.ON_NODE,this.inputNode))}}class ni extends S{set chained(e){this._chained=e}get chained(){return this._chained}constructor(e,t,i){super(),vt(this,"constraintsMap",new Map),vt(this,"statsRegistry",[]),vt(this,"audioContext",void 0),vt(this,"trackId",void 0),vt(this,"direction",void 0),vt(this,"usageRegistry",[]),vt(this,"_chained",!1),this.audioContext=e,this.trackId=t,this.direction=i}async getConstraints(){return G(this,at.REQUEST_CONSTRAINTS)}getAudioContext(){return this.audioContext}async requestApplyConstraints(e,t){return he.info("processor ".concat(t.name," requestApplyConstraints for ").concat(this.trackId)),e&&this.constraintsMap.set(t,e),D(this,at.REQUEST_UPDATE_CONSTRAINTS,Array.from(this.constraintsMap.values()))}async requestRevertConstraints(e){if(this.constraintsMap.has(e))return this.constraintsMap.delete(e),D(this,at.REQUEST_UPDATE_CONSTRAINTS,Array.from(this.constraintsMap.values()))}registerStats(e,t,i){this.statsRegistry.find((i=>i.processorID===e.ID&&i.processorName===e.name&&i.type===t))||this.statsRegistry.push({processorName:e.name,processorID:e.ID,type:t,cb:i})}unregisterStats(e,t){const i=this.statsRegistry.findIndex((i=>i.processorID===e.ID&&i.processorName===e.name&&i.type===t));-1!==i&&this.statsRegistry.splice(i,1)}gatherStats(){const e=[];for(const{processorID:t,processorName:i,type:r,cb:s}of this.statsRegistry)try{const o=s();e.push({processorID:t,processorName:i,type:r,stats:o})}catch(e){he.error(new T(E.UNEXPECTED_ERROR,e.message))}return e}registerUsage(e,t){this.usageRegistry.find((t=>t.processorID===e.ID&&t.processorName===e.name))||this.usageRegistry.push({processorID:e.ID,processorName:e.name,cb:t})}unregisterUsage(e){const t=this.usageRegistry.findIndex((t=>t.processorID===e.ID&&t.processorName===e.name));-1!==t&&this.usageRegistry.splice(t,1)}async gatherUsage(){const e=[];if(!this.chained)return[];for(const{cb:t}of this.usageRegistry)try{let i=t();i instanceof Promise&&(i=await i),e.push(_t(_t({},i),{},{direction:this.direction}))}catch(e){he.error("gather extension usage error",e)}return e}getDirection(){return this.direction}}class ai extends S{get isPlayed(){return!0}get isFreeze(){return!1}constructor(){super(),vt(this,"context",void 0),vt(this,"processSourceNode",void 0),vt(this,"outputTrack",void 0),vt(this,"processedNode",void 0),vt(this,"clonedTrack",void 0),vt(this,"outputNode",void 0),this.outputNode=new ci}setVolume(){}createOutputTrack(){throw new T(E.NOT_SUPPORTED,"can not create output MediaStreamTrack when WebAudio disabled")}getOriginVolumeLevel(){return 0}getAccurateVolumeLevel(){return 0}stopGetAudioBuffer(){}startGetAudioBuffer(){}play(){}stop(){}destroy(){}updateTrack(){}updateOriginTrack(){}createMediaStreamSourceNode(){}}class ci{disconnect(){}connect(){}}function di(e){return new Promise(((t,i)=>{let r=!1;const s=document.createElement("video");s.setAttribute("autoplay",""),s.setAttribute("muted",""),s.muted=!0,s.autoplay=!0,s.setAttribute("playsinline",""),s.setAttribute("style","position: fixed; top: 0; left: 0; width: 1px; height: 1px"),document.body.appendChild(s);const o=R()?"canplay":"playing";s.addEventListener(o,(()=>{const e=s.videoWidth,i=s.videoHeight;!e&&h()||(r=!0,s.srcObject=null,s.remove(),t([e,i]))})),s.srcObject=new MediaStream([e]),s.play().catch(K),setTimeout((()=>{r||(s.srcObject=null,s.remove(),t([s.videoWidth,s.videoHeight]))}),4e3)}))}function ui(e){const t={};e.facingMode&&(t.facingMode=e.facingMode),e.cameraId&&(t.deviceId={exact:e.cameraId});const i=Ne(e.encoderConfig);return null!=i.width&&(t.width=i.width),null!=i.height&&(t.height=i.height),!z()&&i.frameRate&&(t.frameRate=i.frameRate),p()&&"object"==typeof t.frameRate&&(t.frameRate.max=60),h()&&(t.frameRate={ideal:30,max:30}),t}function hi(e){const t={};e.screenSourceType&&(t.mediaSource=e.screenSourceType),e.extensionId&&l()&&(t.extensionId=e.extensionId);const{displaySurface:i,selfBrowserSurface:r,surfaceSwitching:o,systemAudio:n}=e;(s(107)||j(107)||Z(93))&&(i&&(f(i,"displaySurface",["browser","window","monitor"]),t.displaySurface=i),r?(f(r,"selfBrowserSurface",["exclude","include"]),t.selfBrowserSurface=r):t.selfBrowserSurface="include",o&&(f(o,"surfaceSwitching",["exclude","include"]),t.surfaceSwitching=o)),(s(105)||j(105)||Z(91))&&n&&(f(n,"systemAudio",["exclude","include"]),t.systemAudio=n),e.electronScreenSourceId&&(t.sourceId=e.electronScreenSourceId);const a=e.encoderConfig?Oe(e.encoderConfig):null;return t.mandatory={chromeMediaSource:"desktop",maxWidth:a?a.width:void 0,maxHeight:a?a.height:void 0},a&&(a.frameRate&&("number"==typeof a.frameRate?(t.mandatory.maxFrameRate=a.frameRate,t.mandatory.minFrameRate=a.frameRate):(t.mandatory.maxFrameRate=a.frameRate.max||a.frameRate.ideal||a.frameRate.exact||void 0,t.mandatory.minFrameRate=a.frameRate.min||a.frameRate.ideal||a.frameRate.exact||void 0),t.frameRate=a.frameRate),a.width&&(t.width=a.width),a.height&&(t.height=a.height)),t}function li(e){const t={};if(z()||(void 0!==e.AGC&&(t.autoGainControl=e.AGC),void 0!==e.AEC&&(t.echoCancellation=e.AEC),void 0!==e.ANS&&(t.noiseSuppression=e.ANS,l()&&e.ANS&&(t.googHighpassFilter=e.ANS))),e.encoderConfig){const i=Pe(e.encoderConfig);t.channelCount=i.stereo?2:1,t.sampleRate=i.sampleRate,t.sampleSize=i.sampleSize}return e.microphoneId&&(t.deviceId={exact:e.microphoneId}),x()&&(t.sampleRate=void 0),t}function pi(e,t,i,r,s){const o=u("BITRATE_ADAPTER_TYPE");if("DEFAULT_BITRATE"===o)return{min:r,max:s};if(void 0===s){var n;const a=Math.floor(200*Math.pow(i/15,.6)*Math.pow(e*t/640/360,.75));s="STANDARD_BITRATE"===o?4*a:2*a,r=null!==(n=r)&&void 0!==n?n:a}else{var a;r=null!==(a=r)&&void 0!==a?a:Math.floor(s/10)}return{min:r,max:s}}function mi(e,t,i){const r=200*Math.pow(i/15,.6)*Math.pow(e*t/640/360,.75);return{min:Math.floor(r),max:Math.floor(4*r)}}const gi=e=>{const t=e._encoderConfig;if(!t)return;const{frameRate:i,width:r,height:s}=e.getMediaStreamTrackSettings();let{frameRate:o=i,width:n=r,height:a=s}=t;if(!o||!n||!a)return;n=Y(n),a=Y(a),o=Y(o);const{max:c,min:d}=mi(n,a,o),{bitrateMax:h,bitrateMin:l}=t||{};h||he.debug("calculate bitrate: [w: ".concat(n,", h: ").concat(a,", fps: ").concat(o,"] => [brMax: ").concat(h,", brMin: ").concat(l,"]"));const{maxFramerate:p}=u("ENCODER_CONFIG_LIMIT");return p&&"number"==typeof p&&(o=Math.min(o,p)),{frameRate:o,bitrateMax:h||c,bitrateMin:l||d,scaleResolutionDownBy:1,scale:0}},_i=async(e,t,i)=>await(async(e,t,i)=>{const r=J(X(""+t+i)).slice(0,16),s=r.slice(0,12),o=await window.crypto.subtle.importKey("raw",r,"AES-GCM",!0,["encrypt"]);return new Uint8Array(await window.crypto.subtle.encrypt({name:"AES-GCM",iv:s},o,e))})(e.buffer,t,i),vi=e=>{const t=document.createElement("canvas");return t.width=2,t.height=2,new Promise(((i,r)=>{t.toBlob((async e=>{if(t.remove(),e){const r=await fi(e);i({buffer:r,width:t.width,height:t.height})}else r(new T(E.CONVERTING_VIDEO_FRAME_TO_BLOB_FAILED))}),e,1)}))},fi=async e=>{const t=await e.arrayBuffer();return new Uint8Array(t)};function Ti(e,t){if("VideoFrame"in window&&"TransformStream"in window&&Ee().supportWebRTCInsertableStream){const i=new MediaStreamTrackProcessor(e),r=new MediaStreamTrackGenerator({kind:"video"});let s,o,n=Date.now();const a=()=>{c&&(clearInterval(c),c=void 0),s&&(s.close(),s=void 0),e.stop(),o=void 0,r.removeEventListener("ended",a)};let c=window.setInterval((()=>{if(o&&s&&Date.now()-n>(null!=t?t:1e3))try{"live"===r.readyState?o.enqueue(s.clone()):a()}catch(e){a()}}),null!=t?t:1e3);const d=new TransformStream({transform:(e,t)=>{"live"===r.readyState?(o=t,n=Date.now(),void 0===s?(s=e,t.enqueue(e.clone())):(t.enqueue(s),s=e)):e.close()}});return r.addEventListener("ended",a),i.readable.pipeThrough(d).pipeTo(r.writable),r}}var Ei,yi,Si,ki,bi,Ii,Ai,wi,Di,Ci,Ri,Ni,Oi,Mi,Li,Pi,Vi,xi,Ui,Bi,Fi,Hi,Wi,Gi,Ki,zi,ji,Zi,Yi,Ji,Xi,qi,Qi,$i,er,tr,ir,rr,sr,or;let nr=(Ei=me({argsMap:(e,t)=>[e.getTrackId(),t],throttleTime:300}),yi=me({argsMap:(e,t)=>[e.getTrackId(),t]}),Si=ii(),ki=q("LocalAudioTrack","_enabledMutex"),bi=me({argsMap:(e,t)=>[e.getTrackId(),t]}),Ii=ii(),Ai=q("LocalAudioTrack","_enabledMutex"),wi=me({argsMap:(e,t)=>[e.getTrackId(),t]}),Di=ii(),Ci=ii(),Ri=ii(),Ni=me({argsMap:e=>[e.getTrackId()]}),Oi=ii(),Mi=me({argsMap:e=>[e.getTrackId()]}),Li=ii(),Pi=me({argsMap:e=>[e.getTrackId()]}),Vi=me({argsMap:(e,t)=>[e.getTrackId(),t.name]}),xi=me({argsMap:e=>[e.getTrackId()]}),ft((Ui=class extends Et{get _source(){return this.initWebAudio()}set _source(e){this._trackSource=e}get processorContext(){return this._processorContext||(this._processorContext=this.initProcessor().processorContext),this._processorContext}get processorDestination(){return this._processorDestination||(this._processorDestination=this.initProcessor().processorDestination),this._processorDestination}get isPlaying(){return this._useAudioElement?ti.isPlaying(this.getTrackId()):this._source.isPlayed}get __className__(){return"LocalAudioTrack"}constructor(e,t,i,r){super(e,i),vt(this,"trackMediaType","audio"),vt(this,"_encoderConfig",void 0),vt(this,"_trackSource",void 0),vt(this,"metadata",[]),vt(this,"_enabled",!0),vt(this,"_volume",100),vt(this,"_useAudioElement",!0),vt(this,"_bypassWebAudio",!1),vt(this,"processor",void 0),vt(this,"_processorContext",void 0),vt(this,"_processorDestination",void 0),vt(this,"_getOriginVolumeLevel",void 0),this._encoderConfig=t,this._getOriginVolumeLevel=!!r,this._trackSource=new ai,u("DISABLE_WEBAUDIO")&&(this._bypassWebAudio=!0),u("LOCAL_AUDIO_TRACK_USES_WEB_AUDIO")&&(this._useAudioElement=!1);c()&&!At()?setTimeout((()=>this.initWebAudio())):this.initWebAudio()}setVolume(e){_(e,"volume",0,1e3),this._volume=e,this._source.setVolume(e/100),this._useAudioElement&&ti.setVolume(this.getTrackId(),e);try{if(this._bypassWebAudio)return void he.debug("[".concat(this.getTrackId(),"] setVolume returned because no pass through WebAudio."));const e=this._source.createOutputTrack();this._mediaStreamTrack!==e&&(this._mediaStreamTrack=e,D(this,Ke.NEED_REPLACE_TRACK,this).then((()=>{he.debug("[".concat(this.getTrackId(),"] replace web audio track success"))})).catch((e=>{he.warning("[".concat(this.getTrackId(),"] replace web audio track failed"),e)})))}catch(e){}}getVolumeLevel(){return this._muted&&this.enabled&&this._getOriginVolumeLevel?this._source.getOriginVolumeLevel():this._source.getAccurateVolumeLevel()}async setPlaybackDevice(e){if(!this._useAudioElement||!ye())throw new T(E.NOT_SUPPORTED,"your browser does not support setting the audio output device");await ti.setSinkID(this.getTrackId(),e)}async setEnabled(e,t,i){return this._setEnabled(e,t,i)}async _setEnabled(e,t,i){if(!i){if(e===this._enabled)return;this.stateCheck("enabled",e)}if(he.info("[".concat(this.getTrackId(),"] start setEnabled"),e),e){this._originMediaStreamTrack.enabled=!0;try{i||(this._enabled=!0),await D(this,Ke.NEED_ENABLE_TRACK,this),he.info("[".concat(this.getTrackId(),"] setEnabled to ").concat(e," success"))}catch(e){throw i||(this._enabled=!1),he.error("[".concat(this.getTrackId(),"] setEnabled to true error"),e.toString()),e}}else{this._originMediaStreamTrack.enabled=!1,i||(this._enabled=!1);try{await D(this,Ke.NEED_DISABLE_TRACK,this)}catch(e){throw i||(this._enabled=!0),he.error("[".concat(this.getTrackId(),"] setEnabled to false error"),e.toString()),e}}}async setMuted(e){e!==this._muted&&(this.stateCheck("muted",e),this._muted=e,this._originMediaStreamTrack.enabled=!e,he.debug("[".concat(this.getTrackId(),"] start set muted: ").concat(e)),e?await D(this,Ke.NEED_MUTE_TRACK,this):await D(this,Ke.NEED_UNMUTE_TRACK,this))}getStats(){b((()=>{he.warning("[deprecated] LocalAudioTrack.getStats will be removed in the future, use AgoraRTCClient.getLocalAudioStats instead")}),"localAudioTrackGetStatsWarning");const e=Q(this,Ke.GET_STATS);return e||_t({},tt)}setAudioFrameCallback(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4096;if(!e)return this._source.removeAllListeners($e.ON_AUDIO_BUFFER),void this._source.stopGetAudioBuffer();this._source.startGetAudioBuffer(t),this._source.removeAllListeners($e.ON_AUDIO_BUFFER),this._source.on($e.ON_AUDIO_BUFFER,(t=>e(t)))}play(){he.debug("[".concat(this.getTrackId(),"] start audio playback")),this._useAudioElement?(he.debug("[".concat(this.getTrackId(),"] start audio playback in element")),ti.play(this._mediaStreamTrack,this.getTrackId(),this._volume)):this._source.play()}stop(){he.debug("[".concat(this.getTrackId(),"] stop audio playback")),this._useAudioElement?ti.stop(this.getTrackId()):this._source.stop()}close(){super.close(),this._processorDestination&&this.unbindProcessorDestinationEvents(this._processorDestination),this._processorContext&&this.unbindProcessorContextEvents(this._processorContext),this.unpipe(),this._processorDestination&&this._processorDestination._source&&this._processorDestination._source.unpipe(),this._source.destroy()}_updatePlayerSource(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];he.debug("[".concat(this.getTrackId(),"] update player source track")),e&&this._source.updateTrack(this._mediaStreamTrack),this._useAudioElement&&ti.updateTrack(this.getTrackId(),this._mediaStreamTrack)}async _updateOriginMediaStreamTrack(e,t){this._originMediaStreamTrack!==e&&(this._originMediaStreamTrack&&(this._originMediaStreamTrack.removeEventListener("ended",this._handleTrackEnded),t&&this._originMediaStreamTrack.stop()),e.addEventListener("ended",this._handleTrackEnded),this._originMediaStreamTrack=e,this._muted&&(this._originMediaStreamTrack.enabled=!1),this.processor&&this._processorContext&&this.processor.updateInput({track:e,context:this._processorContext}),this._mediaStreamTrack!==this._source.outputTrack?(this._mediaStreamTrack=this._originMediaStreamTrack,this._updatePlayerSource(),await D(this,Ke.NEED_REPLACE_TRACK,this)):this._source.updateTrack(this._originMediaStreamTrack),this._getOriginVolumeLevel&&this._source.updateOriginTrack(e))}renewMediaStreamTrack(e){return Promise.resolve(void 0)}pipe(e){if(this._bypassWebAudio)throw new T(E.INVALID_OPERATION,"Can not process AudioTrack when bypassWebAudio set to true.");if(this.processor===e)return e;if(e._source)throw new T(E.INVALID_OPERATION,"Processor ".concat(e.name," already piped, please call unpipe beforehand."));return this.unpipe(),this.processor=e,this.processor._source=this,e.updateInput({track:this._originMediaStreamTrack,node:this._source.processSourceNode,context:this.processorContext}),e}unpipe(){var e;if(!this.processor)return;const t=this.processor;null===(e=this._source.processSourceNode)||void 0===e||e.disconnect(),this.processor._source=!1,this.processor=void 0,t.reset()}bindProcessorDestinationEvents(e){e.on(nt.ON_TRACK,(async e=>{e?e!==this._mediaStreamTrack&&(this._mediaStreamTrack=e,this._updatePlayerSource(!1),this._source.processedNode=this._source.createMediaStreamSourceNode(e),await D(this,Ke.NEED_REPLACE_TRACK,this)):this._mediaStreamTrack!==this._originMediaStreamTrack&&(this._mediaStreamTrack=this._originMediaStreamTrack,this._updatePlayerSource(),await D(this,Ke.NEED_REPLACE_TRACK,this))})),e.on(nt.ON_NODE,(e=>{this._source.processedNode=e}))}unbindProcessorDestinationEvents(e){e.removeAllListeners(nt.ON_TRACK),e.removeAllListeners(nt.ON_NODE)}bindProcessorContextEvents(e){e.on(at.REQUEST_CONSTRAINTS,(async e=>{e(this._originMediaStreamTrack.getSettings())}))}unbindProcessorContextEvents(e){e.removeAllListeners(at.REQUEST_CONSTRAINTS)}initWebAudio(){return this._trackSource instanceof ai&&(this._trackSource=new xt(this._mediaStreamTrack,!1,this._getOriginVolumeLevel?this._mediaStreamTrack:void 0)),this._trackSource}initProcessor(){const e=new ni(this._source.context,this.getTrackId(),"local"),t=new oi(e);return this._processorContext=e,this._processorDestination=t,this.bindProcessorContextEvents(e),this.bindProcessorDestinationEvents(t),this._source.on($e.UPDATE_SOURCE,(()=>{this.processor&&this.processor.updateInput({node:this._source.processSourceNode,context:e})})),this._useAudioElement&&(this._useAudioElement=!1,this.isPlaying&&(ti.stop(this.getTrackId()),this._source.play()),D(this,Ke.NEED_REPLACE_MIXING_TRACK,this).then((()=>{he.debug("[".concat(this.getTrackId(),"] replace from origin track to web audio track success"))})).catch((e=>{he.warning("[".concat(this.getTrackId(),"] replace from origin track to web audio track failed"),e)}))),{processorContext:e,processorDestination:t}}}).prototype,"setVolume",[Ei],Object.getOwnPropertyDescriptor(Ui.prototype,"setVolume"),Ui.prototype),ft(Ui.prototype,"setPlaybackDevice",[yi,Si],Object.getOwnPropertyDescriptor(Ui.prototype,"setPlaybackDevice"),Ui.prototype),ft(Ui.prototype,"setEnabled",[ki,bi,Ii],Object.getOwnPropertyDescriptor(Ui.prototype,"setEnabled"),Ui.prototype),ft(Ui.prototype,"setMuted",[Ai,wi,Di],Object.getOwnPropertyDescriptor(Ui.prototype,"setMuted"),Ui.prototype),ft(Ui.prototype,"getStats",[Ci],Object.getOwnPropertyDescriptor(Ui.prototype,"getStats"),Ui.prototype),ft(Ui.prototype,"setAudioFrameCallback",[Ri],Object.getOwnPropertyDescriptor(Ui.prototype,"setAudioFrameCallback"),Ui.prototype),ft(Ui.prototype,"play",[Ni,Oi],Object.getOwnPropertyDescriptor(Ui.prototype,"play"),Ui.prototype),ft(Ui.prototype,"stop",[Mi,Li],Object.getOwnPropertyDescriptor(Ui.prototype,"stop"),Ui.prototype),ft(Ui.prototype,"close",[Pi],Object.getOwnPropertyDescriptor(Ui.prototype,"close"),Ui.prototype),ft(Ui.prototype,"pipe",[Vi],Object.getOwnPropertyDescriptor(Ui.prototype,"pipe"),Ui.prototype),ft(Ui.prototype,"unpipe",[xi],Object.getOwnPropertyDescriptor(Ui.prototype,"unpipe"),Ui.prototype),Ui),ar=(Bi=me({argsMap:(e,t)=>[e.getTrackId(),t]}),Fi=ii(),Hi=q("MicrophoneAudioTrack","_enabledMutex"),Wi=me({argsMap:(e,t,i)=>[e.getTrackId(),t,i]}),Gi=ii(),Ki=me({argsMap:e=>[e.getTrackId()]}),ft((zi=class extends nr{get __className__(){return"MicrophoneAudioTrack"}constructor(e,t,i,r){super(e,t.encoderConfig?Pe(t.encoderConfig):{},r,u("GET_VOLUME_OF_MUTED_AUDIO_TRACK")),vt(this,"_config",void 0),vt(this,"_deviceName","default"),vt(this,"_constraints",void 0),vt(this,"_originalConstraints",void 0),vt(this,"_enabled",!0),this._config=t,this._constraints=i,this._originalConstraints=i,this._deviceName=e.label,"boolean"==typeof t.bypassWebAudio&&(this._bypassWebAudio=t.bypassWebAudio),(W()||$())&&kt.bindInterruptDetectorTrack(this)}async setDevice(e){if(he.info("[".concat(this.getTrackId(),"] start set device to ").concat(e)),this._enabled)try{const t=await Jt.getDeviceById(e),i={};i.audio=_t({},this._constraints),i.audio.deviceId={exact:e},this._originMediaStreamTrack.stop();let r=null;try{r=await Kt(i,this.getTrackId())}catch(e){throw he.error("[".concat(this.getTrackId(),"] setDevice failed"),e.toString()),r=await Kt({audio:this._constraints},this.getTrackId()),await this._updateOriginMediaStreamTrack(r.getAudioTracks()[0],!1),e}await this._updateOriginMediaStreamTrack(r.getAudioTracks()[0],!1),this._deviceName=t.label,this._config.microphoneId=e,this._constraints.deviceId={exact:e}}catch(e){throw he.error("[".concat(this.getTrackId(),"] setDevice error"),e.toString()),e}else try{const t=await Jt.getDeviceById(e);this._deviceName=t.label,this._config.microphoneId=e,this._constraints.deviceId={exact:e}}catch(e){throw he.error("[".concat(this.getTrackId(),"] setDevice error"),e.toString()),e}he.info("[".concat(this.getTrackId(),"] set device to ").concat(e," success"))}async setEnabled(e,t,i){if(t)return he.debug("[".concat(this.getTrackId(),"] setEnabled false (do not close microphone)")),await super._setEnabled(e);if(!i){if(e===this._enabled)return;this.stateCheck("enabled",e)}if(he.info("[".concat(this.getTrackId(),"] start setEnabled"),e),u("AUTO_RESET_AUDIO_ROUTE")&&(R()||N())){const t=navigator.audioSession;t&&(e||(t.type="playback"),t.type="auto")}if(!e){var r;this._originMediaStreamTrack.onended=null,this._originMediaStreamTrack.stop(),null===(r=this._source.clonedTrack)||void 0===r||r.stop(),i||(this._enabled=!1);try{await D(this,Ke.NEED_DISABLE_TRACK,this)}catch(e){throw he.error("[".concat(this.getTrackId(),"] setEnabled false failed"),e.toString()),e}return}const s=_t({},this._constraints),o=Jt.searchDeviceIdByName(this._deviceName);o&&!s.deviceId&&(s.deviceId=o);try{i||(this._enabled=!0);const e=await Kt({audio:this._constraints},this.getTrackId());await this._updateOriginMediaStreamTrack(e.getAudioTracks()[0],!1),await D(this,Ke.NEED_ENABLE_TRACK,this)}catch(e){throw i||(this._enabled=!1),he.error("[".concat(this.getTrackId(),"] setEnabled true failed"),e.toString()),e}he.info("[".concat(this.getTrackId(),"] setEnabled success"))}close(){super.close(),(W()||$())&&kt.unbindInterruptDetectorTrack(this)}onTrackEnded(){if((R()||N())&&this._enabled&&!this._isClosed&&kt.duringInterruption){const e=async()=>{kt.off(Se.IOS_INTERRUPTION_END,e),this._enabled&&!this._isClosed&&(he.debug("[".concat(this.getTrackId(),"] try capture microphone media device for interrupted iOS device.")),await this.setEnabled(!1),await this.setEnabled(!0))};kt.on(Se.IOS_INTERRUPTION_END,e)}else he.debug("[".concat(this.getTrackId(),"] track ended")),this.safeEmit(qe.TRACK_ENDED)}async renewMediaStreamTrack(e){const t=e||this._constraints,i=Jt.searchDeviceIdByName(this._deviceName);if(i&&!t.deviceId&&(t.deviceId=i),this._constraints=t,this._enabled){this._originMediaStreamTrack.stop();const e=await Kt({audio:this._constraints},this.getTrackId());await this._updateOriginMediaStreamTrack(e.getAudioTracks()[0],!0)}}bindProcessorContextEvents(e){super.bindProcessorContextEvents(e),e.on(at.REQUEST_UPDATE_CONSTRAINTS,(async(e,t,i)=>{try{const i=Object.assign({},this._originalConstraints,...e);await this.renewMediaStreamTrack(i),t()}catch(e){i(e)}}))}unbindProcessorContextEvents(e){super.unbindProcessorContextEvents(e),e.removeAllListeners(at.REQUEST_UPDATE_CONSTRAINTS)}}).prototype,"setDevice",[Bi,Fi],Object.getOwnPropertyDescriptor(zi.prototype,"setDevice"),zi.prototype),ft(zi.prototype,"setEnabled",[Hi,Wi,Gi],Object.getOwnPropertyDescriptor(zi.prototype,"setEnabled"),zi.prototype),ft(zi.prototype,"close",[Ki],Object.getOwnPropertyDescriptor(zi.prototype,"close"),zi.prototype),zi),cr=(ji=me({argsMap:(e,t)=>[e.getTrackId(),t,e.duration]}),Zi=ii(),Yi=me({argsMap:e=>[e.getTrackId()]}),Ji=ii(),Xi=me({argsMap:e=>[e.getTrackId()]}),qi=ii(),Qi=me({argsMap:e=>[e.getTrackId()]}),$i=ii(),er=me({argsMap:e=>[e.getTrackId()]}),tr=ii(),ir=me({argsMap:e=>[e.getTrackId()]}),rr=me({argsMap:e=>[e.getTrackId()]}),sr=ii(),ft((or=class extends nr{get __className__(){return"BufferSourceAudioTrack"}constructor(e,t,i,r){super(t.createOutputTrack(),i,r),vt(this,"source",void 0),vt(this,"_bufferSource",void 0),this._useAudioElement=!1,this.source=e,this._bufferSource=t,this._bufferSource.on($e.AUDIO_SOURCE_STATE_CHANGE,(e=>{this.safeEmit(qe.SOURCE_STATE_CHANGE,e)}));try{this._mediaStreamTrack=this._source.createOutputTrack()}catch(e){}}get currentState(){return this._bufferSource.currentState}get duration(){return this._bufferSource.duration}get playbackSpeed(){return this._bufferSource.playbackSpeed}getCurrentTime(){return this._bufferSource.currentTime}startProcessAudioBuffer(e){e&&this._bufferSource.updateOptions(e),this._bufferSource.startProcessAudioBuffer()}pauseProcessAudioBuffer(){this._bufferSource.pauseProcessAudioBuffer()}seekAudioBuffer(e){this._bufferSource.seekAudioBuffer(e)}resumeProcessAudioBuffer(){this._bufferSource.resumeProcessAudioBuffer()}stopProcessAudioBuffer(){this._bufferSource.stopProcessAudioBuffer()}close(){this.source=null,this._bufferSource.destroy(),super.close()}setAudioBufferPlaybackSpeed(e){_(e,"speed",0),this._bufferSource.setAudioBufferPlaybackSpeed(e)}}).prototype,"startProcessAudioBuffer",[ji,Zi],Object.getOwnPropertyDescriptor(or.prototype,"startProcessAudioBuffer"),or.prototype),ft(or.prototype,"pauseProcessAudioBuffer",[Yi,Ji],Object.getOwnPropertyDescriptor(or.prototype,"pauseProcessAudioBuffer"),or.prototype),ft(or.prototype,"seekAudioBuffer",[Xi,qi],Object.getOwnPropertyDescriptor(or.prototype,"seekAudioBuffer"),or.prototype),ft(or.prototype,"resumeProcessAudioBuffer",[Qi,$i],Object.getOwnPropertyDescriptor(or.prototype,"resumeProcessAudioBuffer"),or.prototype),ft(or.prototype,"stopProcessAudioBuffer",[er,tr],Object.getOwnPropertyDescriptor(or.prototype,"stopProcessAudioBuffer"),or.prototype),ft(or.prototype,"close",[ir],Object.getOwnPropertyDescriptor(or.prototype,"close"),or.prototype),ft(or.prototype,"setAudioBufferPlaybackSpeed",[rr,sr],Object.getOwnPropertyDescriptor(or.prototype,"setAudioBufferPlaybackSpeed"),or.prototype),or);class dr extends nr{get __className__(){return"MixingAudioTrack"}get isActive(){for(const e of this.trackList)if(e._enabled&&!e._isClosed&&!e.muted)return!0;return!1}constructor(){const e=It().createMediaStreamDestination();super(e.stream.getAudioTracks()[0],void 0,k(8,"track-mix-")),vt(this,"trackList",void 0),vt(this,"destNode",void 0),this._useAudioElement=!1;try{this._mediaStreamTrack=this._source.createOutputTrack()}catch(e){}this.destNode=e,this.trackList=[]}hasAudioTrack(e){return-1!==this.trackList.indexOf(e)}addAudioTrack(e){-1===this.trackList.indexOf(e)?(he.debug("add ".concat(e.getTrackId()," to mixing track")),e._source.outputNode.connect(this.destNode),this.trackList.push(e),this.updateEncoderConfig()):he.debug("track ".concat(e.getTrackId()," is already added"))}removeAudioTrack(e){if(-1!==this.trackList.indexOf(e)){he.debug("remove ".concat(e.getTrackId()," from mixing track"));try{e._source.outputNode.disconnect(this.destNode)}catch(e){}C(this.trackList,e),this.updateEncoderConfig()}}updateEncoderConfig(){const e={};this.trackList.forEach((t=>{t._encoderConfig&&((t._encoderConfig.bitrate||0)>(e.bitrate||0)&&(e.bitrate=t._encoderConfig.bitrate),(t._encoderConfig.sampleRate||0)>(e.sampleRate||0)&&(e.sampleRate=t._encoderConfig.sampleRate),(t._encoderConfig.sampleSize||0)>(e.sampleSize||0)&&(e.sampleSize=t._encoderConfig.sampleSize),t._encoderConfig.stereo&&(e.stereo=!0))})),this._encoderConfig=e}_updateRtpTransceiver(e){this._rtpTransceiver!==e&&(this._rtpTransceiver=e,this.trackList.forEach((t=>{t instanceof dr?t.emit(Xe.TRANSCEIVER_UPDATED,e):t._updateRtpTransceiver(e)})))}}class ur extends Vt{set currentState(e){e!==this._currentState&&(this._currentState=e,this.safeEmit($e.AUDIO_SOURCE_STATE_CHANGE,this._currentState))}get currentState(){return this._currentState}constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),vt(this,"audioBuffer",void 0),vt(this,"sourceNode",void 0),vt(this,"startPlayTime",0),vt(this,"startPlayOffset",0),vt(this,"pausePlayTime",0),vt(this,"options",void 0),vt(this,"currentLoopCount",0),vt(this,"currentPlaybackSpeed",100),vt(this,"_currentState","stopped"),this.audioBuffer=e,this.options=t,this.startPlayOffset=this.options.startPlayTime||0}createWebAudioDiagram(){return this.context.createGain()}get duration(){return this.audioBuffer?this.audioBuffer.duration:0}get playbackSpeed(){return this.currentPlaybackSpeed}get currentTime(){return this.audioBuffer?"stopped"===this.currentState?0:"paused"===this.currentState?this.pausePlayTime:((this.context.currentTime-this.startPlayTime)*(this.playbackSpeed/100)+this.startPlayOffset)%this.audioBuffer.duration:0}updateOptions(e){"stopped"===this.currentState?(this.options=e,this.startPlayOffset=this.options.startPlayTime||0):he.warning("can not set audio source options")}startProcessAudioBuffer(){this.sourceNode&&this.stopProcessAudioBuffer(),this.sourceNode=this.createSourceNode(),this.startSourceNode(),this.currentState="playing"}pauseProcessAudioBuffer(){this.sourceNode&&"playing"===this.currentState&&(this.pausePlayTime=this.currentTime,this.sourceNode.onended=null,this.sourceNode.stop(),this.sourceNode.buffer=null,this.sourceNode=this.createSourceNode(),this.currentState="paused")}seekAudioBuffer(e){this.sourceNode&&(this.sourceNode.onended=null,"playing"===this.currentState&&this.sourceNode.stop(),this.sourceNode=this.createSourceNode(),"playing"===this.currentState?(this.startPlayOffset=e,this.startSourceNode()):"paused"===this.currentState&&(this.pausePlayTime=e))}resumeProcessAudioBuffer(){"paused"===this.currentState&&this.sourceNode&&(this.startPlayOffset=this.pausePlayTime,this.pausePlayTime=0,this.startSourceNode(),this.currentState="playing")}stopProcessAudioBuffer(){if(this.sourceNode){this.sourceNode.onended=null;try{this.sourceNode.stop()}catch(e){}this.reset()}}destroy(){this.audioBuffer=null,super.destroy()}setAudioBufferPlaybackSpeed(e){this.sourceNode&&("playing"===this.currentState&&(this.startPlayOffset=this.currentTime,this.startPlayTime=this.context.currentTime),this.sourceNode.playbackRate.value=e/100),this.currentPlaybackSpeed=e}startSourceNode(){this.sourceNode&&this.sourceNode.buffer&&(this.sourceNode.start(0,this.startPlayOffset),this.startPlayTime=this.context.currentTime,this.sourceNode.onended=this.handleSourceNodeEnded.bind(this))}createSourceNode(){const e=this.context.createBufferSource();return e.buffer=this.audioBuffer,e.loop=!!this.options.loop,e.connect(this.outputNode),e.playbackRate.value=this.currentPlaybackSpeed/100,e}handleSourceNodeEnded(){if(this.currentLoopCount+=1,this.options.cycle&&this.options.cycle>this.currentLoopCount)return this.startPlayOffset=0,this.sourceNode=void 0,void this.startProcessAudioBuffer();this.reset()}reset(){this.startPlayOffset=this.options.startPlayTime||0,this.currentState="stopped",this.sourceNode&&(this.sourceNode.disconnect(),this.sourceNode=void 0),this.currentLoopCount=0}}const hr=new Map;class lr{get rendFrameRate(){if(this.renderStats&&this.renderStats.curTs!==this.renderStats.lastTs){const e=this.renderStats.curTs-this.renderStats.lastTs,t=(this.renderStats.renderNum-this.renderStats.lastRenderNum)/e;return this.renderStats.lastRenderNum=this.renderStats.renderNum,this.renderStats.lastTs=this.renderStats.curTs,t}return 0}get videoElementStatus(){return this._videoElementStatus}set videoElementStatus(e){e!==this._videoElementStatus&&(he.debug("[".concat(this.trackId,"] video-element-status change ").concat(this._videoElementStatus," => ").concat(e)),this._videoElementStatus=e)}get videoState(){return this._videoState}set videoState(e){var t;e!==this._videoState&&(this._videoState=e,null===(t=this.onVideoStateChanged)||void 0===t||t.call(this,this.videoState))}constructor(e){vt(this,"trackId",void 0),vt(this,"config",void 0),vt(this,"onFirstVideoFrameDecoded",void 0),vt(this,"onVideoStateChanged",void 0),vt(this,"freezeTimeCounterList",[]),vt(this,"renderFreezeAccTime",0),vt(this,"isKeepLastFrame",!1),vt(this,"timeUpdatedCount",0),vt(this,"freezeTime",0),vt(this,"playbackTime",0),vt(this,"lastTimeUpdatedTime",0),vt(this,"autoplayFailed",!1),vt(this,"videoTrack",void 0),vt(this,"videoElement",void 0),vt(this,"cacheVideoElement",void 0),vt(this,"renderStats",void 0),vt(this,"_videoState",lt.VideoStateStopped),vt(this,"videoElementCheckInterval",void 0),vt(this,"videoElementFreezeTimeout",void 0),vt(this,"_videoElementStatus",ht.NONE),vt(this,"isGettingVideoDimensions",!1),vt(this,"startGetVideoDimensions",(()=>{const e=()=>{if(this.isGettingVideoDimensions=!0,this.videoElement.videoWidth*this.videoElement.videoHeight>4)return he.debug("[".concat(this.trackId,"] current video dimensions:"),this.videoElement.videoWidth,this.videoElement.videoHeight),void(this.isGettingVideoDimensions=!1);setTimeout(e,500)};!this.isGettingVideoDimensions&&e()})),vt(this,"autoResumeAfterInterruption",(()=>{this.videoTrack&&"live"===this.videoTrack.readyState&&"running"===kt.curState&&(he.debug("[track-".concat(this.trackId,"] video element paused, auto resume for ").concat(te())),ie()?(this.videoElement.srcObject=null,this.videoElement.srcObject=new MediaStream([this.videoTrack]),this.videoElement.play()):(this.videoElement.pause(),this.videoElement.play()))})),vt(this,"handleVideoEvents",(e=>{switch(e.type){case"play":case"playing":this.startGetVideoDimensions(),this.videoElementStatus=ht.PLAYING;break;case"loadeddata":if(this.videoState=lt.VideoStateStarting,this.onFirstVideoFrameDecoded&&this.onFirstVideoFrameDecoded(),this.cacheVideoElement){try{this.cacheVideoElement.srcObject=null,this.cacheVideoElement.remove()}catch(e){}this.cacheVideoElement=void 0}break;case"canplay":this.videoElementStatus=ht.CANPLAY;break;case"stalled":this.videoElementStatus=ht.STALLED;break;case"suspend":this.videoElementStatus=ht.SUSPEND;break;case"pause":this.videoElementStatus=ht.PAUSED,R()||N()||c()&&this.autoplayFailed||!this.videoTrack||"live"!==this.videoTrack.readyState||(he.debug("[track-".concat(this.trackId,"] video element paused, auto resume")),this.videoElement.play());break;case"waiting":this.videoElementStatus=ht.WAITING;break;case"abort":this.videoElementStatus=ht.ABORT;break;case"ended":this.videoElementStatus=ht.ENDED;break;case"emptied":this.videoElementStatus=ht.EMPTIED;break;case"error":{const e=this.videoElement.error;e?(this.videoElementStatus=ht.ERROR,he.error("[".concat(this.trackId,"] media error: ").concat(e.message," (").concat(e.code,")"))):he.debug("[".concat(this.trackId,"] media not been an error."));break}case"timeupdate":{const e=performance.now();if(this.timeUpdatedCount+=1,this.timeUpdatedCount<10)return void(this.lastTimeUpdatedTime=e);const t=e-this.lastTimeUpdatedTime,i=this.lastTimeUpdatedTime;if(this.lastTimeUpdatedTime=e,Ss.lastVisibleTime<Ss.lastHiddenTime||i<Ss.lastHiddenTime||i<Ss.lastVisibleTime)return;for(t>u("VIDEO_FREEZE_DURATION")&&(this.freezeTime+=t),this.playbackTime+=t;this.playbackTime>=6e3;){this.playbackTime-=6e3;const e=Math.min(6e3,this.freezeTime);this.freezeTimeCounterList.push(e),this.freezeTime=Math.max(0,this.freezeTime-6e3)}break}}})),vt(this,"autoResumeAfterInterruptionOnIOS15_16",(()=>{this.videoTrack&&"live"===this.videoTrack.readyState&&(he.debug("[track-".concat(this.trackId,"] video element paused, auto resume for ").concat(te())),ie()?(this.videoElement.srcObject=null,this.videoElement.srcObject=new MediaStream([this.videoTrack]),this.videoElement.play()):(this.videoElement.pause(),this.videoElement.play()))})),this.trackId=e.trackId,this.config=e,e.element instanceof HTMLVideoElement?this.videoElement=e.element:this.videoElement=document.createElement("video"),kt.on(Se.IOS_INTERRUPTION_END,this.autoResumeAfterInterruption),kt.on(Se.IOS_15_16_INTERRUPTION_END,this.autoResumeAfterInterruptionOnIOS15_16)}getVideoElement(){return this.videoElement}getContainerElement(){var e;return null!==(e=this.videoElement.parentElement)&&void 0!==e?e:void 0}updateConfig(e){this.config=e,this.trackId=e.trackId,e.element!==this.videoElement&&(this.destroy(),this.videoElement=e.element),this.videoTrack&&this.initVideoElement()}updateVideoTrack(e){this.videoTrack!==e&&(this.videoTrack=e,this.initVideoElement())}play(t){const i=this.videoElement.play();i&&i.catch&&i.catch((e=>{t&&$t(t,"video",e.message,this.trackId),"NotAllowedError"===e.name?(he.warning("detected video element autoplay failed",e),this.autoplayFailed=!0,this.handleAutoPlayFailed()):he.warning("[".concat(this.trackId,"] play warning: "),e)}));const r=e();if(("Safari"===r.name&&15===Number(r.version)||W())&&i&&i.then){const e=()=>{this.config.mirror&&(this.videoElement.style.transform="rotateY(180deg)")};i.then(e).catch(e)}}getCurrentFrame(){const e=document.createElement("canvas");e.width=this.videoElement.videoWidth,e.height=this.videoElement.videoHeight;const t=e.getContext("2d");if(!t)return he.error("create canvas context failed!"),new ImageData(2,2);t.drawImage(this.videoElement,0,0,e.width,e.height);const i=t.getImageData(0,0,e.width,e.height);return e.remove(),i}async getCurrentFrameToUint8Array(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;const i=document.createElement("canvas");i.width=this.videoElement.videoWidth,i.height=this.videoElement.videoHeight;const r=i.getContext("2d");return r?(r.drawImage(this.videoElement,0,0,i.width,i.height),new Promise(((r,s)=>{i.toBlob((async e=>{if(i.remove(),e){const t=await fi(e);r({buffer:t,width:i.width,height:i.height})}else s(new T(E.CONVERTING_VIDEO_FRAME_TO_BLOB_FAILED))}),e,t<0?.1:t>1?1:t)}))):await vi(e)}destroy(){this.renderStats=void 0,kt.off(Se.IOS_INTERRUPTION_END,this.autoResumeAfterInterruption),kt.off(Se.IOS_15_16_INTERRUPTION_END,this.autoResumeAfterInterruptionOnIOS15_16),this.videoElement.srcObject=null,this.resetVideoElement(),this.freezeTimeCounterList=[],this.videoState=lt.VideoStateStopped}initVideoElement(){if(this.videoElementStatus=ht.INIT,!this.videoElementCheckInterval&&(pr.forEach((e=>{this.videoElement.addEventListener(e,this.handleVideoEvents)})),this.videoElementCheckInterval=window.setInterval((()=>{re(this.videoElement)||(this.videoElementStatus=ht.DESTROYED)}),1e3),u("ENABLE_VIDEO_FRAME_CALLBACK"))){var t,i;let e;const r=()=>{"visible"===document.visibilityState&&(document.removeEventListener("visibilitychange",r),this.videoElementFreezeTimeout=window.setTimeout(s,u("VIDEO_FREEZE_DURATION")))},s=()=>{this.videoElementFreezeTimeout=void 0,this.videoState===lt.VideoStateDecoding&&("visible"===document.visibilityState?this.videoState=lt.VideoStateFrozen:document.addEventListener("visibilitychange",r))},o=(t,i)=>{if(this.videoElementStatus===ht.PLAYING){if(this.renderStats?(this.renderStats.renderNum++,this.renderStats.curTs=i.mediaTime):this.renderStats={lastTs:i.mediaTime,curTs:i.mediaTime,lastRenderNum:0,renderNum:0},e){const t=i.presentationTime-e.presentationTime;this.videoState===lt.VideoStateStarting&&(this.videoState=lt.VideoStateDecoding),this.videoState===lt.VideoStateDecoding&&this.onVideoStateChanged&&(this.videoElementFreezeTimeout&&window.clearTimeout(this.videoElementFreezeTimeout),this.videoElementFreezeTimeout=window.setTimeout(s,u("VIDEO_FREEZE_DURATION"))),t<u("VIDEO_FREEZE_DURATION")&&this.videoState===lt.VideoStateFrozen&&(this.videoState=lt.VideoStateDecoding),t>u("VIDEO_FREEZE_DURATION")&&Ss.lastVisibleTime>=Ss.lastHiddenTime&&e.timestamp>Ss.lastVisibleTime&&e.timestamp>Ss.lastHiddenTime&&(this.renderFreezeAccTime+=t)}e=_t(_t({},i),{},{timestamp:t})}var r,n;u("ENABLE_VIDEO_FRAME_CALLBACK")&&(null===(r=(n=this.videoElement).requestVideoFrameCallback)||void 0===r||r.call(n,o))};null===(t=(i=this.videoElement).requestVideoFrameCallback)||void 0===t||t.call(i,o)}this.videoElement.controls=!1,this.videoElement.setAttribute("playsinline",""),x()&&!u("HIDE_NO_POSTER")&&(this.videoElement.poster="noposter");const r=e();if("Safari"===r.name&&15===Number(r.version)||W()||!this.config.mirror||(this.videoElement.style.transform="rotateY(180deg)"),this.config.fit?this.videoElement.style.objectFit=this.config.fit:this.videoElement.style.objectFit="cover",this.videoElement.setAttribute("muted",""),this.videoElement.muted=!0,this.videoElement.srcObject&&this.videoElement.srcObject instanceof MediaStream){this.videoElement.srcObject.getVideoTracks()[0]!==this.videoTrack&&(this.videoElement.srcObject=this.videoTrack?new MediaStream([this.videoTrack]):null,h()&&this.videoElement.load())}else this.videoElement.srcObject=this.videoTrack?new MediaStream([this.videoTrack]):null,h()&&this.videoElement.load();const s=this.videoElement.play();void 0!==s&&s.catch((e=>{he.debug("[".concat(this.trackId,"] playback interrupted"),e.toString())}))}resetVideoElement(){pr.forEach((e=>{this.videoElement&&this.videoElement.removeEventListener(e,this.handleVideoEvents)})),this.videoElementCheckInterval&&(window.clearInterval(this.videoElementCheckInterval),this.videoElementCheckInterval=void 0),this.videoElementStatus=ht.NONE}handleAutoPlayFailed(){const e=t=>{t.preventDefault(),this.videoElement.play().then((()=>{he.debug("[".concat(this.trackId,"] Video element for trackId:").concat(this.trackId," autoplay resumed."))})).catch((e=>{he.error(e)})),this.autoplayFailed=!1,F()?document.body.removeEventListener("click",e,!0):(document.body.removeEventListener("touchstart",e,!0),document.body.removeEventListener("mousedown",e,!0))};F()?document.body.addEventListener("click",e,!0):(document.body.addEventListener("touchstart",e,!0),document.body.addEventListener("mousedown",e,!0)),Qt()}}const pr=["play","playing","loadeddata","canplay","pause","stalled","suspend","waiting","abort","emptied","ended","timeupdate","error"];class mr extends lr{constructor(e){super(e),vt(this,"container",void 0),vt(this,"slot",void 0),this.slot=e.element,this.updateConfig(e)}updateConfig(e){this.config=e,this.trackId=e.trackId;const t=e.element;t!==this.slot&&(this.destroy(),this.slot=t),this.createElements()}updateVideoTrack(e){this.videoTrack!==e&&(this.videoTrack=e,this.createElements())}play(e){var t;null!==(t=this.container)&&void 0!==t&&t.contains(this.videoElement)&&super.play(e)}getCurrentFrame(){var e;return null!==(e=this.container)&&void 0!==e&&e.contains(this.videoElement)?super.getCurrentFrame():new ImageData(2,2)}async getCurrentFrameToUint8Array(e){var t;let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return null!==(t=this.container)&&void 0!==t&&t.contains(this.videoElement)?await super.getCurrentFrameToUint8Array(e,i):await vi(e)}destroy(){if(super.destroy(),this.videoElement.remove(),this.videoElement=document.createElement("video"),this.container){try{this.container.remove(),this.slot.removeChild(this.container)}catch(e){}this.container=void 0}}createElements(){this.container||(this.container=document.createElement("div")),this.container.id="agora-video-player-".concat(this.trackId),this.container.style.width="100%",this.container.style.height="100%",this.container.style.position="relative",this.container.style.overflow="hidden",this.videoTrack?(this.container.style.backgroundColor="black",u("KEEP_LAST_FRAME")&&this.isKeepLastFrame&&this.videoElement.paused&&this.resetVideoElement(),this.mountedVideoElement()):this.unmountedVideoElement(),this.slot.appendChild(this.container)}mountedVideoElement(){var e;!this.container||null!==(e=this.container)&&void 0!==e&&e.contains(this.videoElement)||this.container.appendChild(this.videoElement),super.initVideoElement(),this.videoElement.id="video_".concat(this.trackId),this.videoElement.className="agora_video_player",this.videoElement.style.width="100%",this.videoElement.style.height="100%",this.videoElement.style.position="absolute",this.videoElement.style.left="0",this.videoElement.style.top="0"}unmountedVideoElement(){var e;if(null!==(e=this.container)&&void 0!==e&&e.contains(this.videoElement)){super.resetVideoElement();try{this.container&&this.container.removeChild(this.videoElement)}catch(e){}this.videoElement=document.createElement("video")}}resetVideoElement(){var e;null!==(e=this.container)&&void 0!==e&&e.contains(this.videoElement)&&(super.resetVideoElement(),this.cacheVideoElement=this.videoElement,this.videoElement=document.createElement("video"))}getContainerElement(){return this.container}}var gr,_r,vr,fr,Tr,Er,yr,Sr,kr,br,Ir,Ar,wr,Dr,Cr,Rr,Nr,Or,Mr,Lr,Pr,Vr,xr,Ur,Br,Fr,Hr,Wr,Gr,Kr,zr,jr,Zr,Yr,Jr;let Xr=(gr=me({argsMap:(e,t,i)=>[e.getTrackId(),"string"==typeof t?t:t instanceof HTMLVideoElement?"HTMLVideoElement":"HTMLElement",i]}),_r=ii(),vr=me({argsMap:e=>[e.getTrackId()]}),fr=q("LocalVideoTrack","_enabledMutex"),Tr=me({argsMap:(e,t)=>[e.getTrackId(),t]}),Er=ii(),yr=q("LocalVideoTrack","_enabledMutex"),Sr=me({argsMap:(e,t)=>[e.getTrackId(),t]}),kr=ii(),br=me({argsMap:(e,t)=>[e.getTrackId(),t]}),Ir=ii(),Ar=ii(),wr=me({argsMap:(e,t,i)=>[e.getTrackId(),t,i]}),Dr=ii(),Cr=ii(),Rr=ii(),Nr=ii(),Or=ii(),Mr=ii(),Lr=ii(),Pr=me({argsMap:(e,t)=>[e.getTrackId(),t.name]}),Vr=me({argsMap:e=>[e.getTrackId()]}),xr=me({argsMap:e=>[e.getTrackId()]}),Ur=me({argsMap:(e,t,i)=>[e.getTrackId(),t.label,i]}),Br=me(),Fr=class e extends Et{get videoHeight(){if(c()){const{height:e}=this._mediaStreamTrack.getSettings();return this._videoHeight=e,this._videoHeight}return this._videoHeight}get videoWidth(){if(c()){const{width:e}=this._mediaStreamTrack.getSettings();return this._videoWidth=e,this._videoWidth}return this._videoWidth}get isPlaying(){return!(!this._player||this._player.videoElementStatus!==ht.PLAYING)}get processorDestination(){return this._processorDestination}get processorContext(){return this._processorContext}set processorContext(e){this._processorContext=e}get __className__(){return"LocalVideoTrack"}constructor(e,i,r,s,o,n){if(super(e,o),vt(this,"trackMediaType","video"),vt(this,"_player",void 0),vt(this,"isUseScaleResolutionDownBy",!1),vt(this,"_videoVisibleTimer",null),vt(this,"_statsTimer",null),vt(this,"_previousVideoVisibleStatus",void 0),vt(this,"_clearPreviousVideoVisibleStatus",(()=>this._previousVideoVisibleStatus=void 0)),vt(this,"_encoderConfig",void 0),vt(this,"_scalabilityMode",{numSpatialLayers:1,numTemporalLayers:1}),vt(this,"_optimizationMode",void 0),vt(this,"_videoHeight",void 0),vt(this,"_videoWidth",void 0),vt(this,"_forceBitrateLimit",void 0),vt(this,"_enabled",!0),vt(this,"_processorDestination",void 0),vt(this,"_processorContext",void 0),c()){const{width:t,height:i}=e.getSettings();this._videoWidth=t,this._videoHeight=i}else this.updateMediaStreamTrackResolution();if(this._encoderConfig=i,this._scalabilityMode=r,this._optimizationMode=s,this._hints=n||[],-1===this._hints.indexOf(ze.SCREEN_TRACK))this.updateBitrateFromProfile();else if(se(t.CHROME,115)&&oe()){const t=Ti(e);t&&(he.info("local screen video track begin to inject frame"),this._mediaStreamTrack=t)}i&&-1!==this._hints.indexOf(ze.CUSTOM_TRACK)&&this.setEncoderConfiguration(i),this._processorContext=new si(this.getTrackId(),"local"),this._processorDestination=new ri(this.processorContext),this.bindProcessorDestinationEvents()}play(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("string"==typeof e){const t=document.getElementById(e);t?e=t:(he.warning("[".concat(this.getTrackId(),'] can not find "#').concat(e,'" element, use document.body')),e=document.body)}he.debug("[".concat(this.getTrackId(),"] start video playback in ").concat(e instanceof HTMLVideoElement?"HTMLVideoElement":"HTMLElement"),JSON.stringify(t));const i=_t(_t(_t({},this._getDefaultPlayerConfig()),t),{},{trackId:this.getTrackId(),element:e});this._player?this._player.updateConfig(i):(e instanceof HTMLVideoElement?this._player=new lr(i):this._player=new mr(i),this._player.updateVideoTrack(this._mediaStreamTrack)),this._player.play(),this._videoVisibleTimer&&window.clearInterval(this._videoVisibleTimer),this._clearPreviousVideoVisibleStatus(),this._videoVisibleTimer=window.setInterval((()=>{try{const e=this.getVideoElementVisibleStatus();this.safeEmit(qe.VIDEO_ELEMENT_VISIBLE_STATUS,e)}catch(e){}}),u("CHECK_VIDEO_VISIBLE_INTERVAL"))}stop(){this._player&&(this._videoVisibleTimer&&(window.clearInterval(this._videoVisibleTimer),this._videoVisibleTimer=null),this._statsTimer&&(this.isUseScaleResolutionDownBy=!1,window.clearInterval(this._statsTimer),this._statsTimer=null),this._clearPreviousVideoVisibleStatus(),this._player.destroy(),this._player=void 0,he.debug("[".concat(this.getTrackId(),"] stop video playback")))}async setEnabled(e,t){if(!t){if(e===this._enabled)return;this.stateCheck("enabled",e)}if(he.info("[".concat(this.getTrackId(),"] start setEnabled"),e),!e){this._originMediaStreamTrack.enabled=!1;try{await D(this,Ke.NEED_DISABLE_TRACK,this)}catch(e){throw he.error("[".concat(this.getTrackId(),"] setEnabled to false error"),e.toString()),e}return t||(this._enabled=!1),void he.info("[".concat(this.getTrackId(),"] setEnabled to false success"))}this._originMediaStreamTrack.enabled=!0;try{await D(this,Ke.NEED_ENABLE_TRACK,this)}catch(e){throw he.error("[".concat(this.getTrackId(),"] setEnabled to true error"),e.toString()),e}he.info("[".concat(this.getTrackId(),"] setEnabled to true success")),t||(this._enabled=!0)}async setMuted(e){e!==this._muted&&(this.stateCheck("muted",e),this._muted=e,this._originMediaStreamTrack.enabled=!e,he.debug("[".concat(this.getTrackId(),"] start set muted: ").concat(e)),e?await D(this,Ke.NEED_MUTE_TRACK,this):await D(this,Ke.NEED_UNMUTE_TRACK,this))}async setEncoderConfiguration(e,t){if(!this._enabled)throw new T(E.TRACK_IS_DISABLED,"can not set encoder configuration when track is disabled");if("720p_auto"===e?this.startMonitorStats():this._statsTimer&&(window.clearInterval(this._statsTimer),this._statsTimer=null),e=Ne(e),this._forceBitrateLimit&&(e.bitrateMax=this._forceBitrateLimit.max_bitrate?this._forceBitrateLimit.max_bitrate:e.bitrateMax,e.bitrateMin=this._forceBitrateLimit.min_bitrate?this._forceBitrateLimit.min_bitrate:e.bitrateMin),e.width||e.height||e.frameRate){const t=ui({encoderConfig:e});(c()||R()||N())&&(t.deviceId=void 0),he.debug("[".concat(this.getTrackId(),"] setEncoderConfiguration applyConstraints"),JSON.stringify(e),JSON.stringify(t));try{await this._originMediaStreamTrack.applyConstraints(t),this.updateMediaStreamTrackResolution()}catch(e){const t=new T(E.UNEXPECTED_ERROR,e.toString());throw he.error("[".concat(this.getTrackId(),"] applyConstraints error"),t.toString()),t}}this._encoderConfig=e,-1===this._hints.indexOf(ze.SCREEN_TRACK)&&this.updateBitrateFromProfile();try{await D(this,Ke.NEED_UPDATE_VIDEO_ENCODER,this)}catch(e){return e.throw(he)}}getStats(){b((()=>{he.warning("[deprecated] LocalVideoTrack.getStats will be removed in the future, use AgoraRTCClient.getLocalVideoStats instead")}),"localVideoTrackGetStatsWarning");const e=Q(this,Ke.GET_STATS);return e||_t({},it)}async setBeautyEffect(e){he.error("LocalVideoTrack.setBeautyEffect was deprecated, please migrate to agora-extension-beauty-effect")}getCurrentFrameData(){return this._player?this._player.getCurrentFrame():new ImageData(2,2)}async getCurrentFrameImage(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return this._player?this._player.getCurrentFrameToUint8Array(e,t):await vi(e)}async setBitrateLimit(e){if(he.debug("[".concat(this.getTrackId(),"] set bitrate limit, ").concat(JSON.stringify(e))),e){this._forceBitrateLimit=e,this._encoderConfig&&(this._encoderConfig.bitrateMax?this._encoderConfig.bitrateMax=this._encoderConfig.bitrateMax<e.max_bitrate?this._encoderConfig.bitrateMax:e.max_bitrate:this._encoderConfig.bitrateMax=e.max_bitrate,this._encoderConfig.bitrateMin,this._encoderConfig.bitrateMin=e.min_bitrate);try{await D(this,Ke.NEED_UPDATE_VIDEO_ENCODER,this)}catch(e){return e.throw(he)}}}async setOptimizationMode(e){if("motion"!==e&&"detail"!==e&&"balanced"!==e)return void he.error(E.INVALID_PARAMS,"optimization mode must be motion, detail or balanced");const t=this._optimizationMode;try{this._optimizationMode=e,await D(this,Ke.NEED_UPDATE_VIDEO_SEND_PARAMETERS,this)}catch(e){throw this._optimizationMode=t,he.error("[".concat(this.getTrackId(),"] set optimization mode failed"),e.toString()),e}he.info("[".concat(this.getTrackId(),"] set optimization mode success (").concat(e,")"))}setScalabiltyMode(e){if(1===e.numSpatialLayers&&1!==e.numTemporalLayers)return he.error(E.INVALID_PARAMS,"scalability mode currently not supported, no SVC."),void(this._scalabilityMode={numSpatialLayers:1,numTemporalLayers:1});this._scalabilityMode=e,he.info("[".concat(this.getTrackId(),"] set scalability mode success (").concat(e,")"))}updateMediaStreamTrackResolution(){di(this._originMediaStreamTrack).then((e=>{let[t,i]=e;this._videoHeight=i,this._videoWidth=t})).catch(K)}_updatePlayerSource(){this._player&&this._player.updateVideoTrack(this._mediaStreamTrack)}_getDefaultPlayerConfig(){return{fit:"contain"}}async setSenderConfiguration(e){if(!this._enabled)throw new T(E.TRACK_IS_DISABLED,"can not set encoder configuration when track is disabled");he.debug("[".concat(this.getTrackId(),"] setSenderConfiguration applyConstraints"),JSON.stringify(e)),e=Ne(e),this._forceBitrateLimit&&(e.bitrateMax=this._forceBitrateLimit.max_bitrate?this._forceBitrateLimit.max_bitrate:e.bitrateMax,e.bitrateMin=this._forceBitrateLimit.min_bitrate?this._forceBitrateLimit.min_bitrate:e.bitrateMin),this._encoderConfig=e,-1===this._hints.indexOf(ze.SCREEN_TRACK)&&this.updateBitrateFromProfile();try{await D(this,Ke.NEED_UPDATE_VIDEO_ENCODER,this)}catch(e){return e.throw(he)}}updateBitrateFromProfile(){if(!this._encoderConfig)return;const{width:e,height:t,frameRate:i}=this.getMediaStreamTrackSettings();if(!e||!t||!i)return;const{bitrateMax:r,bitrateMin:s}=this._encoderConfig;if(null==s||null==r){const{max:o,min:n}=pi(e,t,i,s,r);this._encoderConfig.bitrateMin=n,this._encoderConfig.bitrateMax=o,he.debug("[".concat(this.getTrackId(),"] update bitrate from profile, [w: ").concat(e,", h: ").concat(t,", fps: ").concat(i,"] => [brMax: ").concat(o,", brMin: ").concat(n,"]"))}}getVideoElementVisibleStatus(){try{var e,t;const i=null==this||null===(e=this._player)||void 0===e?void 0:e.getContainerElement(),r={track:this,element:null==this||null===(t=this._player)||void 0===t?void 0:t.getVideoElement(),slot:null==i?void 0:i.parentElement},{element:s,slot:o}=r;if(this.isPlaying&&s instanceof HTMLVideoElement&&o instanceof HTMLElement){const e=ne.checkOneElementVisible(s),t=Object.assign({},e);if(t.visible!==this._previousVideoVisibleStatus){this._previousVideoVisibleStatus=t.visible;const e=le.reportApiInvoke(null,{tag:A.TRACER,name:I.LOCAL_VIDEO_TRACK_GET_VIDEO_VISIBLE,options:[this.getTrackId()]});t.visible?e.onSuccess("Video is visible"):e.onSuccess("Invisible because of ".concat(t.reason))}return t}return}catch(e){throw new T(E.GET_VIDEO_ELEMENT_VISIBLE_ERROR,e.message)}}async renewMediaStreamTrack(e){}pipe(e){if(this.processor===e)return e;if(e._source)throw new T(E.INVALID_OPERATION,"Processor ".concat(e.name," already piped, please call unpipe beforehand."));return this.unpipe(),this.processor=e,this.processor._source=this,e.updateInput({track:this._originMediaStreamTrack,context:this.processorContext}),e}unpipe(){if(!this.processor)return;const e=this.processor;this.processor._source=void 0,this.processor=void 0,e.reset()}close(){super.close(),this.unbindProcessorDestinationEvents(),this.unbindProcessorContextEvents(),this.unpipe(),this.processorDestination._source&&this.processorDestination._source.unpipe()}clone(t){let i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=this._encoderConfig;t&&(r=_t(_t({},r),Ne(t))),r=ae(r);const s=k(8,"track-video-cloned-"),o=new e(i?this._mediaStreamTrack.clone():this._mediaStreamTrack,r,ae(this._scalabilityMode),this._optimizationMode,s,ae(this._hints));return t&&r&&o.setEncoderConfiguration(r),he.debug("clone video track from ".concat(this.getTrackId()," to ").concat(s,", clone ").concat(i)),o}async replaceTrack(e,t){if(!(e instanceof MediaStreamTrack))throw new T(E.INVALID_PARAMS,"track should be an instance of MediaStreamTrack");if("video"!==e.kind)throw new T(E.INVALID_PARAMS,"track should be a video MediaStreamTrack");await this._updateOriginMediaStreamTrack(e,t,!0),this.updateMediaStreamTrackResolution()}startMonitorStats(){if(!c()&&!R())return;this._statsTimer&&window.clearInterval(this._statsTimer);let e=2,t=De[e];let i=-1;let r=Date.now();const s=e=>{e>2||e<0||(r=Date.now(),t=De[e],this.setSenderConfiguration(t))};this.isUseScaleResolutionDownBy=!0,this._statsTimer=window.setInterval((()=>{const o=this.getStats(),n=Q(this,Ke.GET_RTC_STATS);if(o.sendPackets>0&&n){-1===i&&(i=Date.now());const a=Date.now();if(a-i<1e3||a-r<u("PROFILE_SWITCH_INTERVAL"))return;const c=o.sendFrameRate,d=.6*t.frameRate,h=.9*t.frameRate;"number"==typeof c&&c>0&&c<d?e>0&&(e--,s(e),he.debug("[".concat(this.getTrackId(),"] step down for fps ").concat(c,", switchProfile to ").concat(e))):n.OutgoingAvailableBandwidth<t.bitrateMin?e>0&&(e--,s(e),he.debug("[".concat(this.getTrackId(),"] step down for OutgoingAvailableBandwidth ").concat(n.OutgoingAvailableBandwidth,", bitrateMin ").concat(t.bitrateMin,", switchProfile to ").concat(e))):"number"==typeof c&&c>h&&e<De.length-1&&n.OutgoingAvailableBandwidth>1.2*De[e+1].bitrateMin&&(e++,s(e),he.debug("[".concat(this.getTrackId(),"] step up for fps ").concat(c,", OutgoingAvailableBandwidth ").concat(n.OutgoingAvailableBandwidth,", switchProfile to ").concat(e)))}}),u("CHECK_LOCAL_STATS_INTERVAL"))}sendSeiData(e){if(b((()=>{le.reportApiInvoke(null,{name:I.LOCAL_VIDEO_SEND_SEI_DATA,options:[],tag:A.TRACER}).onSuccess("")}),this._mediaStreamTrack.id||this.getTrackId()),!u("ENABLE_VIDEO_SEI")||!u("ENABLE_ENCODED_TRANSFORM"))return void he.warning('To send/receive SEI, please call AgoraRTC.setParameter("ENABLE_VIDEO_SEI", true) before instantiate IAgoraRtcClient');if(e instanceof Uint8Array==!1)return new T(E.INVALID_PARAMS,"Invalid argument type, ILocalVideoTrack.sendSeiData() only accept Uint8Array argument.").throw();const t=this.getRTCRtpTransceiver();if(!t)return void he.warning("Video track is not published, SEI can not be send");const i=t.sender.getParameters();if(0===i.codecs.length)return;const r=i.codecs[0].mimeType.toLocaleLowerCase();"video/h264"===r?this.safeEmit("sei-to-send",e):he.warning("SEI is not supported by ".concat(r))}bindProcessorDestinationEvents(){this.processorDestination.on(nt.ON_TRACK,(async e=>{e?e!==this._mediaStreamTrack&&(this._mediaStreamTrack=e,this._updatePlayerSource(),await D(this,Ke.NEED_REPLACE_TRACK,this)):this._mediaStreamTrack!==this._originMediaStreamTrack&&(this._mediaStreamTrack=this._originMediaStreamTrack,this._updatePlayerSource(),await D(this,Ke.NEED_REPLACE_TRACK,this))}))}unbindProcessorDestinationEvents(){this.processorDestination.removeAllListeners(nt.ON_TRACK)}unbindProcessorContextEvents(){this.processorContext.removeAllListeners(at.REQUEST_UPDATE_CONSTRAINTS),this.processorContext.removeAllListeners(at.REQUEST_CONSTRAINTS)}},ft(Fr.prototype,"play",[gr,_r],Object.getOwnPropertyDescriptor(Fr.prototype,"play"),Fr.prototype),ft(Fr.prototype,"stop",[vr],Object.getOwnPropertyDescriptor(Fr.prototype,"stop"),Fr.prototype),ft(Fr.prototype,"setEnabled",[fr,Tr,Er],Object.getOwnPropertyDescriptor(Fr.prototype,"setEnabled"),Fr.prototype),ft(Fr.prototype,"setMuted",[yr,Sr,kr],Object.getOwnPropertyDescriptor(Fr.prototype,"setMuted"),Fr.prototype),ft(Fr.prototype,"setEncoderConfiguration",[br,Ir],Object.getOwnPropertyDescriptor(Fr.prototype,"setEncoderConfiguration"),Fr.prototype),ft(Fr.prototype,"getStats",[Ar],Object.getOwnPropertyDescriptor(Fr.prototype,"getStats"),Fr.prototype),ft(Fr.prototype,"setBeautyEffect",[wr,Dr],Object.getOwnPropertyDescriptor(Fr.prototype,"setBeautyEffect"),Fr.prototype),ft(Fr.prototype,"getCurrentFrameData",[Cr],Object.getOwnPropertyDescriptor(Fr.prototype,"getCurrentFrameData"),Fr.prototype),ft(Fr.prototype,"getCurrentFrameImage",[Rr],Object.getOwnPropertyDescriptor(Fr.prototype,"getCurrentFrameImage"),Fr.prototype),ft(Fr.prototype,"setBitrateLimit",[Nr],Object.getOwnPropertyDescriptor(Fr.prototype,"setBitrateLimit"),Fr.prototype),ft(Fr.prototype,"setOptimizationMode",[Or],Object.getOwnPropertyDescriptor(Fr.prototype,"setOptimizationMode"),Fr.prototype),ft(Fr.prototype,"setScalabiltyMode",[Mr],Object.getOwnPropertyDescriptor(Fr.prototype,"setScalabiltyMode"),Fr.prototype),ft(Fr.prototype,"updateMediaStreamTrackResolution",[Lr],Object.getOwnPropertyDescriptor(Fr.prototype,"updateMediaStreamTrackResolution"),Fr.prototype),ft(Fr.prototype,"pipe",[Pr],Object.getOwnPropertyDescriptor(Fr.prototype,"pipe"),Fr.prototype),ft(Fr.prototype,"unpipe",[Vr],Object.getOwnPropertyDescriptor(Fr.prototype,"unpipe"),Fr.prototype),ft(Fr.prototype,"close",[xr],Object.getOwnPropertyDescriptor(Fr.prototype,"close"),Fr.prototype),ft(Fr.prototype,"replaceTrack",[Ur],Object.getOwnPropertyDescriptor(Fr.prototype,"replaceTrack"),Fr.prototype),ft(Fr.prototype,"startMonitorStats",[Br],Object.getOwnPropertyDescriptor(Fr.prototype,"startMonitorStats"),Fr.prototype),Fr),qr=(Hr=me({argsMap:(e,t)=>[e.getTrackId(),t]}),Wr=ii(),Gr=q("CameraVideoTrack","_enabledMutex"),Kr=me({argsMap:(e,t)=>[e.getTrackId(),t]}),zr=ii(),jr=me({argsMap:(e,t)=>[e.getTrackId(),t]}),Zr=ii(),Yr=me({argsMap:e=>[e.getTrackId()]}),Jr=class e extends Xr{get __className__(){return"CameraVideoTrack"}constructor(e,t,i,r,s,o){super(e,Ne(t.encoderConfig),r,s,o),vt(this,"_config",void 0),vt(this,"_originalConstraints",void 0),vt(this,"_constraints",void 0),vt(this,"_enabled",!0),vt(this,"_deviceName","default"),vt(this,"tryResumeVideoForIOS15_16WeChat",(async()=>{(W()||$())&&!de()&&ue()&&this._enabled&&!this._isClosed&&(he.debug("[".concat(this.getTrackId(),"] try capture camera media device for interrupted iOS 15 device on WeChat.")),await this.renewMediaStreamTrack())})),this._config=t,this._originalConstraints=i,this._constraints=i,this._deviceName=e.label,this._encoderConfig=Ne(this._config.encoderConfig),kt.on(Se.IOS_15_16_INTERRUPTION_END,this.tryResumeVideoForIOS15_16WeChat),kt.on(Se.IOS_INTERRUPTION_END,this.tryResumeVideoForIOS15_16WeChat),this.bindProcessorContextEvents()}async setDevice(e){return"string"==typeof e?this._setDeviceById(e):e.deviceId?this._setDeviceById(e.deviceId):e.facingMode?this._setDeviceByFacingModel(e.facingMode):void 0}async _setDeviceById(e){if(he.info("[".concat(this.getTrackId(),"] set device to ").concat(e)),this._enabled)try{const t=await Jt.getDeviceById(e),i={};i.video=_t({},this._constraints),i.video.deviceId={exact:e},i.video.facingMode=void 0,this._originMediaStreamTrack.stop();let r=null;try{r=await Kt(i,this.getTrackId())}catch(e){throw he.error("[".concat(this.getTrackId(),"] setDevice failed"),e.toString()),r=await Kt({video:this._constraints},this.getTrackId()),await this._updateOriginMediaStreamTrack(r.getVideoTracks()[0],!1),e}await this._updateOriginMediaStreamTrack(r.getVideoTracks()[0],!1),this.updateMediaStreamTrackResolution(),this._deviceName=t.label,this._config.cameraId=e,this._constraints.deviceId={exact:e}}catch(e){throw he.error("[".concat(this.getTrackId(),"] setDevice error"),e.toString()),e}else try{const t=await Jt.getDeviceById(e);this._deviceName=t.label,this._config.cameraId=e,this._constraints.deviceId={exact:e}}catch(e){throw he.error("[".concat(this.getTrackId(),"] setDevice error"),e.toString()),e}he.info("[".concat(this.getTrackId(),"] setDevice success"))}async _setDeviceByFacingModel(e){he.info("[".concat(this.getTrackId(),"] set facingMode ").concat(e));const t={video:_t(_t({},this._constraints),{},{deviceId:void 0,facingMode:{exact:e}})};if(this._enabled){this._originMediaStreamTrack.stop();let e=null;try{e=await Kt(t,this.getTrackId())}catch(t){throw he.error("[".concat(this.getTrackId(),"] setDeviceByFacingModel failed"),t.toString()),e=await Kt({video:this._constraints},this.getTrackId()),await this._updateOriginMediaStreamTrack(e.getVideoTracks()[0],!1),t}await this._updateOriginMediaStreamTrack(e.getVideoTracks()[0],!1),this.updateMediaStreamTrackResolution()}this._deviceName="",this._config.facingMode=e,this._config.cameraId=void 0,this._constraints=_t({},t.video),he.info("[".concat(this.getTrackId(),"] setDeviceByFacingModel success"))}async setEnabled(e,t){if(!t){if(e===this._enabled)return;this.stateCheck("enabled",e)}if(he.info("[".concat(this.getTrackId(),"] start setEnabled"),e),e){try{if(this.isExternalTrack)this._originMediaStreamTrack.enabled=!0;else{const e=await Kt({video:this._constraints},this.getTrackId());await this._updateOriginMediaStreamTrack(e.getVideoTracks()[0],!1)}await D(this,Ke.NEED_ENABLE_TRACK,this)}catch(e){throw he.error("[".concat(this.getTrackId(),"] setEnabled true error"),e.toString()),e}this.updateMediaStreamTrackResolution(),he.info("[".concat(this.getTrackId(),"] setEnabled to true success")),t||(this._enabled=!0)}else{this.isExternalTrack?this._originMediaStreamTrack.enabled=!1:(this._originMediaStreamTrack.onended=null,this._originMediaStreamTrack.stop()),t||(this._enabled=!1);try{await D(this,Ke.NEED_DISABLE_TRACK,this)}catch(e){throw he.error("[".concat(this.getTrackId(),"] setEnabled to false error"),e.toString()),e}he.info("[".concat(this.getTrackId(),"] setEnabled to false success"))}}async setEncoderConfiguration(e,t){if(!this._enabled)throw new T(E.TRACK_IS_DISABLED,"can not set encoder configuration when track is disabled");"720p_auto"===e?this.startMonitorStats():this._statsTimer&&(window.clearInterval(this._statsTimer),this._statsTimer=null),e=Ne(e),this._forceBitrateLimit&&(e.bitrateMax=this._forceBitrateLimit.max_bitrate||e.bitrateMax,e.bitrateMin=this._forceBitrateLimit.min_bitrate||e.bitrateMin);const i=ce(this._config);i.encoderConfig=e;const r=ui(i);(c()||R()||N())&&(r.deviceId=void 0),he.debug("[".concat(this.getTrackId(),"] setEncoderConfiguration applyConstraints"),JSON.stringify(e),JSON.stringify(r));try{await this._originMediaStreamTrack.applyConstraints(r),this.updateMediaStreamTrackResolution()}catch(e){const t=new T(E.UNEXPECTED_ERROR,e.toString());throw he.error("[".concat(this.getTrackId(),"] applyConstraints error"),t.toString()),t}this._config=i,this._constraints=r,this._originalConstraints=r,this._encoderConfig=e,-1===this._hints.indexOf(ze.SCREEN_TRACK)&&this.updateBitrateFromProfile();try{await D(this,Ke.NEED_UPDATE_VIDEO_ENCODER,this)}catch(e){return e.throw(he)}}_getDefaultPlayerConfig(){return{mirror:!0,fit:"cover"}}onTrackEnded(){if((R()||N())&&this._enabled&&!this._isClosed&&kt.duringInterruption){const e=async()=>{kt.off(Se.IOS_INTERRUPTION_END,e),this._enabled&&!this._isClosed&&(he.debug("[".concat(this.getTrackId(),"] try capture camera media device for interrupted iOS device.")),await this.setEnabled(!1),await this.setEnabled(!0))};kt.on(Se.IOS_INTERRUPTION_END,e)}else he.debug("[".concat(this.getTrackId(),"] track ended")),this.safeEmit(qe.TRACK_ENDED)}async renewMediaStreamTrack(e){const t=e||this._constraints,i=Jt.searchDeviceIdByName(this._deviceName);if(i&&!t.deviceId&&(t.deviceId={exact:i}),this._enabled){const e=await Kt({video:t},this.getTrackId());this._constraints=t,await this._updateOriginMediaStreamTrack(e.getVideoTracks()[0],!0),this.updateMediaStreamTrackResolution()}}close(){super.close(),kt.off(Se.IOS_15_16_INTERRUPTION_END,this.tryResumeVideoForIOS15_16WeChat),kt.off(Se.IOS_INTERRUPTION_END,this.tryResumeVideoForIOS15_16WeChat)}clone(t){let i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=this._encoderConfig;t&&(r=_t(_t({},r),Ne(t))),r=ae(r);const s=k(8,"track-cam-cloned-"),o=new e(i?this._mediaStreamTrack.clone():this._mediaStreamTrack,ae(_t(_t({},this._config),{},{encoderConfig:r})),ae(this._constraints),ae(this._scalabilityMode),this._optimizationMode,s);return t&&r&&o.setEncoderConfiguration(r),he.debug("clone track from ".concat(this.getTrackId()," to ").concat(s,", clone ").concat(i)),o}bindProcessorContextEvents(){this.processorContext.on(at.REQUEST_UPDATE_CONSTRAINTS,(async(e,t,i)=>{try{const i=Object.assign({},this._originalConstraints,...e);await this.renewMediaStreamTrack(i),t()}catch(e){i(e)}})),this.processorContext.on(at.REQUEST_CONSTRAINTS,(async e=>{e(this._originMediaStreamTrack.getSettings())}))}},ft(Jr.prototype,"setDevice",[Hr,Wr],Object.getOwnPropertyDescriptor(Jr.prototype,"setDevice"),Jr.prototype),ft(Jr.prototype,"setEnabled",[Gr,Kr,zr],Object.getOwnPropertyDescriptor(Jr.prototype,"setEnabled"),Jr.prototype),ft(Jr.prototype,"setEncoderConfiguration",[jr,Zr],Object.getOwnPropertyDescriptor(Jr.prototype,"setEncoderConfiguration"),Jr.prototype),ft(Jr.prototype,"close",[Yr],Object.getOwnPropertyDescriptor(Jr.prototype,"close"),Jr.prototype),Jr);function Qr(e){const t=le.reportApiInvoke(null,{tag:A.TRACER,name:I.CREATE_CUSTOM_AUDIO_TRACK,options:[e]}),i=new nr(e.mediaStreamTrack,e.encoderConfig?Pe(e.encoderConfig):{},k(8,"track-cus-"),!1);return he.info("create custom audio track success with config",e,"trackId",i.getTrackId()),t.onSuccess(i.getTrackId()),i}async function $r(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=le.reportApiInvoke(null,{tag:A.TRACER,name:I.CREATE_MIC_AUDIO_TRACK,options:[e]}),i=li(e),r=k(8,"track-mic-");let s=null;he.info("start create microphone audio track with config",JSON.stringify(e),"trackId",r);try{s=(await Kt({audio:i},r)).getAudioTracks()[0]||null}catch(e){throw t.onError(e),e}if(!s){const e=new T(E.UNEXPECTED_ERROR,"can not find track in media stream");return t.onError(e),e.throw(he)}const o=new ar(s,e,i,r);return t.onSuccess(o.getTrackId()),he.info("create microphone audio track success, trackId:",r),o}async function es(e){var t;const{cacheOnlineFile:i,encoderConfig:r}=e;let{source:s}=e;const o={source:s instanceof AudioBuffer?"AudioBuffer":s instanceof File?null!==(t=File.name)&&void 0!==t?t:"File":s,cacheOnlineFile:i,encoderConfig:r},n=le.reportApiInvoke(null,{tag:A.TRACER,name:I.CREATE_BUFFER_AUDIO_TRACK,options:[o]});if(u("DISABLE_WEBAUDIO"))throw new T(E.NOT_SUPPORTED,"can not create BufferSourceAudioTrack when WebAudio disabled");const a=k(8,"track-buf-");he.info("start create buffer source audio track with config",JSON.stringify(o),"trackId",a);const c=s;if(!(s instanceof AudioBuffer))try{s=await async function(e,t){let i=null;if("string"==typeof e){const t=hr.get(e);if(t)return he.debug("use cached audio resource: ",e),t;try{i=(await ee((()=>ge.get(e,{responseType:"arraybuffer"})),void 0,void 0,{maxRetryCount:3})).data}catch(e){throw new T(E.FETCH_AUDIO_FILE_FAILED,e.toString())}}else{const t=new Promise(((t,i)=>{const r=new FileReader;r.onload=e=>{e.target?t(e.target.result):i(new T(E.READ_LOCAL_AUDIO_FILE_ERROR))},r.onerror=()=>{i(new T(E.READ_LOCAL_AUDIO_FILE_ERROR))},r.readAsArrayBuffer(e)}));i=await t}const r=await Dt(i);return"string"==typeof e&&t&&hr.set(e,r),r}(s,i)}catch(e){return n.onError(e),e.throw(he)}const d=new ur(s),h=new cr(c,d,r?Pe(r):{},a);return he.info("create buffer source audio track success, trackId:",a),n.onSuccess(h.getTrackId()),h}function ts(e){const t=new dr;return e.forEach((e=>t.addAudioTrack(e))),t}function is(e){const t=le.reportApiInvoke(null,{tag:A.TRACER,name:I.CREATE_CUSTOM_VIDEO_TRACK,options:[e]}),i=new Xr(e.mediaStreamTrack,{width:e.width,height:e.height,frameRate:e.frameRate,bitrateMax:e.bitrateMax,bitrateMin:e.bitrateMin},e.scalabiltyMode?Me(e.scalabiltyMode):{numSpatialLayers:1,numTemporalLayers:1},e.optimizationMode,k(8,"track-cus-"),[ze.CUSTOM_TRACK]);return t.onSuccess(i.getTrackId()),he.info("create custom video track success with config",e,"trackId",i.getTrackId()),i}async function rs(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=u("CAMERA_CAPTURE_CONFIG"),i=le.reportApiInvoke(null,{tag:A.TRACER,name:I.CREATE_CAM_VIDEO_TRACK,options:[_t({},e),t]});t&&(e.encoderConfig=t);const r=ui(e),s=k(8,"track-cam-");let o=null;const n="720p_auto"===e.encoderConfig;he.info("start create camera video track with config",JSON.stringify(e),"trackId",s);try{o=(await Kt({video:r},s)).getVideoTracks()[0]||null}catch(e){throw i.onError(e),e}if(!o){const e=new T(E.UNEXPECTED_ERROR,"can not find track in media stream");return i.onError(e),e.throw(he)}e.optimizationMode&&ns(s,o,e,Ne(e.encoderConfig));const a=new qr(o,e,r,e.scalabiltyMode?Me(e.scalabiltyMode):{numSpatialLayers:1,numTemporalLayers:1},e.optimizationMode,s);return n&&a.startMonitorStats(),i.onSuccess(a.getTrackId()),he.info("create camera video success, trackId:",s),a}async function ss(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=u("CAMERA_CAPTURE_CONFIG"),r=le.reportApiInvoke(null,{tag:A.TRACER,name:I.CREATE_MIC_AND_CAM_TRACKS,options:[e,t,i]});i&&(t.encoderConfig=i);const s="720p_auto"===t.encoderConfig,o=ui(t),n=li(e),a=k(8,"track-mic-"),c=k(8,"track-cam-");let d=null,h=null;he.info("start create camera video track(".concat(c,") and microphone audio track(").concat(a,") with config, audio: ").concat(JSON.stringify(e),", video: ").concat(JSON.stringify(t)));try{const e=await Kt({audio:n,video:o},"".concat(a,"-").concat(c));d=e.getAudioTracks()[0],h=e.getVideoTracks()[0]}catch(e){throw r.onError(e),e}if(!d||!h){const e=new T(E.UNEXPECTED_ERROR,"can not find tracks in media stream");return r.onError(e),e.throw(he)}t.optimizationMode&&ns(c,h,t,Ne(t.encoderConfig));const l=new ar(d,e,n,a),p=new qr(h,t,o,t.scalabiltyMode?Me(t.scalabiltyMode):{numSpatialLayers:1,numTemporalLayers:1},t.optimizationMode,c);return s&&p.startMonitorStats(),r.onSuccess([l.getTrackId(),p.getTrackId()]),he.info("create camera video track(".concat(c,") and microphone audio track(").concat(a,") success")),[l,p]}async function os(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"disable";const i=le.reportApiInvoke(null,{tag:A.TRACER,name:I.CREATE_SCREEN_VIDEO_TRACK,options:[_t({},e),t]}),r="720p_auto"===e.encoderConfig;e.encoderConfig?"string"==typeof e.encoderConfig||e.encoderConfig.width&&e.encoderConfig.height||(e.encoderConfig.width={max:1920},e.encoderConfig.height={max:1080}):e.encoderConfig="1080p_2";const s=hi(e),o=k(8,"track-scr-v-");let n=null,a=null;const c=Ee();if(!c.supportShareAudio&&"enable"===t){const e=new T(E.NOT_SUPPORTED,"your browser or platform is not support share-screen with audio");return i.onError(e),e.throw(he)}he.info("start create screen video track with config",e,"withAudio",t,"trackId",o);try{const e=await Kt({screen:s,screenAudio:"auto"===t?c.supportShareAudio:"enable"===t},o);n=e.getVideoTracks()[0]||null,a=e.getAudioTracks()[0]||null}catch(e){throw i.onError(e),e}if(!n){const e=new T(E.UNEXPECTED_ERROR,"can not find track in media stream");return i.onError(e),e.throw(he)}if(!a&&"enable"===t){n&&n.stop();const e=new T(E.SHARE_AUDIO_NOT_ALLOWED);return i.onError(e),e.throw(he)}if(e.optimizationMode||(e.optimizationMode="detail"),e.optimizationMode){ns(o,n,e,e.encoderConfig&&Oe(e.encoderConfig)||void 0),e.encoderConfig&&"string"!=typeof e.encoderConfig&&(e.encoderConfig.bitrateMin=e.encoderConfig.bitrateMax)}const d=new Xr(n,e.encoderConfig?Oe(e.encoderConfig):{},e.scalabiltyMode?Me(e.scalabiltyMode):{numSpatialLayers:1,numTemporalLayers:1},e.optimizationMode,o,[ze.SCREEN_TRACK]);if(r&&d.startMonitorStats(),!a)return i.onSuccess(d.getTrackId()),he.info("create screen video track success","video:",d.getTrackId()),d;const u=new nr(a,void 0,k(8,"track-scr-a-"),!1);return i.onSuccess([d.getTrackId(),u.getTrackId()]),he.info("create screen video track success","video:",d.getTrackId(),"audio:",u.getTrackId()),[d,u]}function ns(e,t,i,r){i.optimizationMode&&(r&&r.width&&r.height?(i.encoderConfig=_t(_t({},r),{},{bitrateMin:r.bitrateMin,bitrateMax:r.bitrateMax}),"motion"!==i.optimizationMode&&"detail"!==i.optimizationMode||(t.contentHint=i.optimizationMode,t.contentHint===i.optimizationMode?he.debug("[".concat(e,"] set content hint to"),i.optimizationMode):he.debug("[".concat(e,"] set content hint failed")))):he.warning("[".concat(e,"] can not apply optimization mode bitrate config, no encoderConfig")))}var as,cs,ds,us,hs,ls,ps,ms,gs,_s,vs,fs;class Ts extends Tt{getUserId(){return this._userId}constructor(e,t,i,r){super(e,"track-".concat(e.kind,"-").concat(t,"-").concat(r.clientId,"_").concat(k(5,""))),vt(this,"_userId",void 0),vt(this,"_uintId",void 0),vt(this,"_isDestroyed",!1),vt(this,"store",void 0),vt(this,"processor",void 0),vt(this,"processorContext",void 0),this._userId=t,this._uintId=i,this.store=r}_updateOriginMediaStreamTrack(e){this._originMediaStreamTrack=e,this._mediaStreamTrack=e,this._updatePlayerSource(),this.processor&&this.processor.updateInput({track:this._originMediaStreamTrack,context:this.processorContext})}_destroy(){this._isDestroyed=!0,he.info("[".concat(this.getTrackId(),"] is destroyed")),this.stop(),super.close()}getProcessorStats(){return this.processorContext.gatherStats()}getProcessorUsage(){return this.processorContext.gatherUsage()}}let Es=(as=me({argsMap:(e,t,i)=>[e.getTrackId(),"string"==typeof t?t:t instanceof HTMLVideoElement?"HTMLVideoElement":"HTMLElement",i]}),cs=me({argsMap:e=>[e.getTrackId()]}),ds=me({argsMap:(e,t)=>[e.getTrackId(),t.name]}),us=me({argsMap:e=>[e.getTrackId()]}),ft((hs=class extends Ts{get isPlaying(){return!(!this._player||this._player.videoElementStatus!==ht.PLAYING)}get __className__(){return"RemoteVideoTrack"}constructor(e,t,i,r){super(e,t,i,r),vt(this,"_videoVisibleTimer",null),vt(this,"_previousVideoVisibleStatus",void 0),vt(this,"_clearPreviousVideoVisibleStatus",(()=>this._previousVideoVisibleStatus=void 0)),vt(this,"trackMediaType","video"),vt(this,"_videoWidth",void 0),vt(this,"_videoHeight",void 0),vt(this,"_player",void 0),vt(this,"processorDestination",void 0),vt(this,"processorContext",void 0),this.updateMediaStreamTrackResolution(),this.processorContext=new si(this.getTrackId(),"remote"),this.processorDestination=new ri(this.processorContext),this.bindProcessorDestinationEvents()}getStats(){b((()=>{he.warning("[deprecated] RemoteVideoTrack.getStats will be removed in the future, use AgoraRTCClient.getRemoteVideoStats instead")}),"remoteVideoTrackGetStatsWarning");return Q(this,Ke.GET_STATS)||_t({},ot)}play(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("string"==typeof e){const t=document.getElementById(e);t?e=t:(he.warning("[".concat(this.getTrackId(),'] can not find "#').concat(e,'" element, use document.body')),e=document.body)}he.debug("[".concat(this.getTrackId(),"] start video playback in ").concat(e instanceof HTMLVideoElement?"HTMLVideoElement":"HTMLElement"),JSON.stringify(t));const i=_t(_t({fit:"cover"},t),{},{trackId:this.getTrackId(),element:e});this._player?this._player.updateConfig(i):(e instanceof HTMLVideoElement?this._player=new lr(i):this._player=new mr(i),this._player.updateVideoTrack(this._mediaStreamTrack),this._player.onFirstVideoFrameDecoded=()=>{this.store.subscribe(this.getUserId(),"video",void 0,void 0,Date.now()),this.safeEmit(Qe.FIRST_FRAME_DECODED)},this._player.onVideoStateChanged=e=>{this.safeEmit(Qe.VIDEO_STATE_CHANGED,e)}),this._player.play(this.store.sessionId||void 0),this._videoVisibleTimer&&window.clearInterval(this._videoVisibleTimer),this._clearPreviousVideoVisibleStatus(),this._videoVisibleTimer=window.setInterval((()=>{try{const e=this.getVideoElementVisibleStatus();this.safeEmit(Qe.VIDEO_ELEMENT_VISIBLE_STATUS,e)}catch(e){}}),u("CHECK_VIDEO_VISIBLE_INTERVAL"))}stop(){this._player&&(this._videoVisibleTimer&&(window.clearInterval(this._videoVisibleTimer),this._videoVisibleTimer=null),this._clearPreviousVideoVisibleStatus(),this._player.destroy(),this._player=void 0,he.debug("[".concat(this.getTrackId(),"] stop video playback")))}getCurrentFrameData(){return this._player?this._player.getCurrentFrame():new ImageData(2,2)}updateMediaStreamTrackResolution(){di(this._originMediaStreamTrack).then((e=>{let[t,i]=e;this._videoHeight=i,this._videoWidth=t})).catch(K)}_updatePlayerSource(){he.debug("[".concat(this.getTrackId(),"] update player source track")),this._player&&this._player.updateVideoTrack(this._mediaStreamTrack)}getVideoElementVisibleStatus(){try{var e,t;const i=null==this||null===(e=this._player)||void 0===e?void 0:e.getContainerElement(),r={track:this,element:null==this||null===(t=this._player)||void 0===t?void 0:t.getVideoElement(),slot:null==i?void 0:i.parentElement},{element:s,slot:o}=r;if(this.isPlaying&&s instanceof HTMLVideoElement&&o instanceof HTMLElement){const e=ne.checkOneElementVisible(s),t=Object.assign({},e);if(t.visible!==this._previousVideoVisibleStatus){this._previousVideoVisibleStatus=t.visible;const e=le.reportApiInvoke(null,{tag:A.TRACER,name:I.REMOTE_VIDEO_TRACK_GET_VIDEO_VISIBLE,options:[this.getTrackId()]});t.visible?e.onSuccess("Video is visible"):e.onSuccess("Invisible because of ".concat(t.reason))}return t}return}catch(e){throw new T(E.GET_VIDEO_ELEMENT_VISIBLE_ERROR,e.message)}}pipe(e){if(this.processor===e)return e;if(e._source)throw new T(E.INVALID_OPERATION,"Processor ".concat(e.name," already piped, please call unpipe beforehand."));return this.unpipe(),this.processor=e,this.processor._source=this,e.updateInput({track:this._originMediaStreamTrack,context:this.processorContext}),e}unpipe(){if(!this.processor)return;const e=this.processor;this.processor._source=void 0,this.processor=void 0,e.reset()}bindProcessorDestinationEvents(){this.processorDestination.on(nt.ON_TRACK,(async e=>{e?e!==this._mediaStreamTrack&&(this._mediaStreamTrack=e,this._updatePlayerSource()):this._mediaStreamTrack!==this._originMediaStreamTrack&&(this._mediaStreamTrack=this._originMediaStreamTrack,this._updatePlayerSource())}))}unbindProcessorDestinationEvents(){this.processorDestination.removeAllListeners(nt.ON_TRACK)}_destroy(){super._destroy(),this.unbindProcessorDestinationEvents()}_onSei(e){this.emit(Xe.SEI_RECEIVED,e)}}).prototype,"play",[as],Object.getOwnPropertyDescriptor(hs.prototype,"play"),hs.prototype),ft(hs.prototype,"stop",[cs],Object.getOwnPropertyDescriptor(hs.prototype,"stop"),hs.prototype),ft(hs.prototype,"pipe",[ds],Object.getOwnPropertyDescriptor(hs.prototype,"pipe"),hs.prototype),ft(hs.prototype,"unpipe",[us],Object.getOwnPropertyDescriptor(hs.prototype,"unpipe"),hs.prototype),hs),ys=(ls=me({argsMap:(e,t)=>[e.getTrackId(),t],throttleTime:300}),ps=me({argsMap:(e,t)=>[e.getTrackId(),t]}),ms=me({argsMap:e=>[e.getTrackId()]}),gs=me({argsMap:e=>[e.getTrackId()]}),_s=me({argsMap:(e,t)=>[e.getTrackId(),t.name]}),vs=me({argsMap:e=>[e.getTrackId()]}),ft((fs=class extends Ts{get isPlaying(){return this._useAudioElement?ti.isPlaying(this.getTrackId()):this._source.isPlayed}get __className__(){return"RemoteAudioTrack"}constructor(e,t,i,r){super(e,t,i,r),vt(this,"trackMediaType","audio"),vt(this,"_source",void 0),vt(this,"_useAudioElement",!0),vt(this,"_volume",100),vt(this,"processorContext",void 0),vt(this,"processorDestination",void 0),vt(this,"_played",!1),vt(this,"_bypassWebAudio",!1),u("DISABLE_WEBAUDIO")?(this._source=new ai,this._bypassWebAudio=!0,this._useAudioElement=!0):(this._source=new xt(e,!0),u("REMOTE_AUDIO_TRACK_USES_WEB_AUDIO")&&(this._useAudioElement=!1)),this._source.once($e.RECEIVE_TRACK_BUFFER,(()=>{this.safeEmit(Qe.FIRST_FRAME_DECODED)})),this.processorContext=new ni(this._source.context,this.getTrackId(),"remote"),this.processorDestination=new oi(this.processorContext),this.bindProcessorDestinationEvents(),this._source.on($e.UPDATE_SOURCE,(()=>{this.processor&&this.processor.updateInput({node:this._source.processSourceNode,context:this.processorContext})}))}setAudioFrameCallback(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4096;if(!e)return this._source.removeAllListeners($e.ON_AUDIO_BUFFER),void this._source.stopGetAudioBuffer();this._source.startGetAudioBuffer(t),this._source.removeAllListeners($e.ON_AUDIO_BUFFER),this._source.on($e.ON_AUDIO_BUFFER,(t=>e(t)))}setVolume(e){this._volume=e,this._useAudioElement?ti.setVolume(this.getTrackId(),e):this._source.setVolume(e/100)}async setPlaybackDevice(e){if(!this._useAudioElement||!ye())throw new T(E.NOT_SUPPORTED,"your browser does not support setting the audio output device");await ti.setSinkID(this.getTrackId(),e)}getVolumeLevel(){return this._source.getAccurateVolumeLevel()}getStats(){b((()=>{he.warning("[deprecated] RemoteAudioTrack.getStats will be removed in the future, use AgoraRTCClient.getRemoteAudioStats instead")}),"remoteAudioTrackGetStatsWarning");return Q(this,Ke.GET_STATS)||_t({},rt)}play(){he.debug("[".concat(this.getTrackId(),"] start audio playback")),this._played=!0,this._useAudioElement?(he.debug("[".concat(this.getTrackId(),"] use audio element to play")),ti.play(this._mediaStreamTrack,this.getTrackId(),this._volume,this.store.sessionId||void 0)):this._source.play()}stop(){he.debug("[".concat(this.getTrackId(),"] stop audio playback")),this._played=!1,this._useAudioElement?ti.stop(this.getTrackId()):this._source.stop()}_destroy(){super._destroy(),this._played=!1,this.unbindProcessorDestinationEvents(),this._source.destroy()}_isFreeze(){return this._source.isFreeze}_updatePlayerSource(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];he.debug("[".concat(this.getTrackId(),"] update player source track")),e&&this._source.updateTrack(this._mediaStreamTrack),this._useAudioElement&&ti.updateTrack(this.getTrackId(),this._mediaStreamTrack)}pipe(e){if(this._bypassWebAudio)throw new T(E.NOT_SUPPORTED,"can not pipe extension when WebAudio disabled");if(this.processor===e)return e;if(e._source)throw new T(E.INVALID_OPERATION,"Processor ".concat(e.name," already piped, please call unpipe beforehand."));return this.unpipe(),this.processor=e,this.processor._source=this,e.updateInput({track:this._originMediaStreamTrack,node:this._source.processSourceNode,context:this.processorContext}),e}unpipe(){var e;if(this._bypassWebAudio)throw new T(E.NOT_SUPPORTED,"can not unpipe extension when WebAudio disabled");if(!this.processor)return;const t=this.processor;null===(e=this._source.processSourceNode)||void 0===e||e.disconnect(),this.processor._source=!1,this.processor=void 0,t.reset()}bindProcessorDestinationEvents(){this.processorDestination.on(nt.ON_TRACK,(async e=>{e?e!==this._mediaStreamTrack&&(this._mediaStreamTrack=e,this._updatePlayerSource(!1),this._source.processedNode=this._source.createMediaStreamSourceNode(e)):this._mediaStreamTrack!==this._originMediaStreamTrack&&(this._mediaStreamTrack=this._originMediaStreamTrack,this._updatePlayerSource())})),this.processorDestination.on(nt.ON_NODE,(e=>{this._source.processedNode=e;const t=!e;this._useAudioElement!==t&&(this._played?(this.stop(),this._useAudioElement=t,this.play()):this._useAudioElement=t)}))}unbindProcessorDestinationEvents(){this.processorDestination.removeAllListeners(nt.ON_TRACK),this.processorDestination.removeAllListeners(nt.ON_NODE)}}).prototype,"setVolume",[ls],Object.getOwnPropertyDescriptor(fs.prototype,"setVolume"),fs.prototype),ft(fs.prototype,"setPlaybackDevice",[ps],Object.getOwnPropertyDescriptor(fs.prototype,"setPlaybackDevice"),fs.prototype),ft(fs.prototype,"play",[ms],Object.getOwnPropertyDescriptor(fs.prototype,"play"),fs.prototype),ft(fs.prototype,"stop",[gs],Object.getOwnPropertyDescriptor(fs.prototype,"stop"),fs.prototype),ft(fs.prototype,"pipe",[_s],Object.getOwnPropertyDescriptor(fs.prototype,"pipe"),fs.prototype),ft(fs.prototype,"unpipe",[vs],Object.getOwnPropertyDescriptor(fs.prototype,"unpipe"),fs.prototype),fs);const Ss=new class extends S{get visibility(){return document.visibilityState}get lastHiddenTime(){return this._lastHiddenTime}get lastVisibleTime(){return this._lastVisibleTime}constructor(){super(),vt(this,"_lastHiddenTime",0),vt(this,"_lastVisibleTime",0),document.addEventListener("visibilitychange",(()=>{"hidden"===document.visibilityState?this._lastHiddenTime=performance.now():this._lastVisibleTime=performance.now(),he.debug("document visibility went ".concat(document.visibilityState)),this.emit("VISIBILITY_CHANGE",document.visibilityState)}))}};var ks=function(e){return e[e.ONE_BYTE=0]="ONE_BYTE",e[e.TWO_BYTE=1]="TWO_BYTE",e}(ks||{});class bs{constructor(){vt(this,"_sequence",0),vt(this,"_startTime",Date.now()),vt(this,"isUseOneByte",!0)}get startTime(){const e=Date.now()-this._startTime;return e<Math.pow(2,16)?e:(this._startTime+=Math.pow(2,16),this.startTime)}get sequence(){return this._sequence<Math.pow(2,32)?this._sequence++:(this._sequence-=Math.pow(2,32),this.sequence)}serialize(e){const t={commonPacketHeader:{length:0,reserved:0,extension:0,sequence:this.sequence},commonStreamHeader:this.startTime,extension:void 0,payload:e};if(e.byteLength>128){const i=new Uint8Array(4);i.set([1,0,0,0]);const r={id:0,length:4,data:i.buffer},s={profile:this.isUseOneByte?0:1,length:this.isUseOneByte?5:6,datas:[r]};t.commonPacketHeader.extension=1,t.extension=s,t.payload=this.compress(e),t.commonPacketHeader.length=8+(t.extension.length+2)+t.payload.byteLength}else t.commonPacketHeader.length=8+t.payload.byteLength;u("SHOW_DATASTREAM2_LOG")&&he.debug("send data header: ".concat(JSON.stringify(t.commonPacketHeader)));const i=new ArrayBuffer(t.commonPacketHeader.length),r=new Uint8Array(i),s=new DataView(i);let o=0;if(s.setUint16(o,t.commonPacketHeader.extension<<15|t.commonPacketHeader.reserved<<14|t.commonPacketHeader.length,!0),o+=2,s.setUint32(o,t.commonPacketHeader.sequence,!0),o+=4,s.setUint16(o,t.commonStreamHeader,!0),o+=2,t.extension){const e=this.serializeExtension(t.extension);r.set(new Uint8Array(e),o),o+=e.byteLength}if(r.set(new Uint8Array(t.payload),o),o+=t.payload.byteLength,o!==t.commonPacketHeader.length)throw Error("serialize error!");return i}deserialize(e){if(e.byteLength<4)return new ArrayBuffer(0);const t=new DataView(e);let i=0;const r=t.getUint16(i,!0);i+=2;const s={length:16383&r,reserved:(16384&r)>>14,extension:(32768&r)>>15,sequence:t.getUint16(i+2,!0)<<16|t.getUint16(i,!0)};let o,n;if(i+=4,u("SHOW_DATASTREAM2_LOG")&&he.debug("receive data header: ".concat(JSON.stringify(s))),t.getUint16(i,!0),i+=2,s.extension){n=this.deserializeExtension(e.slice(i)),i+=2+n.length,o=e.slice(i);let t=!1;if(n.datas.length>0){const e=n.datas.find((e=>0===e.id));if(e){t=1==(1&new DataView(e.data).getUint32(0,!0))}}o=t?this.decompress(o):o}else o=e.slice(8);return o}serializeExtension(e){const{profile:t,length:i,datas:r}=e,s=new ArrayBuffer(i+2),o=new Uint8Array(s),n=new DataView(s);let a=0;if(n.setUint8(a++,t),n.setUint8(a++,i),r.forEach((e=>{t?(n.setUint8(a++,e.id),n.setUint8(a++,e.length),o.set(new Uint8Array(e.data),a),a+=e.data.byteLength):(n.setUint8(a++,e.id|e.length<<4),o.set(new Uint8Array(e.data),a),a+=e.data.byteLength)})),a!==i+2)throw Error("serialize extension error, is ".concat(a,"!==").concat(i+2));return s}deserializeExtension(e){const t=new DataView(e);let i=0;const r=t.getUint8(i);i++;const s=t.getUint8(i);i++;const o=r===ks.TWO_BYTE,n=[],a=new DataView(e,2);let c=0;for(;c<s;){let e=0,t=0,i=new ArrayBuffer(0);o?(e=a.getUint8(c),c++,t=a.getUint8(c),c++):(e=15&a.getUint8(c),t=a.getUint8(c)>>4,c++),t>0&&(i=a.buffer.slice(c+2,c+2+t),c+=i.byteLength),n.push({id:e,length:t,data:i})}if(c!==s)throw Error("parse error");return{profile:r,length:s,datas:n}}decompress(e){return _e(new Uint8Array(e))}compress(e){return ve(new Uint8Array(e))}}class Is extends S{constructor(e,t){super(),vt(this,"_version",1),vt(this,"_type",3),vt(this,"_config",void 0),vt(this,"_originDataChannel",void 0),vt(this,"_dataStreamPacketHeader",new ArrayBuffer(4)),vt(this,"_dataStreamPacketHandler",void 0),vt(this,"_datachannelEventMap",new Map),this._config=e,t&&(this._originDataChannel=t,this._bandDataChannelEvents(t)),this._initPacketHeader(),this._dataStreamPacketHandler=new bs}get id(){return this._config.id}get ordered(){return this._config.ordered}get maxRetransmits(){return u("DATASTREAM_MAX_RETRANSMITS")}get metadata(){return this._config.metadata}get readyState(){var e,t;return null!==(e=null===(t=this._originDataChannel)||void 0===t?void 0:t.readyState)&&void 0!==e?e:"connecting"}get _originDataChannelId(){var e,t;return null!==(e=null===(t=this._originDataChannel)||void 0===t?void 0:t.id)&&void 0!==e?e:null}getChannelId(){return this.id}getConfig(){return this._config}_close(){this._originDataChannel&&(this._unbindDataChannelEvents(this._originDataChannel),this._originDataChannel=void 0)}async _waitTillOpen(){return new Promise(((e,t)=>{if(this._originDataChannel){"open"===this._originDataChannel.readyState&&e();const i=setTimeout((()=>{var e;t(new T(E.DATACHANNEL_CONNECTION_TIMEOUT,"Cannot create datachannel, id: ".concat(null===(e=this._originDataChannel)||void 0===e?void 0:e.id)))}),1e4);this._originDataChannel.onopen=()=>{clearTimeout(i),this._originDataChannel&&this._bandDataChannelEvents(this._originDataChannel),e()},this._originDataChannel.onerror=()=>{throw clearTimeout(i),new T(E.DATACHANNEL_CONNECTION_TIMEOUT)}}else t(new T(E.DATACHANNEL_CONNECTION_TIMEOUT,"cannot find dataChannel"))}))}_updateOriginDataChannel(e){this._originDataChannel=e,this._bandDataChannelEvents(e)}_initPacketHeader(){const e=new DataView(this._dataStreamPacketHeader);e.setUint16(0,this._version),e.setUint8(2,this._type),e.setUint8(3,this._config.id)}_bandDataChannelEvents(e){this._unbindDataChannelEvents(e),[mt.OPEN,mt.CLOSE,mt.ERROR].forEach((t=>{const i=()=>{this.emit(t)};this._datachannelEventMap.set(t,i),e.addEventListener(t,i)}))}_unbindDataChannelEvents(e){Array.from(this._datachannelEventMap.entries()).forEach((t=>{let[i,r]=t;e.removeEventListener(i,r)})),this._datachannelEventMap.clear()}}class As extends Is{constructor(e){super(e),vt(this,"_messageListener",void 0),this._messageListener=e=>{if(e.data.byteLength<this._dataStreamPacketHeader.byteLength)throw Error("invalid byteLength: the byte length must exceed "+this._dataStreamPacketHeader.byteLength);const t=e.data.slice(0,this._dataStreamPacketHeader.byteLength),i=new DataView(t).getUint8(3);if(i!==this.id)return void(u("SHOW_DATASTREAM2_LOG")&&he.debug("invalid datachannel id: ".concat(i," !== ").concat(this.id)));let r=e.data.slice(this._dataStreamPacketHeader.byteLength);r=this._dataStreamPacketHandler.deserialize(r),this.emit(mt.MESSAGE,r)}}_updateOriginDataChannel(e){super._updateOriginDataChannel(e),this._bandRemoteDataChannelEvents()}_close(){this._originDataChannel&&(this._originDataChannel.removeEventListener("message",this._messageListener),super._close())}_bandRemoteDataChannelEvents(){this._originDataChannel&&this._originDataChannel.addEventListener("message",this._messageListener)}}class ws extends Is{send(e){if(this._originDataChannel){let t=e;t=this._dataStreamPacketHandler.serialize(e);const i=new Uint8Array(this._dataStreamPacketHeader.byteLength+t.byteLength);i.set(new Uint8Array(this._dataStreamPacketHeader),0),i.set(new Uint8Array(t),this._dataStreamPacketHeader.byteLength),this._originDataChannel.send(i.buffer)}}}function Ds(){const e=new Blob([atob("ZnVuY3Rpb24gZShlKXtjb25zdCB0PW5ldyBEYXRhVmlldyhlLmRhdGEpO2lmKDA9PT10LmdldFVpbnQ4KDApJiYwPT09dC5nZXRVaW50OCgxKSYmMD09PXQuZ2V0VWludDgoMikmJjE9PT10LmdldFVpbnQ4KDMpJiY2PT09dC5nZXRVaW50OCg0KSl7bGV0IG49NixyPTAsbz0wO2Zvcig7MjU1PT09KG89dC5nZXRVaW50OChuKyspKTspcis9MjU1O3IrPW87Y29uc3QgYT1mdW5jdGlvbihlLHQsbil7bGV0IHI9bmV3IFVpbnQ4QXJyYXkoZSx0LG4pLG89W10sYT0wO2Zvcig7YTxuOylhKzM8biYmMD09PXJbYV0mJjA9PT1yW2ErMV0mJjM9PT1yW2ErMl0mJigwPT09clthKzNdfHwxPT09clthKzNdfHwyPT09clthKzNdfHwzPT09clthKzNdKT8oby5wdXNoKHJbYV0sclthKzFdLHJbYSszXSksYSs9NCk6KG8ucHVzaChyW2FdKSxhKyspO3JldHVybiBuZXcgVWludDhBcnJheShvKX0oZS5kYXRhLG4scik7cmV0dXJuIG5ldyBVaW50OEFycmF5KGEpfXJldHVybiBudWxsfWZ1bmN0aW9uIHQoZSx0KXtjb25zdCBuPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IG49W10scj0wO2Zvcig7cjx0OylyKzI8dCYmMD09PWVbcl0mJjA9PT1lW3IrMV0mJigwPT09ZVtyKzJdfHwxPT09ZVtyKzJdfHwyPT09ZVtyKzJdfHwzPT09ZVtyKzJdKT8obi5wdXNoKGVbcl0sZVtyKzFdLDMsZVtyKzJdKSxyKz0zKToobi5wdXNoKGVbcl0pLHIrKyk7cmV0dXJuIG5ldyBVaW50OEFycmF5KG4pfSh0KSxyPW4ubGVuZ3RoLG89TWF0aC5mbG9vcihyLzI1NSksYT1yJTI1NSxzPW5ldyBVaW50OEFycmF5KDYrbysxK3IrZS5ieXRlTGVuZ3RoKTtzWzBdPTAsc1sxXT0wLHNbMl09MCxzWzNdPTEsc1s0XT02LHNbNV09MTAxO2xldCBpPTA7Zm9yKDtpPG87KXNbNitpXT0yNTUsaSsrO3JldHVybiBzWzYraV09YSxpKysscy5zZXQobiw2K2kpLHMuc2V0KG5ldyBVaW50OEFycmF5KGUpLDYraStyKSxzLmJ1ZmZlcn1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIlNhZmFyaSIpPi0xJiYtMT09PW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiQ2hyb21lIikmJihzZWxmLm9ucnRjdHJhbnNmb3JtPW49Pntjb25zdCByPW4udHJhbnNmb3JtZXI7bGV0IG89W107ci5vcHRpb25zLnBvcnQub25tZXNzYWdlPWU9PntlLmRhdGEuc2VpJiZvLnB1c2goZS5kYXRhLnNlaSl9LHNlbGYucG9zdE1lc3NhZ2UoInN0YXJ0ZWQiKTtjb25zdCBhPXIucmVhZGFibGUuZ2V0UmVhZGVyKCkscz1yLndyaXRhYmxlLmdldFdyaXRlcigpOyJyeCI9PT1yLm9wdGlvbnMubmFtZT9mdW5jdGlvbiB0KG4pe2EucmVhZCgpLnRoZW4oKHI9PntpZighci5kb25lKXtpZihyLnZhbHVlIGluc3RhbmNlb2YgUlRDRW5jb2RlZFZpZGVvRnJhbWUpe2NvbnN0IHQ9ZShyLnZhbHVlKTt0JiZuLm9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZSh7c2VpOnR9KX1zLndyaXRlKHIudmFsdWUpLG4ub3B0aW9ucy5wb3J0LnBvc3RNZXNzYWdlKHt0cmFuc2Zvcm1lZDohMH0pLHQobil9fSkpfShyKToidHgiPT09ci5vcHRpb25zLm5hbWUmJmZ1bmN0aW9uIGUobil7YS5yZWFkKCkudGhlbigocj0+e2lmKCFyLmRvbmUpe2lmKHIudmFsdWUgaW5zdGFuY2VvZiBSVENFbmNvZGVkVmlkZW9GcmFtZSl7Y29uc3QgZT1vLnNoaWZ0KCk7ZSYmKHIudmFsdWUuZGF0YT10KHIudmFsdWUuZGF0YSxlKSl9cy53cml0ZShyLnZhbHVlKSxuLm9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZSh7dHJhbnNmb3JtZWQ6ITB9KSxlKG4pfX0pKX0ocil9LHNlbGYucG9zdE1lc3NhZ2UoInJlZ2lzdGVyZWQiKSk7Cg==")],{type:"text/javascript"});return setTimeout((()=>URL.revokeObjectURL(e)),0),new Worker(URL.createObjectURL(e))}const Cs=71,Rs=1,Ns=2,Os=1,Ms=2;var Ls=function(e){return e[e.AUDIO_LEVEL=1]="AUDIO_LEVEL",e[e.METADATA=2]="METADATA",e}(Ls||{});function Ps(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=e.getUint8(0);if(i!==Cs)return;const r=e.getUint16(1),s=Rs+Ns+r,o=new Uint8Array(e.byteLength-s);o.set(new Uint8Array(e.buffer,s,e.byteLength-s));const n={m:i,tlvLen:r,tlv:[],frame:o};let a=Rs+Ns;for(;a<s;){const i=e.getUint8(a),r=e.getUint16(a+Os),s=Os+Ms;if(i===Ls.AUDIO_LEVEL){let o=e.getUint8(a+s);for(let t=1;t<r;t++)o=o<<8|e.getUint8(a+s+t);n.tlv.push({tag:i,length:r,value:t?127^o>>1:127&o})}else if(i===Ls.METADATA){const t=new Uint8Array(r);for(let i=0;i<r;i++)t[i]=e.getUint8(a+s+i);n.tlv.push({tag:i,length:r,value:t})}a+=s+r}return n}const Vs=new Map;function xs(e,t){const{chunk:i,controller:r}=t;i.data=function(e,t,i){const r=i.byteLength,s=r+Os+Ms,o=Rs+Ns+s,n=new ArrayBuffer(e.byteLength+o),a=new DataView(n);a.setUint8(0,Cs),a.setUint16(1,s),a.setUint8(3,t),a.setUint16(4,r);for(let e=0;e<r;e++)a.setUint8(6+e,i[e]);const c=new Uint8Array(a.buffer);return c.set(new Uint8Array(e),o),c.buffer}(i.data,Ls.METADATA,e),r.enqueue(i)}async function Us(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Ee().supportWebRTCEncodedTransform)return void he.warning("browser not support audio encoded transform");if(Vs.has(e))return;if(!e.track)return;const i={track:e.track};if(l()){if(!e.createEncodedStreams)return void he.warning("browser not support createEncodedStreams() API");let s=null;try{s=e.createEncodedStreams()}catch(e){return void he.error("create audio-encoded-streams error",e&&e.message)}const o=new TransformStream({transform(s,o){i.controller||(i.controller=o),e.track&&e.track.id!==i.track.id&&(he.debug("audio track changed: ".concat(i.track.id," => ").concat(e.track.id)),i.track.removeEventListener("ended",r),i.track=e.track,i.track.addEventListener("ended",r));const n=t.metadata&&t.metadata();n?xs(n,{sender:e,chunk:s,controller:o}):o.enqueue(s)}});s.readable.pipeThrough(o).pipeTo(s.writable)}else if(c()){if("undefined"==typeof RTCRtpScriptTransform)return void he.warning("browser not support RTCRtpScriptTransform");const t=Ds(),s=new MessageChannel;await new Promise((e=>t.onmessage=t=>{"registered"===t.data&&e(void 0)}));const o=new RTCRtpScriptTransform(t,{name:"tx",port:s.port2},[s.port2]);e.transform=o,await new Promise((e=>t.onmessage=t=>{"started"===t.data&&e(void 0)})),s.port1.onmessage=t=>{var s;t.data.transformed&&e.track&&(null===(s=e.track)||void 0===s?void 0:s.id)!==i.track.id&&(he.debug("audio track changed: ".concat(i.track.id," => ").concat(e.track.id)),i.track.removeEventListener("ended",r),i.track=e.track,i.track.addEventListener("ended",r))},i.worker=t}function r(){if(e.track){if(this.id!==e.track.id)return;e.track.removeEventListener("ended",r)}const t=Vs.get(e);if(t){Vs.delete(e);try{var i,s;null===(i=t.controller)||void 0===i||i.terminate(),null===(s=t.worker)||void 0===s||s.terminate()}catch(e){he.warning(e&&e.message)}}}Vs.set(e,i),e.track.addEventListener("ended",r)}const Bs=127,Fs=1e-10,Hs=139/13;const Ws=new Map;function Gs(e,t,i){const r="".concat(e,"-").concat(t,"-").concat(i);let s=0;if(Ws.has(r))s=Ws.get(r);else{const o=.5;s=Math.log(function(e,t){const i=e-t;t<i&&(t=i);let r=1;for(let i=e,s=1;i>t;i--,s++)r=r*i/s;return r}(t,e))+e*Math.log(o)+(t-e)*Math.log(1-o)-Math.log(i)+i*e,Ws.set(r,s)}return s<Fs&&(s=Fs),s}function Ks(e,t,i){const r=t.length,s=e.length/r;let o=!1;for(let n=0,a=0;n<r;n++){let r=0;for(let t=a+s;a<t;a++)e[a]>i&&r++;t[n]!==r&&(t[n]=r,o=!0)}return o}window.cache=Ws;let zs=0;class js{constructor(e){vt(this,"id",void 0),vt(this,"immediates",[]),vt(this,"lastNonSilence",-1),vt(this,"immediateSpeechActivityScore",Fs),vt(this,"lastLevelChangedTime",Date.now()),vt(this,"levels",[]),vt(this,"longs",[]),vt(this,"longSpeechActivityScore",Fs),vt(this,"mediums",[]),vt(this,"mediumSpeechActivityScore",Fs),vt(this,"minLevel",0),vt(this,"nextMinLevel",0),vt(this,"nextMinLevelWindowLength",0),vt(this,"energyScore",0),this.id=e||"".concat(zs++),this.immediates.length=50,this.mediums.length=10,this.longs.length=1,this.levels.length=this.immediates.length}computeImmediates(){const e=this.immediates,t=this.levels,i=this.minLevel+Hs;let r=!1;for(let s=0;s<e.length;++s){let o=t[s];o<i&&(o=0);const n=Math.floor(o/Hs);e[s]!==n&&(e[s]=n,r=!0)}return r}computeLongs(){return Ks(this.mediums,this.longs,4)}computeMediums(){return Ks(this.immediates,this.mediums,7)}evaluateImmediateSpeechActivityScore(){this.immediateSpeechActivityScore=Gs(this.immediates[0],13,.78)}evaluateLongSpeechActivityScore(e){this.longSpeechActivityScore=Gs(this.longs[0],10,47),this.longSpeechActivityScore>Fs&&(this.lastNonSilence=e)}evaluateMediumSpeechActivityScore(){this.mediumSpeechActivityScore=Gs(this.mediums[0],5,24)}evaluateSpeechActivityScores(e){this.computeImmediates()&&(this.evaluateImmediateSpeechActivityScore(),this.computeMediums()&&(this.evaluateMediumSpeechActivityScore(),this.computeLongs()&&this.evaluateLongSpeechActivityScore(e)))}getLastLevelChangedTime(){return this.lastLevelChangedTime}getLevels(){return"[".concat([...this.levels].reverse().join(),"]")}getSpeechActivityScore(e){switch(e){case 0:return this.immediateSpeechActivityScore;case 1:return this.mediumSpeechActivityScore;case 2:return this.longSpeechActivityScore;default:throw new Error("interval "+e)}}levelChanged(e,t){if(this.lastLevelChangedTime<=t){this.lastLevelChangedTime=t;let i=e;return e<0&&(i=0),e>Bs&&(i=Bs),this.levels.unshift(i),this.levels.length>this.immediates.length&&this.levels.pop(),this.updateMinLevel(i),i>=this.minLevel+Hs?i:i/2}return-1}levelTimedOut(){this.levelChanged(0,this.lastLevelChangedTime)}updateMinLevel(e){if(0!==e){if(0===this.minLevel||this.minLevel>e)return this.minLevel=e,this.nextMinLevel=0,void(this.nextMinLevelWindowLength=0);if(0===this.nextMinLevel)return this.nextMinLevel=e,void(this.nextMinLevelWindowLength=1);if(this.nextMinLevel>e&&(this.nextMinLevel=e),this.nextMinLevelWindowLength++,this.nextMinLevelWindowLength>=750){let e=Math.sqrt(this.minLevel*this.nextMinLevel);e<0?e=0:e>Bs&&(e=Bs),this.minLevel=e,this.nextMinLevel=0,this.nextMinLevelWindowLength=0}}}}class Zs{constructor(e){vt(this,"algorithm",void 0),this.algorithm=e}execute(){let e=!this.algorithm;if(!e)try{const t=this.algorithm.runInDecisionMaker(this);t<=0?e=!0:setTimeout(this.execute.bind(this),t)}catch(t){e=!0}e&&this.algorithm&&this.algorithm.decisionMakerExited(this)}}class Ys{constructor(e,t,i){vt(this,"isDominant",void 0),vt(this,"energyRanking",void 0),vt(this,"energyScore",void 0),this.isDominant=e,this.energyRanking=t,this.energyScore=i}}class Js extends S{constructor(e){super(),vt(this,"dominantId",null),vt(this,"lastDecisionTime",0),vt(this,"lastLevelChangedTime",0),vt(this,"lastLevelIdleTime",0),vt(this,"relativeSpeechActivities",[]),vt(this,"speakers",new Map),vt(this,"enableSilence",!1),vt(this,"timeoutToSilenceInterval",0),vt(this,"decisionMaker",null),vt(this,"loudest",[]),vt(this,"numLoudestToTrack",3),vt(this,"energyExpireTimeMs",250),vt(this,"energyAlphaPct",50),this.timeoutToSilenceInterval=e,this.enableSilence=e>0,this.relativeSpeechActivities.length=3}setLoudestConfig(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:3,t=arguments.length>1?arguments[1]:void 0,i=arguments.length>2?arguments[2]:void 0;this.numLoudestToTrack=e,null!=t&&(this.energyExpireTimeMs=t),null!=i&&(this.energyAlphaPct=i),this.loudest.length>e&&this.loudest.splice(e)}getDominantSpeaker(){return this.dominantId}isAmongLoudest(e){return this.loudest.some((t=>t.id===e))}levelChanged(e,t){const i=Date.now(),r=this.getOrCreateSpeaker(e);this.lastLevelChangedTime<i&&(this.lastLevelChangedTime=i,this.maybeStartDecisionMaker());const s=r.levelChanged(t,i);return this.updateLoudestList(r,s,i)}runInDecisionMaker(e){if(this.decisionMaker!==e)return-1;if(this.lastDecisionTime>0){if(this.lastDecisionTime-this.lastLevelChangedTime>=15e3)return-1}return this._runInDecisionMaker()}decisionMakerExited(e){this.decisionMaker===e&&(this.decisionMaker=null)}destroy(){this.decisionMaker=null,this.loudest.length=0,this.speakers.clear(),this.removeAllListeners()}addSpeakers(e){e.forEach((e=>{this.speakers.has(e.id)||this.speakers.set(e.id,e)}))}removeSpeakers(e){e.forEach((e=>{this.speakers.delete(e.id)}))}getOrCreateSpeaker(e){let t=this.speakers.get(e);return t||(t=new js(e),this.speakers.set(e,t),this.maybeStartDecisionMaker()),t}updateLoudestList(e,t,i){const r=e.id===this.dominantId;if(t<0){let t=0;for(;t<this.loudest.length&&this.loudest[t]!==e;)++t;return new Ys(r,t,e.energyScore)}if(e.energyScore=Math.floor((this.energyAlphaPct*t+(100-this.energyAlphaPct)*e.energyScore+50)/100),0===this.numLoudestToTrack)return new Ys(r,0,e.energyScore);const s=i-this.energyExpireTimeMs;let o=0;for(;o<this.loudest.length;){const t=this.loudest[o];if(t.getLastLevelChangedTime()<s&&this.loudest.length>=this.numLoudestToTrack)this.loudest.splice(o,1);else if(t.id!==e.id)++o;else if(this.loudest.splice(o,1),this.loudest.length<this.numLoudestToTrack)break}let n=0;for(;n<this.loudest.length;){if(this.loudest[n].energyScore<e.energyScore)break;++n}return n<this.numLoudestToTrack&&(this.loudest.splice(n,0,e),this.loudest.length>this.numLoudestToTrack&&this.loudest.splice(this.numLoudestToTrack,1)),new Ys(r,n,e.energyScore)}maybeStartDecisionMaker(){!this.decisionMaker&&this.speakers.size>0&&(this.decisionMaker=new Zs(this),this.decisionMaker.execute())}makeDecision(e){let t=null,i=null;const r=this.speakers.size;let s;if(0===r)s=null;else if(1===r){const t=this.speakers.values().next().value;if(s=t.id,this.enableSilence){t.evaluateSpeechActivityScores(e);e-t.lastNonSilence>this.timeoutToSilenceInterval&&(s=null)}}else{let t=null==this.dominantId?null:this.speakers.get(this.dominantId);if(null==t){const e=this.speakers.entries().next();s=e.value[0],t=e.value[1]}else s=t.id;null!=t&&t.evaluateSpeechActivityScores(e);const i=this.relativeSpeechActivities;let r=2;for(const o of this.speakers.entries()){const[n,a]=o;if(a===t)continue;a.evaluateSpeechActivityScores(e);for(let e=0;e<i.length;++e){const r=null==t?Fs:t.getSpeechActivityScore(e);i[e]=Math.log(a.getSpeechActivityScore(e)/r)}const c=i[0],d=i[1],u=i[2];c>3&&d>2&&u>0&&d>r&&(r=d,s=n)}if(this.enableSilence&&null!=t&&s===t.id){e-t.lastNonSilence>this.timeoutToSilenceInterval&&(s=null)}}null==s&&!this.enableSilence||s===this.dominantId||(t=this.dominantId,this.dominantId=s,i=this.dominantId),null==i&&!this.enableSilence||i===t||this.emit("ActiveSpeakerChanged",i)}_runInDecisionMaker(){const e=Date.now(),t=300-(e-this.lastLevelIdleTime);let i=0;t<=0?(0!==this.lastLevelIdleTime&&this.timeoutIdleLevels(e),this.lastLevelIdleTime=e):i=t;let r=300-(e-this.lastDecisionTime);return r<=0&&(this.lastDecisionTime=e,this.makeDecision(e),r=300-(Date.now()-e)),r>0&&i>r&&(i=r),i}timeoutIdleLevels(e){const t=[];for(const i of this.speakers.values()){const r=e-i.getLastLevelChangedTime();36e5<r&&(null==this.dominantId||i.id!==this.dominantId)?t.push(i.id):300<r&&i.levelTimedOut()}t.forEach((e=>this.speakers.delete(e)))}}const Xs=new Map;let qs=null,Qs=null;const $s=3;let eo=[];function to(e,t){let i=Xs.get(e);if(i||(i=function(e){const t=new js;return Xs.set(e,t),qs||(qs=new Js(u("TOPN_SILENCE_THRESHOLD")||500),qs.on("ActiveSpeakerChanged",(e=>{null!=e&&(Qs=e)}))),qs.addSpeakers([t]),t}(e)),Xs.size<=$s)return{selected:!0,speaker:i};if(!qs)throw new Error("no active speaker detector");qs.levelChanged(i.id,t),eo=qs.loudest.map((e=>e.id)),Qs&&!eo.includes(Qs)&&eo.length>=$s&&eo.pop();return{selected:eo.includes(i.id)||i.id===Qs,speaker:i}}const io=1e3,ro=40,so=new Map,oo=new Map;class no{get samples(){return this.actives+this.inactives}get activeRate(){return this.actives/this.samples}constructor(e,t){vt(this,"id",void 0),vt(this,"track",void 0),vt(this,"score",0),vt(this,"active",!0),vt(this,"muted",!1),vt(this,"timer",0),vt(this,"actives",0),vt(this,"inactives",0),this.id=e,this.track=t,this.setActive(so.size<3)}autoCheckActive(){this.autoSetActive(),this.autoAdjustActive(),this.resetTimer(),this.actives=0,this.inactives=0}autoSetActive(){const e=this.active;this.active=this.activeRate>=.8;const{actives:t,inactives:i}=function(){const e=[],t=[];return Array.from(so.values()).forEach((i=>{i.active?e.push(i):t.push(i)})),{actives:e,inactives:t}}();if(t.length>3){let e;t.forEach((t=>{(!e||e.score>t.score)&&(e=t)})),e&&e.setActive(!1)}if(t.length<3&&i.length>0){let t;i.forEach((e=>{(!t||t.score<e.score)&&e.id!==this.id&&(t=e)})),t&&e&&!this.active&&(t.samples>ro&&t.activeRate-this.activeRate>.4?t.setActive(!0):this.active=!0)}this.setMuted(!this.active)}setActive(e){this.active=e,this.resetTimer(),this.setMuted(!e)}autoAdjustActive(){this.active?this.autoSwitchToInactive():this.autoSwitchToActive()}autoSwitchToActive(){const e=function(e){let t;return Array.from(so.values()).forEach((i=>{!i.active||i.id===e||i.samples<ro||(!t||i.score<t.score)&&(t=i)})),t}(this.id);e&&this.activeRate-e.activeRate>.4&&(e.setActive(!1),this.setActive(!0))}autoSwitchToInactive(){const e=function(e){let t;return Array.from(so.values()).forEach((i=>{i.active||i.id===e||i.samples<ro||(!t||i.score>t.score)&&(t=i)})),t}(this.id);e&&e.activeRate-this.activeRate>.4&&(e.setActive(!0),this.setActive(!1))}addSample(e){e?this.actives+=1:this.inactives+=1,this.samples>66.66666666666667&&this.autoCheckActive()}setMuted(e){this.track&&(this.track.enabled=!e,this.muted=e)}resetTimer(){this.clearTimer(),this.timer=window.setTimeout((()=>{if(0!==this.samples)return this.samples<50?this.resetTimer():void this.autoCheckActive()}),io)}clearTimer(){this.timer&&(clearTimeout(this.timer),this.timer=0)}}let ao;function co(e,t,i){const r=so.get(e)||new no(e,t);return r.score=i,so.set(e,r),function(e){if(oo.set(e,!0),!ao)return void(ao=Date.now());const t=Date.now();t-ao>1e3&&(oo.get(e)?oo.set(e,!1):(uo(e),oo.delete(e)),ao=t)}(e),r}function uo(e){const t=so.get(e);t&&(so.delete(e),t.clearTimer())}const ho=new Map,lo=new Map;async function po(e){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Ee().supportWebRTCEncodedTransform)return void he.warning("browser not support audio encoded transform");if(ho.has(e))return;const r={track:e.track};if(l()){if(!e.createEncodedStreams)return void he.warning("browser not support createEncodedStreams() API");se(t.CHROME,87,116)||(i.enableTopn=!1);let o=null;try{o=e.createEncodedStreams()}catch(e){return void he.error("create audio-encoded-streams error",e&&e.message)}const n=new TransformStream({transform(t,o){r.controller||(r.controller=o),e.track&&e.track.id!==r.track.id&&(he.debug("audio track changed: ".concat(r.track.id," => ").concat(e.track.id)),r.track.removeEventListener("ended",s),r.track=e.track,r.track.addEventListener("ended",s)),i.enableTopn?function(e,t,i){var r;const s=Ps(new DataView(t.data));if(!s)return i.enqueue(t);const o=e.track.id;lo.set(o,e.track);const n=null===(r=s.tlv.find((e=>e.tag===Ls.AUDIO_LEVEL)))||void 0===r?void 0:r.value;let a=0;"number"==typeof n&&(a=127-n);const c=Math.round(Math.pow(10,a/60)-1),{selected:d,speaker:u}=to(e,c),h=co(o,e.track,u.energyScore);h.addSample(d),h.active&&(t.data=s.frame.buffer,i.enqueue(t))}(e,t,o):i.enableMetadata?function(e,t,i){const r=Ps(new DataView(e.data));if(!r)return t.enqueue(e);const s=r.tlv.find((e=>e.tag===Ls.METADATA));s&&i&&s.value instanceof Uint8Array&&i(s.value),e.data=r.frame.buffer,t.enqueue(e)}(t,o,i.onMetadata):o.enqueue(t)}});o.readable.pipeThrough(n).pipeTo(o.writable)}else if(c()){if("undefined"==typeof RTCRtpScriptTransform)return void he.warning("browser not support RTCRtpScriptTransform");const t=Ds(),i=new MessageChannel;await new Promise((e=>t.onmessage=t=>{"registered"===t.data&&e(void 0)}));const o=new RTCRtpScriptTransform(t,{name:"rx",port:i.port2},[i.port2]);e.transform=o,await new Promise((e=>t.onmessage=t=>{"started"===t.data&&e(void 0)})),i.port1.onmessage=t=>{var i;t.data.transformed&&e.track&&(null===(i=e.track)||void 0===i?void 0:i.id)!==r.track.id&&(he.debug("audio track changed: ".concat(r.track.id," => ").concat(e.track.id)),r.track.removeEventListener("ended",s),r.track=e.track,r.track.addEventListener("ended",s))},r.worker=t}function s(){e.track.removeEventListener("ended",s),function(e){const t=ho.get(e);if(t){!function(e){const t=Xs.get(e);t&&(Xs.delete(e),qs&&(qs.removeSpeakers([t]),0===Xs.size&&(qs.destroy(),qs=null)))}(e),uo(e.track.id),ho.delete(e);try{var i,r;null===(i=t.controller)||void 0===i||i.terminate(),null===(r=t.worker)||void 0===r||r.terminate()}catch(e){he.warning(e&&e.message)}}}(e)}ho.set(e,r),e.track.addEventListener("ended",s)}function mo(e){const t=new DataView(e.data);if(0===t.getUint8(0)&&0===t.getUint8(1)&&0===t.getUint8(2)&&1===t.getUint8(3)&&6===t.getUint8(4)){let i=6,r=0,s=0;for(;255===(s=t.getUint8(i++));)r+=255;r+=s;const o=function(e,t,i){let r=new Uint8Array(e,t,i),s=[],o=0;for(;o<i;)o+3<i&&0===r[o]&&0===r[o+1]&&3===r[o+2]&&(0===r[o+3]||1===r[o+3]||2===r[o+3]||3===r[o+3])?(s.push(r[o],r[o+1],r[o+3]),o+=4):(s.push(r[o]),o++);return new Uint8Array(s)}(e.data,i,r);return new Uint8Array(o)}return null}function go(e,t){const i=function(e){const t=e.length;let i=[],r=0;for(;r<t;)r+2<t&&0===e[r]&&0===e[r+1]&&(0===e[r+2]||1===e[r+2]||2===e[r+2]||3===e[r+2])?(i.push(e[r],e[r+1],3,e[r+2]),r+=3):(i.push(e[r]),r++);return new Uint8Array(i)}(t),r=i.length,s=Math.floor(r/255),o=r%255,n=new Uint8Array(6+s+1+r+e.byteLength);n[0]=0,n[1]=0,n[2]=0,n[3]=1,n[4]=6,n[5]=101;let a=0;for(;a<s;)n[6+a]=255,a++;return n[6+a]=o,a++,n.set(i,6+a),n.set(new Uint8Array(e),6+a+r),n.buffer}const _o=new Map;async function vo(e,t){if(!Ee().supportWebRTCEncodedTransform)return void he.warning("browser not support video encoded transform");if(_o.has(e))return;if(!e.track)return;const i={track:e.track};if(l()){if(!e.createEncodedStreams)return void he.warning("browser not support createEncodedStreams() API");let s=null;try{s=e.createEncodedStreams()}catch(e){return void he.error("create video-encoded-streams error",e&&e.message)}const o=[];t.on("sei-to-send",(e=>{o.push(e)}));const n=new TransformStream({transform(t,s){i.controller||(i.controller=s),e.track&&e.track.id!==i.track.id&&(he.debug("video track changed: ".concat(i.track.id," => ").concat(e.track.id)),i.track.removeEventListener("ended",r),i.track=e.track,i.track.addEventListener("ended",r));const n=o.shift();n&&(t.data=go(t.data,n)),s.enqueue(t)}});s.readable.pipeThrough(n).pipeTo(s.writable)}else{if(!c())return;{if("undefined"==typeof RTCRtpScriptTransform)return void he.warning("browser not support RTCRtpScriptTransform");const s=Ds(),o=new MessageChannel;await new Promise((e=>s.onmessage=t=>{"registered"===t.data&&e(void 0)}));const n=new RTCRtpScriptTransform(s,{name:"tx",port:o.port2},[o.port2]);e.transform=n,await new Promise((e=>s.onmessage=t=>{"started"===t.data&&e(void 0)})),t.on("sei-to-send",(e=>{o.port1.postMessage({sei:e})})),o.port1.onmessage=t=>{var s;t.data.transformed&&e.track&&(null===(s=e.track)||void 0===s?void 0:s.id)!==i.track.id&&(he.debug("video track changed: ".concat(i.track.id," => ").concat(e.track.id)),i.track.removeEventListener("ended",r),i.track=e.track,i.track.addEventListener("ended",r))},i.worker=s}}function r(){if(e.track){if(this.id!==e.track.id)return;e.track.removeEventListener("ended",r)}const t=_o.get(e);if(t){_o.delete(e);try{var i,s;null===(i=t.controller)||void 0===i||i.terminate(),null===(s=t.worker)||void 0===s||s.terminate()}catch(e){he.warning(e&&e.message)}}}_o.set(e,i),e.track.addEventListener("ended",r)}const fo=new Map;async function To(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Ee().supportWebRTCEncodedTransform)return void he.warning("browser not support video encoded transform");if(!e.track)return;if(fo.has(e)){const i=fo.get(e);return void(i&&(i.onSei=t.onSei))}const i={track:e.track,onSei:t.onSei};if(l()){if(!e.createEncodedStreams)return void he.warning("browser not support createEncodedStreams() API");let t=null;try{t=e.createEncodedStreams()}catch(e){return void he.error("create video-encoded-streams error",e&&e.message)}const s=new TransformStream({transform(t,s){i.controller||(i.controller=s),e.track&&e.track.id!==i.track.id&&(he.debug("video track changed: ".concat(i.track.id," => ").concat(e.track.id)),i.track.removeEventListener("ended",r),i.track=e.track,i.track.addEventListener("ended",r));const o=mo(t);o&&i.onSei&&i.onSei(o),s.enqueue(t)}});t.readable.pipeThrough(s).pipeTo(t.writable)}else if(c()){if("undefined"==typeof RTCRtpScriptTransform)return void he.warning("browser not support RTCRtpScriptTransform");const t=Ds(),s=new MessageChannel;await new Promise((e=>t.onmessage=t=>{"registered"===t.data&&e(void 0)}));const o=new RTCRtpScriptTransform(t,{name:"rx",port:s.port2},[s.port2]);e.transform=o,await new Promise((e=>t.onmessage=t=>{"started"===t.data&&e(void 0)})),s.port1.onmessage=t=>{var s;t.data.transformed&&e.track&&(null===(s=e.track)||void 0===s?void 0:s.id)!==i.track.id?(he.debug("video track changed: ".concat(i.track.id," => ").concat(e.track.id)),i.track.removeEventListener("ended",r),i.track=e.track,i.track.addEventListener("ended",r)):t.data.sei&&i.onSei&&i.onSei(t.data.sei)},i.worker=t}function r(){if(e.track){if(this.id!==e.track.id)return;e.track.removeEventListener("ended",r)}!function(e){const t=fo.get(e);if(t){fo.delete(e);try{var i,r;null===(i=t.controller)||void 0===i||i.terminate(),null===(r=t.worker)||void 0===r||r.terminate()}catch(e){he.warning(e&&e.message)}}}(e)}fo.set(e,i),e.track.addEventListener("ended",r)}Te();export{Se as AUDIO_CONTEXT_EVENT,Le as AUDIO_ENCODER_CONFIG_SETTINGS,et as AUDIO_TRACK_EVENT,ni as AudioProcessorContext,oi as AudioProcessorDestination,$e as AudioSourceEvents,cr as BufferSourceAudioTrack,qr as CameraVideoTrack,tt as DEFAULT_LOCAL_AUDIO_TRACK_STATS,it as DEFAULT_LOCAL_VIDEO_TRACK_STATS,st as DEFAULT_NETWORK_QUALITY_STATS,rt as DEFAULT_REMOTE_AUDIO_TRACK_STATS,ot as DEFAULT_REMOTE_VIDEO_TRACK_STATS,Is as DataChannel,mt as DataChannelEvents,Yt as DeviceManager,dt as DeviceManagerEvent,ct as DeviceManagerState,Wt as HAS_GUM_AUDIO,Gt as HAS_GUM_VIDEO,nr as LocalAudioTrack,ws as LocalDataChannel,Et as LocalTrack,qe as LocalTrackEvents,Xr as LocalVideoTrack,pt as MediaElementNumStatus,ht as MediaElementStatus,ar as MicrophoneAudioTrack,dr as MixingAudioTrack,at as PROCESSOR_CONTEXT_EVENTS,nt as PROCESSOR_DESTINATION_EVENTS,ys as RemoteAudioTrack,As as RemoteDataChannel,Je as RemoteStreamFallbackType,Ye as RemoteStreamType,Ts as RemoteTrack,Qe as RemoteTrackEvents,Es as RemoteVideoTrack,Ht as SAFARI_GLOBAL_GUM_LOCK,De as SUPPORT_720P_AUTO_CONFIG_LIST,Ce as SUPPORT_SCREEN_ENCODER_CONFIG_LIST,Re as SUPPORT_SVC_CONFIG_LIST,we as SUPPORT_VIDEO_ENCODER_CONFIG_LIST,Ze as StreamType,Tt as Track,Xe as TrackEvents,ze as TrackHint,Ke as TrackInternalEvent,si as VideoProcessorContext,ri as VideoProcessorDestination,lt as VideoState,Ve as __TRACK_LIST__,xe as addTrack,kt as audioContextState,ti as audioElementPlayCenter,Rt as audioTimerLoop,qt as autoPlayGestureEventEmitter,fi as blob2Uint8Array,di as checkMediaStreamTrackResolution,ii as checkTrackState,es as createBufferSourceAudioTrack,rs as createCameraVideoTrack,Qr as createCustomAudioTrack,is as createCustomVideoTrack,ss as createMicrophoneAndCameraTracks,$r as createMicrophoneAudioTrack,ts as createMixingAudioTrack,os as createScreenVideoTrack,Dt as decodeAudioData,ye as detectSupportAudioElementSetSinkId,Jt as deviceManager,vi as emptyImage2TypedArray,_i as frameData2CryptoBuffer,It as getAudioContext,Pe as getAudioEncoderConfiguration,pi as getBitrateConstrainRange,mi as getBitrateFromResAndFps,Ee as getCompatibility,ui as getConstraintsFromCameraConfig,li as getConstraintsFromMicrophoneConfig,hi as getConstraintsFromScreenConfig,Ft as getElectronScreenSources,Ut as getElectronScreenStream,Bt as getElectronScreenStreamByUserSelect,Kt as getLocalStream,gi as getOriginSenderConfig,Me as getScalabilityConfiguration,Oe as getScreenEncoderConfiguration,Ot as getSilenceAudioTrack,Lt as getSilenceSamplesDuration,Ti as getStaticTrackStream,Ne as getVideoEncoderConfiguration,jt as handleGetUserMediaError,At as hasAudioContext,Us as interceptLocalAudioFrame,vo as interceptLocalVideoFrame,po as interceptRemoteAudioFrame,To as interceptRemoteVideoFrame,Fe as isAudioEncoderConfiguration,We as isAudioEncoderConfigurationOrPreset,ut as isBeautyEffectOptions,je as isLowStreamParameter,Ge as isScreenSourceType,Be as isVideoEncoderConfiguration,He as isVideoEncoderConfigurationOrPreset,wt as polyfillAudioNode,Ue as removeTrack,Qt as requestAutoplayGesture,Mt as silenceScriptProcessHandler,Te as updateAgoraRTCCompatibility,Ss as visibilityWatcher};