@agora-js/media 4.24.3-100 → 4.24.3-300
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AgoraRTC_N-media.esm.mjs +2 -2
- package/AgoraRTC_N-media.js +2 -2
- package/media.d.ts +143 -0
- package/package.json +3 -3
- package/rtc-sdk-media_en.d.ts +65 -0
package/AgoraRTC_N-media.esm.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* AgoraWebSDK_N-v4.24.3-
|
|
2
|
+
* AgoraWebSDK_N-v4.24.3-300-0-g6825f6f73-dirty Copyright AgoraInc.
|
|
3
3
|
*/
|
|
4
4
|
|
|
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,isAboveSafari15_4 as l,isChrome as p,isEdge as m,isMobile as g,isBelowChrome as _,isAboveEdge as f,isAboveOpera as T,checkValidConstrainLong as v,checkValidNumber as E,checkValidBoolean as y,checkValidEnum as S,AgoraRTCError as b,AgoraRTCErrorCode as k,isEmpty as I,EventEmitter as A,getRandomString as R,runOnce as w,AgoraAPIName as C,AgoraAPITag as D,PromiseMutex as N,emitAsPromiseNoResponse as M,removeItemFromList as O,isIOS as L,isIpadOS as P,wait as V,showElectronSelectSourceWindow as x,getElectronInstance as U,isElectron as Z,recursiveMerge as W,isAndroid as F,isHarmonyOS as G,detectSecureContext as B,isAndroidChromium as K,domLoadedPromise as H,isIOS15 as Y,emitAsPromise as X,noop as z,isLegacyChrome as j,constrainLongToNumber as Q,hexToBytes as J,md5 as q,atom as $,emitAsInvokerNoResponse as ee,isIOS16 as te,retryable as ie,isInPage as re,sumArray as se,getOSWithVersion as oe,isAboveIOS15_1 as ne,jsonClone as ae,isBetweenBrowser as ce,isWindows as de,elementVisibleChecker as ue,safeCloneJson as he,isAboveIOS15_2 as le,isWechatBrowser as pe}from"@agora-js/shared";export{isElectron}from"@agora-js/shared";import{logger as me,report as ge,AgoraRTCEventUploadType as _e,apiInvoke as fe}from"@agora-js/report";import Te from"axios";const ve={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,supportSuppressLocalAudioPlayback:!1,supportRestrictOwnAudio:!1};function Ee(){const p=e();ve.getDisplayMedia=function(e){if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia)return!0;return!1}(),ve.getStreamFromExtension=p.name===t.CHROME&&Number(p.version)>34,ve.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}(),ve.supportMinBitrate=p.name===t.CHROME||p.name===t.EDGE,ve.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)}(),p.name===t.SAFARI&&(Number(p.version)>=14?ve.supportDualStream=!0:ve.supportDualStream=!1),ve.webAudioMediaStreamDest=function(){const i=e();if(i.name===t.SAFARI&&Number(i.version)<12)return!1;return!0}(),ve.supportReplaceTrack=function(){if(!window.RTCRtpSender)return!1;if("function"==typeof RTCRtpSender.prototype.replaceTrack)return!0;return!1}(),ve.supportWebGL="undefined"!=typeof WebGLRenderingContext,ve.supportRequestFrame=!!window.CanvasCaptureMediaStreamTrack,i()||(ve.webAudioWithAEC=!0),ve.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}(),ve.supportDataChannel=function(){if(s(76)||o(68)||n(14))return!0;return!1}(),ve.supportPCSetConfiguration=function(){const e=window.RTCPeerConnection;return!h()&&!!e&&e.prototype.setConfiguration instanceof Function}(),ve.supportWebRTCEncodedTransform=s(87)||l()||o(117),ve.supportWebRTCInsertableStream=function(){const i=e();return(i.name===t.CHROME||i.name===t.EDGE)&&Number(i.version)>=94&&"MediaStreamTrackGenerator"in window&&"MediaStreamTrackProcessor"in window}(),ve.supportRequestVideoFrameCallback=function(){if("requestVideoFrameCallback"in HTMLVideoElement.prototype)return!0;return!1}(),ve.supportWebCrypto="undefined"!=typeof window&&void 0!==window.crypto&&void 0!==window.crypto.subtle,ve.supportSuppressLocalAudioPlayback=Ne(),ve.supportRestrictOwnAudio=Me(),r((()=>{ve.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"))}(),me.debug("browser ua: ",navigator.userAgent),me.info("browser info: ",p),me.info("browser compatibility: ",ve)}))}function ye(){return ve}function Se(){return"setSinkId"in HTMLAudioElement.prototype&&(!u("RESTRICTION_SET_PLAYBACK_DEVICE")||(p()||m())&&!g())}function be(){return!ve.supportUnifiedPlan||u("CHROME_FORCE_PLAN_B")&&i()}function ke(){return u("ENABLE_JOIN_V4")}function Ie(e){return!(h()||_(87)||be())&&(!!u("ENABLE_PRE_SUB")||!(null==e||!e.autoSubscribe||u("FORCE_DISABLE_AUTO_SUB")))}function Ae(e){return!be()&&!u("USE_NEW_TOKEN")&&(!!u("ENABLE_PREALLOC_PC")||!(null==e||!e.autoSubscribe||u("FORCE_DISABLE_AUTO_SUB")))}function Re(e){return u("ENABLE_INSTANT_VIDEO")?u("ENABLE_INSTANT_VIDEO"):!(null==e||!e.autoSubscribe||u("FORCE_DISABLE_AUTO_SUB"))}function we(){return!!u("FORCE_ENABLE_AUT_CC")||!be()&&(!!u("ENABLE_AUT_CC")||void 0)}function Ce(){return!!u("FORCE_ENABLE_AUT_CC")||!be()&&(!!u("ENABLE_AUT_FEEDBACK")||void 0)}function De(){return navigator.mediaDevices&&"getSupportedConstraints"in navigator.mediaDevices}function Ne(){if(De()){const e=navigator.mediaDevices.getSupportedConstraints();return!(!("suppressLocalAudioPlayback"in e)||!e.suppressLocalAudioPlayback)}return s(141)||f(141)||T(141)}function Me(){if(De()){const e=navigator.mediaDevices.getSupportedConstraints();return!(!("restrictOwnAudio"in e)||!e.restrictOwnAudio)}return s(141)||f(141)||T(125)}let Oe=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 Le(e,t,i){return{sampleRate:e,stereo:t,bitrate:i}}function Pe(e,t,i,r,s){return{width:e,height:t,frameRate:i,bitrateMin:r,bitrateMax:s}}function Ve(e,t,i,r,s){return{width:{max:e},height:{max:t},frameRate:i,bitrateMin:r,bitrateMax:s}}function xe(e,t){return{numSpatialLayers:e,numTemporalLayers:t}}const Ue={"90p":Pe(160,90),"90p_1":Pe(160,90),"120p":Pe(160,120,15,30,65),"120p_1":Pe(160,120,15,30,65),"120p_3":Pe(120,120,15,30,50),"120p_4":Pe(212,120),"180p":Pe(320,180,15,30,140),"180p_1":Pe(320,180,15,30,140),"180p_3":Pe(180,180,15,30,100),"180p_4":Pe(240,180,15,30,120),"240p":Pe(320,240,15,40,200),"240p_1":Pe(320,240,15,40,200),"240p_3":Pe(240,240,15,40,140),"240p_4":Pe(424,240,15,40,220),"360p":Pe(640,360,15,80,400),"360p_1":Pe(640,360,15,80,400),"360p_3":Pe(360,360,15,80,260),"360p_4":Pe(640,360,30,80,600),"360p_6":Pe(360,360,30,80,400),"360p_7":Pe(480,360,15,80,320),"360p_8":Pe(480,360,30,80,490),"360p_9":Pe(640,360,15,80,800),"360p_10":Pe(640,360,24,80,800),"360p_11":Pe(640,360,24,80,1e3),"480p":Pe(640,480,15,100,500),"480p_1":Pe(640,480,15,100,500),"480p_2":Pe(640,480,30,100,1e3),"480p_3":Pe(480,480,15,100,400),"480p_4":Pe(640,480,30,100,750),"480p_6":Pe(480,480,30,100,600),"480p_8":Pe(848,480,15,100,610),"480p_9":Pe(848,480,30,100,930),"480p_10":Pe(640,480,10,100,400),"720p":Pe(1280,720,15,120,1130),"720p_auto":Pe(1280,720,30,900,3e3),"720p_1":Pe(1280,720,15,120,1130),"720p_2":Pe(1280,720,30,120,2e3),"720p_3":Pe(1280,720,30,120,1710),"720p_5":Pe(960,720,15,120,910),"720p_6":Pe(960,720,30,120,1380),"1080p":Pe(1920,1080,15,120,2080),"1080p_1":Pe(1920,1080,15,120,2080),"1080p_2":Pe(1920,1080,30,120,3e3),"1080p_3":Pe(1920,1080,30,120,3150),"1080p_5":Pe(1920,1080,60,120,4780),"1440p":Pe(2560,1440,30,120,4850),"1440p_1":Pe(2560,1440,30,120,4850),"1440p_2":Pe(2560,1440,60,120,7350),"4k":Pe(3840,2160,30,120,8910),"4k_1":Pe(3840,2160,30,120,8910),"4k_3":Pe(3840,2160,60,120,13500)},Ze={"480p":Ve(640,480,5),"480p_1":Ve(640,480,5),"480p_2":Ve(640,480,30),"480p_3":Ve(640,480,15),"720p":Ve(1280,720,5),"720p_auto":Pe(1280,720,30,900,3e3),"720p_1":Ve(1280,720,5),"720p_2":Ve(1280,720,30),"720p_3":Ve(1280,720,15),"1080p":Ve(1920,1080,5),"1080p_1":Ve(1920,1080,5),"1080p_2":Ve(1920,1080,30),"1080p_3":Ve(1920,1080,15)},We={"1SL1TL":xe(1,1),"3SL3TL":xe(3,3),"2SL3TL":xe(2,3)};function Fe(e){return e||(e="480p_1"),"string"==typeof e?Object.assign({},Ue[e]):e}function Ge(e){return"string"==typeof e?Object.assign({},Ze[e]):e}function Be(e){return"string"==typeof e?Object.assign({},We[e]):e}const Ke={speech_low_quality:Le(16e3,!1),speech_standard:Le(32e3,!1,18),music_standard:Le(48e3,!1),standard_stereo:Le(48e3,!0,56),high_quality:Le(48e3,!1,128),high_quality_stereo:Le(48e3,!0,192)};function He(e){return"string"==typeof e?Object.assign({},Ke[e]):e}const Ye=[];function Xe(e){Ye.includes(e)||Ye.push(e)}function ze(e){const t=Ye.indexOf(e);-1!==t&&Ye.splice(t,1)}function je(){return Ye.some((e=>function(e){return"__className__"in e&&"MicrophoneAudioTrack"===e.__className__}(e)))}function Qe(e){return v(e.width,"config.width"),v(e.height,"config.height"),void 0!==e.frameRate&&v(e.frameRate,"config.frameRate"),void 0!==e.bitrateMax&&E(e.bitrateMax,"config.bitrateMax"),void 0!==e.bitrateMin&&E(e.bitrateMin,"config.bitrateMin"),!0}function Je(e){return void 0!==e.sampleRate&&E(e.sampleRate,"config.sampleRate",0,96e3,!0),void 0!==e.sampleSize&&E(e.sampleRate,"config.sampleSize",0,128,!0),void 0!==e.stereo&&y(e.stereo,"config.stereo"),void 0!==e.bitrate&&E(e.bitrate,"config.bitrate",0,1e4,!1),!0}function qe(e){return"string"==typeof e?S(e,"profile",Object.keys(Ue)):Qe(e),!0}function $e(e){return"string"==typeof e?S(e,"profile",Object.keys(Ke)):Je(e),!0}function et(e){return S(e,"mediaSource",["screen","window","application"]),!0}let tt=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}({}),it=function(e){return e.SCREEN_TRACK="screen_track",e.CUSTOM_TRACK="custome_track",e.LOW_STREAM="low_stream",e.SCREEN_LOW_TRACK="screen_low_track",e}({});function rt(e){if(!e)throw new b(k.INVALID_PARAMS);return I(e.width)||v(e.width,"streamParameter.width"),I(e.height)||v(e.height,"streamParameter.height"),I(e.framerate)||v(e.framerate,"streamParameter.framerate"),I(e.bitrate)||E(e.bitrate,"streamParameter.bitrate"),!0}let st=function(e){return e[e.HIGH_STREAM=0]="HIGH_STREAM",e[e.LOW_STREAM=1]="LOW_STREAM",e}({}),ot=function(e){return e[e.HIGH_STREAM=0]="HIGH_STREAM",e[e.LOW_STREAM=1]="LOW_STREAM",e[e.HIGH_STREAM_LAYER1=4]="HIGH_STREAM_LAYER1",e[e.HIGH_STREAM_LAYER2=5]="HIGH_STREAM_LAYER2",e[e.HIGH_STREAM_LAYER3=6]="HIGH_STREAM_LAYER3",e[e.HIGH_STREAM_LAYER4=7]="HIGH_STREAM_LAYER4",e[e.HIGH_STREAM_LAYER5=8]="HIGH_STREAM_LAYER5",e[e.HIGH_STREAM_LAYER6=9]="HIGH_STREAM_LAYER6",e}({}),nt=function(e){return e[e.DISABLE=0]="DISABLE",e[e.LOW_STREAM=1]="LOW_STREAM",e[e.AUDIO_ONLY=2]="AUDIO_ONLY",e[e.HIGH_STREAM_LAYER1=3]="HIGH_STREAM_LAYER1",e[e.HIGH_STREAM_LAYER2=4]="HIGH_STREAM_LAYER2",e[e.HIGH_STREAM_LAYER3=5]="HIGH_STREAM_LAYER3",e[e.HIGH_STREAM_LAYER4=6]="HIGH_STREAM_LAYER4",e[e.HIGH_STREAM_LAYER5=7]="HIGH_STREAM_LAYER5",e[e.HIGH_STREAM_LAYER6=8]="HIGH_STREAM_LAYER6",e}({}),at=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}({}),ct=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}({}),dt=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.PLAY_START="play-start",e.PLAY_END="play-end",e.FIRST_FRAME_RENDER="first-frame-render",e}({}),ut=function(e){return e.AUDIO="audio",e.VIDEO="video",e.DATA="data",e}({}),ht=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}({}),lt=function(e){return e.UPDATE_TRACK_SOURCE="update-track-source",e}({});const pt={sendVolumeLevel:0,sendBitrate:0,sendBytes:0,sendPackets:0,sendPacketsLost:0,sendJitterMs:0,sendRttMs:0,currentPacketLossRate:0},mt={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},gt={transportDelay:0,end2EndDelay:0,receiveBitrate:0,receiveLevel:0,receiveBytes:0,receiveDelay:0,receivePackets:0,receivePacketsLost:0,receivePacketsDiscarded:0,totalDuration:0,totalFreezeTime:0,freezeRate:0,packetLossRate:0,currentPacketLossRate:0,publishDuration:-1},_t={uplinkNetworkQuality:0,downlinkNetworkQuality:0},ft={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 Tt=function(e){return e.ON_TRACK="on_track",e.ON_NODE="on_node",e}({}),vt=function(e){return e.REQUEST_UPDATE_CONSTRAINTS="request_update_constraints",e.REQUEST_CONSTRAINTS="request_constraints",e}({}),Et=function(e){return e.IDLE="IDLE",e.INITING="INITING",e.INITEND="INITEND",e}({}),yt=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 St(e){return void 0!==e.smoothnessLevel&&E(e.smoothnessLevel,"options.smoothnessLevel",0,1,!1),void 0!==e.lighteningLevel&&E(e.lighteningLevel,"options.lighteningLevel",0,1,!1),void 0!==e.rednessLevel&&E(e.rednessLevel,"options.rednessLevel",0,1,!1),void 0!==e.lighteningContrastLevel&&S(e.lighteningContrastLevel,"options.lighteningContrastLevel",[0,1,2]),!0}let bt=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}({}),kt=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 It={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 At=function(e){return e.OPEN="open",e.MESSAGE="message",e.CLOSE="close",e.CLOSING="closing",e.ERROR="error",e}({});function Rt(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),null):o}function wt(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,r=Array(t);i<t;i++)r[i]=e[i];return r}function Ct(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!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:t+""}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function Dt(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 Nt(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?Dt(Object(i),!0).forEach((function(t){Ct(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):Dt(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function Mt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var i=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=i){var r,s,o,n,a=[],c=!0,d=!1;try{if(o=(i=i.call(e)).next,0===t){if(Object(i)!==i)return;c=!1}else for(;!(c=(r=o.call(i)).done)&&(a.push(r.value),a.length!==t);c=!0);}catch(e){d=!0,s=e}finally{try{if(!c&&null!=i.return&&(n=i.return(),Object(n)!==n))return}finally{if(d)throw s}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return wt(e,t);var i={}.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?wt(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}class Ot extends A{set _mediaStreamTrack(e){e!==this.mediaStreamTrack&&(this.safeEmit(at.TRACK_UPDATED,e),this.mediaStreamTrack=e)}get _mediaStreamTrack(){return this.mediaStreamTrack}constructor(e,t){super(),Ct(this,"trackMediaType",void 0),Ct(this,"_ID",void 0),Ct(this,"_rtpTransceiver",void 0),Ct(this,"_lowRtpTransceiver",void 0),Ct(this,"_hints",[]),Ct(this,"_isClosed",!1),Ct(this,"_originMediaStreamTrack",void 0),Ct(this,"mediaStreamTrack",void 0),Ct(this,"_external",{}),this._ID=t||R(8,"track-"),this._originMediaStreamTrack=e,this.mediaStreamTrack=e,Xe(this)}toString(){return this._ID}getTrackId(){return this._ID}getMediaStreamTrack(e){return e||w((()=>{var e;ge.reportApiInvoke(null,{name:C.GET_MEDIA_STREAM_TRACK,options:[],tag:D.TRACER}).onSuccess((null===(e=this._mediaStreamTrack)||void 0===e?void 0:e.label)||"")}),this.mediaStreamTrack.id||this.getTrackId()),this._mediaStreamTrack}getRTCRtpTransceiver(e){return e===st.LOW_STREAM?this._lowRtpTransceiver:this._rtpTransceiver}getMediaStreamTrackSettings(){return this.getMediaStreamTrack(!0).getSettings()}close(){this._isClosed=!0,this._lowRtpTransceiver=void 0,this._rtpTransceiver=void 0,ze(this),this.emit(ct.CLOSED),this.removeAllListeners(at.SEI_RECEIVED)}_updateRtpTransceiver(e,t){if(t===st.LOW_STREAM){if(this._lowRtpTransceiver===e)return;this._lowRtpTransceiver=e}else{if(this._rtpTransceiver===e)return;this._rtpTransceiver=e}this.emit(at.TRANSCEIVER_UPDATED,e,t)}}class Lt extends Ot{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),Ct(this,"_enabled",!0),Ct(this,"_muted",!1),Ct(this,"_isExternalTrack",!1),Ct(this,"_isClosed",!1),Ct(this,"_enabledMutex",void 0),Ct(this,"processor",void 0),Ct(this,"_processorContext",void 0),Ct(this,"_handleTrackEnded",(()=>{this.onTrackEnded()})),this._enabledMutex=new N("".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,me.debug("[".concat(this.getTrackId(),"] close")),this.emit(tt.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 M(this,tt.NEED_REPLACE_TRACK,this),this.processor&&this._processorContext&&this.processor.updateInput({track:this._originMediaStreamTrack,context:this._processorContext}))}_getDefaultPlayerConfig(){return{}}onTrackEnded(){me.debug("[".concat(this.getTrackId(),"] track ended")),this.safeEmit(ct.TRACK_ENDED)}stateCheck(e,t){if(me.debug("check track state, [muted: ".concat(this._muted,", enabled: ").concat(this._enabled,"] to [").concat(e,": ").concat(t,"]")),y(t,e),this._enabled&&this._muted&&"enabled"===e&&!1===t)throw new b(k.TRACK_STATE_UNREACHABLE,"cannot set enabled while the track is muted").print("error",me);if(!this._enabled&&!this._muted&&"muted"===e&&!0===t)throw new b(k.TRACK_STATE_UNREACHABLE,"cannot set muted while the track is disabled").print("error",me)}getProcessorStats(){return this._processorContext&&this._processorContext.gatherStats()||[]}getProcessorUsage(){return this._processorContext?this._processorContext.gatherUsage():Promise.resolve([])}}const Pt=window.AudioContext||window.webkitAudioContext;let Vt,xt=null;const Ut=new class extends A{constructor(){super(...arguments),Ct(this,"prevState",void 0),Ct(this,"curState",void 0),Ct(this,"currentTime",void 0),Ct(this,"currentTimeStuckAt",void 0),Ct(this,"interruptDetectorTrack",void 0),Ct(this,"onLocalAudioTrackMute",(()=>{me.info("ios15-interruption-start"),this.emit(Oe.IOS_15_16_INTERRUPTION_START)})),Ct(this,"onLocalAudioTrackUnmute",(async()=>{me.info("ios15-interruption-end"),"running"!==this.curState||this.duringInterruption?me.info("ios15-interruption-end-canceled"):(xt&&await xt.suspend(),this.emit(Oe.IOS_15_16_INTERRUPTION_END))}))}get duringInterruption(){return"running"===this.prevState&&"interrupted"===this.curState}bindInterruptDetectorTrack(e){me.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){me.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 Zt(){if(!Pt)return void me.error("your browser is not support web audio");me.info("create audio context");const t=Nt({},u("WEBAUDIO_INIT_OPTIONS"));me.debug("audio context init option:",JSON.stringify(t)),xt=new Pt(t),Ut.curState=xt.state,xt.onstatechange=()=>{Ut.prevState=Ut.curState,Ut.curState=xt?xt.state:void 0;const t=Ut.prevState,i=Ut.curState,r="running"===i,s="interrupted"===i,o="running"===t,n="suspended"===t,a="interrupted"===t,c=e().osVersion;(L()||P())&&o&&s&&(me.info("ios".concat(c,"-interruption-start")),Ut.emit(Oe.IOS_INTERRUPTION_START)),(L()||P())&&(n||a)&&r&&(me.info("ios".concat(c,"-interruption-end")),Ut.emit(Oe.IOS_INTERRUPTION_END)),t!==i&&Ut.emit(Oe.STATE_CHANGE,i,t)},setInterval((()=>{var e;const t=null===(e=xt)||void 0===e?void 0:e.currentTime;if(Ut.currentTime!==t)Ut.currentTimeStuckAt&&(me.debug("AudioContext current time resume at ".concat(t)),Ut.currentTimeStuckAt=void 0),Ut.currentTime=t;else{if(t!==Ut.currentTimeStuckAt){ge.reportApiInvoke(null,{name:"WEB_AUDIO_CURRENT_TIME_STUCK",options:{currentTime:t},tag:D.TRACER}).onSuccess(),me.warning("AudioContext current time stuck at ".concat(t))}Ut.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):L()||P()?"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,h,{capture:!0,passive:!0}):window.removeEventListener(t,h,{capture:!0,passive:!0})}}}function c(){n(!0)}function d(){n(!1)}function h(){n(!0)}function l(){let e;try{e=i.play(),e?e.then(g,g):(i.addEventListener("playing",g),i.addEventListener("abort",g),i.addEventListener("error",g))}catch(e){g()}}function p(e){o||(i.paused?e?(m(!1),o=!0,l()):m(!0):m(!1))}function m(e){if(s!==e){s=e;for(let i=0,r=t;i<r.length;i++){const t=r[i];e?window.addEventListener(t,_,{capture:!0,passive:!0}):window.removeEventListener(t,_,{capture:!0,passive:!0})}}}function g(){i.removeEventListener("playing",g),i.removeEventListener("abort",g),i.removeEventListener("error",g),o=!1,p(!1)}function _(){p(!0)}let f;if(L()&&u("IOS_BG_TAG")){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,f=()=>{if(u("IOS_AUTO_RESTART_BG_TAG")&&i&&i.srcObject&&!o&&(!i.paused||!0!==s)){i.paused||i.pause();try{o=!0,l()}catch(e){o=!1}return!0}},p(!0)}return Ut.on(Oe.STATE_CHANGE,c),n(!1),f}(xt).then((e=>{Vt=e}))}function Wt(){if(Vt){if(Vt()){ge.reportApiInvoke(null,{name:"BG_AUDIO_TAG_RESTART",options:{},tag:D.TRACER}).onSuccess(),me.debug("restart background audio tag success")}}}function Ft(){if(!xt){if(Zt(),!xt)throw new b(k.NOT_SUPPORTED,"can not create audio context");return xt}return xt}function Gt(){return!!xt}function Bt(e){if(function(){if(null!==Ht)return Ht;const e=Ft(),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(),Ht=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?O(e._inputNodes,r):e._inputNodes=[];for(const i of e._inputNodes)t.call(e,i)}}function Kt(e){const t=Ft();return new Promise(((i,r)=>{t.decodeAudioData(e,(e=>{i(e)}),(e=>{r(new b(k.DECODE_AUDIO_FILE_FAILED,e.toString()))}))}))}let Ht=null;function Yt(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=Ft();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 Xt=null;function zt(){if(Xt)return Xt;const e=Ft();if(!e.createMediaStreamDestination)throw new b(k.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),Xt=r.stream.getAudioTracks()[0],Xt}function jt(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 Qt(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 Jt{constructor(){Ct(this,"context",void 0),Ct(this,"analyserNode",void 0),Ct(this,"sourceNode",void 0),this.context=Ft(),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||L()||P()||"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){me.warning("rebuild analyser node failed.")}}destroy(){this.updateSource(void 0)}}class qt extends A{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(),Ct(this,"outputNode",void 0),Ct(this,"outputTrack",void 0),Ct(this,"isPlayed",!1),Ct(this,"sourceNode",void 0),Ct(this,"context",void 0),Ct(this,"audioBufferNode",void 0),Ct(this,"destNode",void 0),Ct(this,"audioOutputLevel",0),Ct(this,"volumeLevelAnalyser",void 0),Ct(this,"_processedNode",void 0),Ct(this,"playNode",void 0),Ct(this,"isDestroyed",!1),Ct(this,"onNoAudioInput",void 0),Ct(this,"isNoAudioInput",!1),Ct(this,"_noAudioInputCount",0),this.context=Ft(),this.playNode=this.context.destination,this.outputNode=this.context.createGain(),Bt(this.outputNode),this.volumeLevelAnalyser=new Jt}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(ht.ON_AUDIO_BUFFER,jt(e))})}stopGetAudioBuffer(){this.audioBufferNode&&(this.audioBufferNode.onaudioprocess=null,this.outputNode.disconnect(this.audioBufferNode),this.audioBufferNode=void 0)}createOutputTrack(){if(!ye().webAudioMediaStreamDest)throw new b(k.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((()=>{Ut.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;L()||P()?"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 V(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 $t extends qt{get isFreeze(){return!1}constructor(t,i,r){var s;if(super(),Ct(this,"sourceNode",void 0),Ct(this,"track",void 0),Ct(this,"clonedTrack",void 0),Ct(this,"audioElement",void 0),Ct(this,"isCurrentTrackCloned",!1),Ct(this,"isRemoteTrack",!1),Ct(this,"originVolumeLevelAnalyser",void 0),Ct(this,"rebuildWebAudio",(async()=>{if(me.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 me.debug("rebuild web audio success, current volume status",this.getAccurateVolumeLevel());this.context.resume().then((()=>me.info("resume success"))),me.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),Bt(this.sourceNode),this.volumeLevelAnalyser.rebuildAnalyser();const i=this.outputNode.gain.value;this.outputNode=this.context.createGain(),this.outputNode.gain.setValueAtTime(i,this.context.currentTime),Bt(this.outputNode),this.emit(ht.UPDATE_SOURCE),this.connect(),this.audioElement.srcObject=t,this.isPlayed&&this.play(this.playNode),this.checkHasAudioInput()})),"audio"!==t.kind)throw new b(k.UNEXPECTED_ERROR);this.track=t;const o=new MediaStream([this.track]);if(this.isRemoteTrack=!!i,this.sourceNode=this.context.createMediaStreamSource(o),Bt(this.sourceNode),r){const e=r.clone();e.enabled=!0,this.clonedTrack=e,me.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]));Bt(t),this.originVolumeLevelAnalyser=new Jt,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&&(Ut.on(Oe.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),Bt(this.sourceNode),this.processedNode||this.sourceNode.connect(this.outputNode),this.emit(ht.UPDATE_SOURCE),this.audioElement.srcObject=t}destroy(){var e;this.audioElement.srcObject=null,this.audioElement.remove(),Ut.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),me.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]));Bt(i),this.originVolumeLevelAnalyser&&this.originVolumeLevelAnalyser.updateSource(i)}getOriginVolumeLevel(){return this.originVolumeLevelAnalyser?this.originVolumeLevelAnalyser.getVolumeLevel():this.getAccurateVolumeLevel()}}async function ei(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 ti(e,t){const i=await ii(e.mediaSource),r=await x(i,t),s=r.sourceId,o=r.audio;return await ei(s,e,o)}async function ii(e){let t=["window","screen"];"application"!==e&&"window"!==e||(t=["window"]),"screen"===e&&(t=["screen"]);const i=U();if(!i)throw console.error("failed to fetch electron, please mount it to window"),new b(k.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 b(k.ELECTRON_DESKTOP_CAPTURER_GET_SOURCES_ERROR,e.toString())}}const ri=new N("safari");let si=!1,oi=!1;async function ni(e,t){let i=0,r=null;for(;i<2;)try{r=await ai(e,t,i>0);break}catch(e){if(e instanceof b)throw me.error("[".concat(t,"] ").concat(e.toString())),e;const r=ci(e.name||e.code||e,e.message);if(r.code===k.MEDIA_OPTION_INVALID){me.debug("[".concat(t,"] detect media option invalid, retry")),i+=1,await V(500);continue}throw me.error("[".concat(t,"] ").concat(r.toString())),r}if(!r)throw new b(k.UNEXPECTED_ERROR,"can not find stream after getUserMedia");return r}async function ai(t,i,r){if(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)throw new b(k.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=ye(),o=new MediaStream;if(t.audioSource&&o.addTrack(t.audioSource),t.videoSource&&o.addTrack(t.videoSource),!t.audio&&!t.video&&!t.screen)return me.debug("Using Video Source/ Audio Source"),o;if(t.screen)if(Z())if(t.screen.sourceId){di(o,await ei(t.screen.sourceId,t.screen,!!t.screenAudio))}else{di(o,await ti(t.screen,!!t.screenAudio))}else if(p()&&t.screen.extensionId&&t.screen.mandatory){if(!s.getStreamFromExtension)throw new b(k.NOT_SUPPORTED,"This browser does not support screen sharing");me.debug("[".concat(i,'] Screen access on chrome stable, looking for extension"'));const e=await(a=t.screen.extensionId,l=i,new Promise(((e,t)=>{try{chrome.runtime.sendMessage(a,{getStream:!0},(i=>{if(!i||!i.streamId)return me.error("[".concat(l,"] No response from Chrome Plugin. Plugin not installed properly"),i),void t(new b(k.CHROME_PLUGIN_NO_RESPONSE,"No response from Chrome Plugin. Plugin not installed properly"));e(i.streamId)}))}catch(e){me.error("[".concat(l,"] AgoraRTC screensharing plugin is not accessible(").concat(a,")"),e.toString()),t(new b(k.CHROME_PLUGIN_NOT_INSTALL))}})));t.screen.mandatory.chromeMediaSourceId=e;di(o,await navigator.mediaDevices.getUserMedia({video:{mandatory:t.screen.mandatory}}))}else if(s.getDisplayMedia){var n;t.screen.mediaSource&&et(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},r=t.screen,s=r.selfBrowserSurface,a=r.surfaceSwitching,c=r.systemAudio,d=r.preferCurrentTab,u=r.windowAudio,h=r.monitorTypeSurfaces,l={selfBrowserSurface:s,surfaceSwitching:a,systemAudio:c,preferCurrentTab:d,windowAudio:u,monitorTypeSurfaces:h};!s&&delete l.selfBrowserSurface,!a&&delete l.surfaceSwitching,!c&&delete l.systemAudio,!d&&delete l.preferCurrentTab,!u&&delete l.windowAudio,!h&&delete l.monitorTypeSurfaces,me.debug("[".concat(i,"] getDisplayMedia:"),JSON.stringify({video:e,audio:t.screenAudio,controls:l}));di(o,await navigator.mediaDevices.getDisplayMedia(Nt({video:e,audio:t.screenAudio},l)))}else{if(!h())throw me.error("[".concat(i,"] This browser does not support screenSharing")),new b(k.NOT_SUPPORTED,"This browser does not support screen sharing");{t.screen.mediaSource&&et(t.screen.mediaSource);const e={video:{mediaSource:t.screen.mediaSource,width:t.screen.width,height:t.screen.height,frameRate:t.screen.frameRate}};me.debug("[".concat(i,"] getUserMedia: ").concat(JSON.stringify(e)));di(o,await navigator.mediaDevices.getUserMedia(e))}}var a,l;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=W(m,g)}catch(e){}me.debug("[".concat(i,"] GetUserMedia"),JSON.stringify(m)),e();let _,f=null;(c()||L()||d())&&(f=await ri.lock());try{_=await navigator.mediaDevices.getUserMedia(m)}catch(e){throw f&&f(),e}return m.audio&&(si=!0),m.video&&(oi=!0),di(o,_),f&&f(),o}function ci(e,t){switch(e){case"Starting video failed":case"OverconstrainedError":case"TrackStartError":return new b(k.MEDIA_OPTION_INVALID,"".concat(e,": ").concat(t));case"NotFoundError":case"DevicesNotFoundError":return new b(k.DEVICE_NOT_FOUND,"".concat(e,": ").concat(t));case"NotSupportedError":return new b(k.NOT_SUPPORTED,"".concat(e,": ").concat(t));case"NotReadableError":return new b(k.NOT_READABLE,"".concat(e,": ").concat(t));case"InvalidStateError":case"NotAllowedError":case"PERMISSION_DENIED":case"PermissionDeniedError":return new b(k.PERMISSION_DENIED,"".concat(e,": ").concat(t));case"ConstraintNotSatisfiedError":return new b(k.CONSTRAINT_NOT_SATISFIED,"".concat(e,": ").concat(t));default:return me.error("getUserMedia unexpected error",e),new b(k.UNEXPECTED_ERROR,"".concat(e,": ").concat(t))}}function di(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 ui extends A{get state(){return this._state}set state(e){e!==this._state&&(this.emit(yt.STATE_CHANGE,e),this._state=e)}constructor(){super(),Ct(this,"_state",Et.IDLE),Ct(this,"isAccessMicrophonePermission",!1),Ct(this,"isAccessCameraPermission",!1),Ct(this,"lastAccessMicrophonePermission",!1),Ct(this,"lastAccessCameraPermission",!1),Ct(this,"checkdeviceMatched",!1),Ct(this,"deviceInfoMap",new Map),this.init().then((()=>{navigator.mediaDevices.addEventListener&&navigator.mediaDevices.addEventListener("devicechange",this.updateDevicesInfo.bind(this)),window.setInterval((()=>{(u("ENUMERATE_DEVICES_INTERVAL")||(F()||G())&&i())&&this.updateDevicesInfo()}),u("ENUMERATE_DEVICES_INTERVAL_TIME"))})).catch((e=>me.error(e.toString())))}async enumerateDevices(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices)throw new b(k.NOT_SUPPORTED,"enumerateDevices() not supported.");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(ri.isLocked){me.debug("[device manager] wait GUM lock");(await ri.lock())(),me.debug("[device manager] GUM unlock")}if(si&&(o=!1,this.isAccessMicrophonePermission=!0),oi&&(n=!1,this.isAccessCameraPermission=!0),me.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=ci(e.name||e.code||e,e.message);if(t.code===k.PERMISSION_DENIED)throw t;me.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=ci(e.name||e.code||e,e.message);if(t.code===k.PERMISSION_DENIED)throw t;me.warning("getUserMedia failed in getDevices",t)}this.isAccessMicrophonePermission=!0}else if(n){try{c=await navigator.mediaDevices.getUserMedia({video:t})}catch(e){const t=ci(e.name||e.code||e,e.message);if(t.code===k.PERMISSION_DENIED)throw t;me.warning("getUserMedia failed in getDevices",t)}this.isAccessCameraPermission=!0}me.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 b(k.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 b(k.DEVICE_NOT_FOUND,"deviceId: ".concat(e));return t}async init(){this.state=Et.INITING;try{await this.updateDevicesInfo(),this.state=Et.INITEND}catch(e){if(this.state=Et.IDLE,!B())throw new b(k.WEB_SECURITY_RESTRICT,"Your context is limited by web security, please try using https protocol or localhost.");throw me.warning("Device Detection functionality cannot start properly.",e.toString()),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?me.debug("[device-check] default input ".concat(t.label," and output ").concat(i.label," is the same group")):me.debug("[device-check] default input ".concat(t.label," and output ").concat(i.label," is not the same group")):me.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!==Et.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(yt.RECORDING_DEVICE_CHANGED,e);break;case"videoinput":this.lastAccessCameraPermission&&this.isAccessCameraPermission&&this.emit(yt.CAMERA_DEVICE_CHANGED,e);break;case"audiooutput":this.lastAccessMicrophonePermission&&this.isAccessMicrophonePermission&&this.emit(yt.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 hi=new ui;let li=!1;const pi=new class extends A{constructor(){super(...arguments),Ct(this,"onAutoplayFailed",void 0),Ct(this,"onAudioAutoplayFailed",void 0)}};function mi(){if(li)return u("FLS_AUTOPLAY_EMITS")?(pi.onAutoplayFailed&&pi.onAutoplayFailed(),pi.emit("autoplay-failed")):void 0;{const e=t=>{t.preventDefault(),li=!1,K()?document.body.removeEventListener("click",e,!0):(document.body.removeEventListener("touchstart",e,!0),document.body.removeEventListener("mousedown",e,!0))};li=!0,K()?document.body.addEventListener("click",e,!0):(document.body.addEventListener("touchstart",e,!0),document.body.addEventListener("mousedown",e,!0)),me.info("detect media autoplay failed, document: https://docs.agora.io/cn/Voice/autoplay_policy_web_ng?platform=Web"),pi.onAutoplayFailed?pi.onAutoplayFailed():pi.onAudioAutoplayFailed?me.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 ."):me.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 ."),pi.emit("autoplay-failed")}}function gi(e,t,i,r){if(!e)return;const s=ge.getBaseInfoBySessionId(e);if(!s)return;const o=s.info,n=Date.now(),a=Nt(Nt({},o),{},{vid:void 0===o.vid?0:Number(o.vid),lts:n,elapse:n-s.startTime,cbRegistered:pi.onAutoplayFailed||pi.onAudioAutoplayFailed?1:-1,errorMsg:i,mediaType:t,trackId:r,extend:void 0});ge.send({type:_e.AUTOPLAY_FAILED,data:a},!0)}const _i=["play","playing","loadeddata","canplay","pause","stalled","suspend","waiting","abort","emptied","ended","error"],fi=new class{constructor(){Ct(this,"onAutoplayFailed",void 0),Ct(this,"elementMap",new Map),Ct(this,"elementStateMap",new Map),Ct(this,"elementsNeedToResume",[]),Ct(this,"sinkIdMap",new Map),Ct(this,"autoResumeAfterInterruption",(e=>Promise.all(Array.from(this.elementMap.entries()).map((async t=>{let i=Mt(t,2),r=i[0],s=i[1];const o=this.elementStateMap.get(r),n=s.srcObject.getAudioTracks()[0],a=n&&n.readyState;if(me.debug("resume after interrupted, ele: ".concat(o," audio: ").concat(a," ").concat(e)),"live"===a){if(e)return s.pause(),s.play();if("running"===Ut.curState)return Y()?(s.pause(),s.play()):o&&"paused"===o?s.play():void 0}}))))),Ct(this,"autoResumeAfterInterruptionOnIOS15_16",(()=>{Array.from(this.elementMap.entries()).forEach((e=>{let t=Mt(e,2);t[0];let i=t[1];const r=i.srcObject.getAudioTracks()[0];r&&"live"===r.readyState&&(me.debug("auto resume after interruption inside autoResumeAfterInterruptionOnIOS15"),i.pause(),i.play())}))})),this.autoResumeAudioElement(),Ut.on(Oe.IOS_INTERRUPTION_END,this.autoResumeAfterInterruption),Ut.on(Oe.IOS_15_16_INTERRUPTION_END,this.autoResumeAfterInterruptionOnIOS15_16),Ut.on(Oe.STATE_CHANGE,(()=>{L()&&"suspended"===Ut.prevState&&"running"===Ut.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 b(k.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,bt.INIT),this.setVolume(t,i);const n=this.sinkIdMap.get(t);if(n)try{o.setSinkId(n).catch((e=>{me.warning("[".concat(t,"] set sink id failed"),e.toString())}))}catch(e){me.warning("[".concat(t,"] set sink id failed"),e.toString())}const a=o.play();a&&a.then&&a.catch((e=>{s&&gi(s,"audio",e.message,t),me.warning("audio element play warning",e.toString()),this.elementMap.has(t)&&"NotAllowedError"===e.name&&(me.warning("detected audio element autoplay failed"),this.elementsNeedToResume.push(o),r((()=>{this.onAutoplayFailed&&this.onAutoplayFailed(),mi()})))}))}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)}getVolume(e){const t=this.elementMap.get(e);return t?t.volume:0}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){_i.forEach((i=>{t.addEventListener(i,(i=>{const r=this.elementStateMap.get(e),s="pause"===i.type?"paused":i.type;if(me.debug("[".concat(e,"] audio-element-status change ").concat(r," => ").concat(s)),"error"===i.type){const i=null==t?void 0:t.error;i&&me.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=>{me.debug("Auto resume audio element success")})).catch((e=>{me.warning("Auto resume audio element failed!",e)}))})),this.elementsNeedToResume=[]};H().then((()=>{K()?document.body.addEventListener("click",e,!0):(document.body.addEventListener("touchstart",e,!0),document.body.addEventListener("mousedown",e,!0))}))}};function Ti(){return function(e,t,i){const r=i.value;return"function"==typeof r&&(i.value=function(){this._isClosed&&new b(k.INVALID_OPERATION,"[".concat(this.getTrackId(),"] cannot operate a closed track")).print("warning",me);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 vi extends A{constructor(e){super(),Ct(this,"name","VideoProcessorDestination"),Ct(this,"ID","0"),Ct(this,"_source",void 0),Ct(this,"videoContext",void 0),Ct(this,"inputTrack",void 0),this.videoContext=e}get kind(){return"video"}get enabled(){return!0}pipe(){throw new b(k.NOT_SUPPORTED,"VideoProcessor cannot pipe to any other Processor")}unpipe(){throw new b(k.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(Tt.ON_TRACK,e.track))}reset(){this.inputTrack=void 0,this.videoContext.chained=!1,this.emit(Tt.ON_TRACK,void 0)}}class Ei extends A{set chained(e){this._chained=e}get chained(){return this._chained}constructor(e,t){super(),Ct(this,"constraintsMap",new Map),Ct(this,"statsRegistry",[]),Ct(this,"usageRegistry",[]),Ct(this,"trackId",void 0),Ct(this,"direction",void 0),Ct(this,"_chained",!1),this.trackId=e,this.direction=t}async getConstraints(){return await X(this,vt.REQUEST_CONSTRAINTS)}async requestApplyConstraints(e,t){return me.info("processor ".concat(t.name," requestApplyConstraints for ").concat(this.trackId)),e&&this.constraintsMap.set(t,e),M(this,vt.REQUEST_UPDATE_CONSTRAINTS,Array.from(this.constraintsMap.values()))}async requestRevertConstraints(e){if(this.constraintsMap.has(e))return me.info("processor ".concat(e.name," requestRevertConstraints for ").concat(this.trackId)),this.constraintsMap.delete(e),M(this,vt.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 t of this.statsRegistry){const i=t.processorID,r=t.processorName,s=t.type,o=t.cb;try{const t=o();e.push({processorID:i,processorName:r,type:s,stats:t})}catch(e){me.error(new b(k.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 t of this.usageRegistry){const i=t.cb;try{let t=i();t instanceof Promise&&(t=await t),e.push(Nt(Nt({},t),{},{direction:this.direction}))}catch(e){me.error("gather extension usage error",e)}}return e}getDirection(){return this.direction}}class yi extends A{constructor(e){super(),Ct(this,"name","AudioProcessorDestination"),Ct(this,"ID","0"),Ct(this,"inputTrack",void 0),Ct(this,"inputNode",void 0),Ct(this,"audioProcessorContext",void 0),Ct(this,"_source",void 0),this.audioProcessorContext=e}get kind(){return"audio"}get enabled(){return!0}pipe(){throw new b(k.NOT_SUPPORTED,"AudioProcessorDestination cannot pipe to any other Processor")}unpipe(){throw new b(k.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(Tt.ON_TRACK,void 0),this.emit(Tt.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(Tt.ON_TRACK,this.inputTrack)),e.node&&this.inputNode!==e.node&&(this.audioProcessorContext.chained=!0,this.inputNode=e.node,this.emit(Tt.ON_NODE,this.inputNode))}}class Si extends A{set chained(e){this._chained=e}get chained(){return this._chained}constructor(e,t,i){super(),Ct(this,"constraintsMap",new Map),Ct(this,"statsRegistry",[]),Ct(this,"audioContext",void 0),Ct(this,"trackId",void 0),Ct(this,"direction",void 0),Ct(this,"usageRegistry",[]),Ct(this,"_chained",!1),this.audioContext=e,this.trackId=t,this.direction=i}async getConstraints(){return X(this,vt.REQUEST_CONSTRAINTS)}getAudioContext(){return this.audioContext}async requestApplyConstraints(e,t){return me.info("processor ".concat(t.name," requestApplyConstraints for ").concat(this.trackId)),e&&this.constraintsMap.set(t,e),M(this,vt.REQUEST_UPDATE_CONSTRAINTS,Array.from(this.constraintsMap.values()))}async requestRevertConstraints(e){if(this.constraintsMap.has(e))return this.constraintsMap.delete(e),M(this,vt.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 t of this.statsRegistry){const i=t.processorID,r=t.processorName,s=t.type,o=t.cb;try{const t=o();e.push({processorID:i,processorName:r,type:s,stats:t})}catch(e){me.error(new b(k.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 t of this.usageRegistry){const i=t.cb;try{let t=i();t instanceof Promise&&(t=await t),e.push(Nt(Nt({},t),{},{direction:this.direction}))}catch(e){me.error("gather extension usage error",e)}}return e}getDirection(){return this.direction}}class bi extends A{get isPlayed(){return!0}get isFreeze(){return!1}constructor(){super(),Ct(this,"context",void 0),Ct(this,"processSourceNode",void 0),Ct(this,"outputTrack",void 0),Ct(this,"processedNode",void 0),Ct(this,"clonedTrack",void 0),Ct(this,"outputNode",void 0),this.outputNode=new ki}setVolume(){}createOutputTrack(){throw new b(k.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 ki{disconnect(){}connect(){}}function Ii(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=L()?"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(z),setTimeout((()=>{r||(s.srcObject=null,s.remove(),t([s.videoWidth,s.videoHeight]))}),4e3)}))}function Ai(e){const t={};e.facingMode&&(t.facingMode=e.facingMode),e.cameraId&&(t.deviceId={exact:e.cameraId});const i=Fe(e.encoderConfig);return null!=i.width&&(t.width=i.width),null!=i.height&&(t.height=i.height),!j()&&i.frameRate&&(t.frameRate=i.frameRate),m()&&"object"==typeof t.frameRate&&(t.frameRate.max=60),h()&&(t.frameRate={ideal:30,max:30}),t}function Ri(e){const t={};e.screenSourceType&&(t.mediaSource=e.screenSourceType),e.extensionId&&p()&&(t.extensionId=e.extensionId);const i=e.displaySurface,r=e.selfBrowserSurface,o=e.surfaceSwitching,n=e.systemAudio,a=e.preferCurrentTab,c=e.windowAudio,d=e.monitorTypeSurfaces;(s(107)||f(107)||T(93))&&(i&&(S(i,"displaySurface",["browser","window","monitor"]),t.displaySurface=i),r?(S(r,"selfBrowserSurface",["exclude","include"]),t.selfBrowserSurface=r):t.selfBrowserSurface="include",o&&(S(o,"surfaceSwitching",["exclude","include"]),t.surfaceSwitching=o)),(s(105)||f(105)||T(91))&&n&&(S(n,"systemAudio",["exclude","include"]),t.systemAudio=n),(s(94)||f(94)||T(80))&&a&&(t.preferCurrentTab=!0),(s(141)||f(141)||T(125))&&c&&(S(c,"windowAudio",["exclude","system"]),t.windowAudio=c),(s(119)||f(119)||T(105))&&d&&(S(d,"monitorTypeSurfaces",["exclude","include"]),t.monitorTypeSurfaces=d),e.electronScreenSourceId&&(t.sourceId=e.electronScreenSourceId);const u=e.encoderConfig?Ge(e.encoderConfig):null;return t.mandatory={chromeMediaSource:"desktop",maxWidth:u?u.width:void 0,maxHeight:u?u.height:void 0},u&&(u.frameRate&&("number"==typeof u.frameRate?(t.mandatory.maxFrameRate=u.frameRate,t.mandatory.minFrameRate=u.frameRate):(t.mandatory.maxFrameRate=u.frameRate.max||u.frameRate.ideal||u.frameRate.exact||void 0,t.mandatory.minFrameRate=u.frameRate.min||u.frameRate.ideal||u.frameRate.exact||void 0),t.frameRate=u.frameRate),u.width&&(t.width=u.width),u.height&&(t.height=u.height)),t}function wi(e){const t={};return j()||(void 0!==e.AGC&&(t.autoGainControl=e.AGC),void 0!==e.AEC&&(t.echoCancellation=e.AEC),void 0!==e.ANS&&(t.noiseSuppression=e.ANS,p()&&e.ANS&&(t.googHighpassFilter=e.ANS))),t}function Ci(e){const t=wi(e);return Ne()&&e.suppressLocalAudioPlayback&&(t.suppressLocalAudioPlayback=e.suppressLocalAudioPlayback),Me()&&e.restrictOwnAudio&&(t.restrictOwnAudio=!0),t}function Di(e){const t=wi(e);if(e.encoderConfig){const i=He(e.encoderConfig);t.channelCount=i.stereo?2:1,t.sampleRate=i.sampleRate,t.sampleSize=i.sampleSize}return e.microphoneId&&(t.deviceId={exact:e.microphoneId}),F()&&(t.sampleRate=void 0),t}function Ni(e,t,i){const r=4*Math.floor(2e5*Math.pow(i/15,.6)*Math.pow(e*t/230400,.75)),s=e*t,o=new Map([[19200,.9],[230400,.85],[518400,.75],[921600,.7],[2073600,.6],[3686400,.5]]),n=new Map([[230400,.95],[518400,.9],[921600,.85],[2073600,.8]]);let a=o.values().next().value,c=1;if(o.has(s))a=o.get(s);else{const e=Array.from(o.entries()).sort(((e,t)=>Mt(e,1)[0]-Mt(t,1)[0])),t=e.find((e=>Mt(e,1)[0]>s));if(t){const i=e.indexOf(t);if(i>0){const r=e[i-1],o=(s-r[0])/(t[0]-r[0]);a=r[1]+o*(t[1]-r[1])}else a=t[1]}else a=e[e.length-1][1]}if(n.has(s))c=n.get(s);else{const e=Array.from(n.entries()).sort(((e,t)=>Mt(e,1)[0]-Mt(t,1)[0])),t=e.find((e=>Mt(e,1)[0]>s));if(t){const i=e.indexOf(t);if(i>0){const r=e[i-1],o=(s-r[0])/(t[0]-r[0]);c=r[1]+o*(t[1]-r[1])}else c=t[1]}else c=e[e.length-1][1]}const d=u("VIDEO_NEW_BITRATE_RATIO");d&&d>0&&(a=d/100);const h=Math.floor(r*a),l=Math.floor(65e4*Math.pow(e*t/230400,.5)*Math.pow(i/15,.69));let p=h;const m=u("VIDEO_STANDARD_BITRATE_VERSION");return m&&m>0&&(1===m?p=r:2===m?p=h:3===m&&(p=l)),[Math.floor(p/1e3),c]}function Mi(e,t,i){if(!Array.isArray(u("VIDEO_ENCODER_CONFIG_LIST")))return!1;if(0===u("VIDEO_ENCODER_CONFIG_LIST").length)return!1;const r=Math.min(e,t);if(r>=480)return!1;return Nt(Nt({},u("VIDEO_ENCODER_CONFIG_LIST").find((e=>e.height>r))),{},{frameRate:i})}function Oi(e,t,i,r,s){const o=u("BITRATE_ADAPTER_TYPE");if("DEFAULT_BITRATE"===o)return{min:r,max:s};if(void 0===s){const n=Math.floor(200*Math.pow(i/15,.6)*Math.pow(e*t/640/360,.75));s="STANDARD_BITRATE"===o?4*n:2*n,r=null!=r?r:n}else r=null!=r?r:Math.floor(s/10);return{min:r,max:s}}function Li(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 Pi=e=>{const t=e._encoderConfig;if(!t)return;const i=e.getMediaStreamTrackSettings(),r=i.frameRate,s=i.width,o=i.height;let n=t.frameRate,a=void 0===n?r:n,c=t.width,d=void 0===c?s:c,h=t.height,l=void 0===h?o:h;if(!a||!d||!l)return;d=Q(d),l=Q(l),a=Q(a);const p=Li(d,l,a),m=p.max,g=p.min,_=t||{},f=_.bitrateMax,T=_.bitrateMin;f||me.debug("calculate bitrate: [w: ".concat(d,", h: ").concat(l,", fps: ").concat(a,"] => [brMax: ").concat(f,", brMin: ").concat(T,"]"));const v=u("ENCODER_CONFIG_LIMIT").maxFramerate;return v&&"number"==typeof v&&(a=Math.min(a,v)),{frameRate:a,bitrateMax:f||m,bitrateMin:T||g,scaleResolutionDownBy:1,scale:0}},Vi=async(e,t,i)=>await(async(e,t,i)=>{const r=J(q(""+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),xi=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 Ui(e);i({buffer:r,width:t.width,height:t.height})}else r(new b(k.CONVERTING_VIDEO_FRAME_TO_BLOB_FAILED))}),e,1)}))},Ui=async e=>{const t=await e.arrayBuffer();return new Uint8Array(t)};function Zi(e,t){if("VideoFrame"in window&&"TransformStream"in window&&ye().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 Wi,Fi,Gi,Bi,Ki,Hi,Yi,Xi,zi,ji,Qi,Ji,qi,$i,er,tr,ir,rr,sr,or,nr,ar,cr,dr,ur,hr,lr,pr,mr,gr,_r,fr,Tr,vr,Er,yr,Sr,br,kr,Ir;let Ar=(Wi=fe({argsMap:(e,t)=>[e.getTrackId(),t],throttleTime:300}),Fi=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),Gi=Ti(),Bi=$("LocalAudioTrack","_enabledMutex"),Ki=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),Hi=Ti(),Yi=$("LocalAudioTrack","_enabledMutex"),Xi=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),zi=Ti(),ji=Ti(),Qi=Ti(),Ji=fe({argsMap:e=>[e.getTrackId()]}),qi=Ti(),$i=fe({argsMap:e=>[e.getTrackId()]}),er=Ti(),tr=fe({argsMap:e=>[e.getTrackId()]}),ir=fe({argsMap:(e,t)=>[e.getTrackId(),t.name]}),rr=fe({argsMap:e=>[e.getTrackId()]}),Rt((sr=class extends Lt{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?fi.isPlaying(this.getTrackId()):this._source.isPlayed}get __className__(){return"LocalAudioTrack"}constructor(e,t,i,r){super(e,i),Ct(this,"trackMediaType",ut.AUDIO),Ct(this,"_encoderConfig",void 0),Ct(this,"_trackSource",void 0),Ct(this,"metadata",[]),Ct(this,"_enabled",!0),Ct(this,"_volume",100),Ct(this,"_useAudioElement",!0),Ct(this,"_bypassWebAudio",!1),Ct(this,"processor",void 0),Ct(this,"_processorContext",void 0),Ct(this,"_processorDestination",void 0),Ct(this,"_getOriginVolumeLevel",void 0),this._encoderConfig=t,this._getOriginVolumeLevel=!!r,this._trackSource=new bi,u("DISABLE_WEBAUDIO")&&(this._bypassWebAudio=!0),u("LOCAL_AUDIO_TRACK_USES_WEB_AUDIO")&&(this._useAudioElement=!1);c()&&!Gt()?setTimeout((()=>this.initWebAudio())):this.initWebAudio()}setVolume(e){E(e,"volume",0,1e3),this._volume=e,this._source.setVolume(e/100),this._useAudioElement&&fi.setVolume(this.getTrackId(),e);try{if(this._bypassWebAudio)return void me.debug("[".concat(this.getTrackId(),"] setVolume returned because no pass through WebAudio."));const e=this._source.createOutputTrack();this._mediaStreamTrack!==e&&(this._mediaStreamTrack=e,M(this,tt.NEED_REPLACE_TRACK,this).then((()=>{me.debug("[".concat(this.getTrackId(),"] replace web audio track success"))})).catch((e=>{me.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||!Se())throw new b(k.NOT_SUPPORTED,"your browser does not support setting the audio output device");await fi.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(me.info("[".concat(this.getTrackId(),"] start setEnabled"),e),e){this._originMediaStreamTrack.enabled=!0;try{i||(this._enabled=!0),await M(this,tt.NEED_ENABLE_TRACK,this),me.info("[".concat(this.getTrackId(),"] setEnabled to ").concat(e," success"))}catch(e){throw i||(this._enabled=!1),me.error("[".concat(this.getTrackId(),"] setEnabled to true error"),e.toString()),e}}else{this._originMediaStreamTrack.enabled=!1,i||(this._enabled=!1);try{await M(this,tt.NEED_DISABLE_TRACK,this)}catch(e){throw i||(this._enabled=!0),me.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,me.debug("[".concat(this.getTrackId(),"] start set muted: ").concat(e)),e?await M(this,tt.NEED_MUTE_TRACK,this):await M(this,tt.NEED_UNMUTE_TRACK,this))}getStats(){w((()=>{me.warning("[deprecated] LocalAudioTrack.getStats will be removed in the future, use AgoraRTCClient.getLocalAudioStats instead")}),"localAudioTrackGetStatsWarning");const e=ee(this,tt.GET_STATS);return e||Nt({},pt)}setAudioFrameCallback(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4096;if(!e)return this._source.removeAllListeners(ht.ON_AUDIO_BUFFER),void this._source.stopGetAudioBuffer();this._source.startGetAudioBuffer(t),this._source.removeAllListeners(ht.ON_AUDIO_BUFFER),this._source.on(ht.ON_AUDIO_BUFFER,(t=>e(t)))}play(){me.debug("[".concat(this.getTrackId(),"] start audio playback")),this._useAudioElement?(me.debug("[".concat(this.getTrackId(),"] start audio playback in element")),fi.play(this._mediaStreamTrack,this.getTrackId(),this._volume)):this._source.play()}stop(){me.debug("[".concat(this.getTrackId(),"] stop audio playback")),this._useAudioElement?fi.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];me.debug("[".concat(this.getTrackId(),"] update player source track")),e&&this._source.updateTrack(this._mediaStreamTrack),this._useAudioElement&&fi.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 M(this,tt.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 b(k.INVALID_OPERATION,"Can not process AudioTrack when bypassWebAudio set to true.");if(this.processor===e)return e;if(e._source)throw new b(k.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(Tt.ON_TRACK,(async e=>{e?e!==this._mediaStreamTrack&&(this._mediaStreamTrack=e,this._updatePlayerSource(!1),this._source.processedNode=this._source.createMediaStreamSourceNode(e),await M(this,tt.NEED_REPLACE_TRACK,this)):this._mediaStreamTrack!==this._originMediaStreamTrack&&(this._mediaStreamTrack=this._originMediaStreamTrack,this._updatePlayerSource(),await M(this,tt.NEED_REPLACE_TRACK,this))})),e.on(Tt.ON_NODE,(e=>{this._source.processedNode=e}))}unbindProcessorDestinationEvents(e){e.removeAllListeners(Tt.ON_TRACK),e.removeAllListeners(Tt.ON_NODE)}bindProcessorContextEvents(e){e.on(vt.REQUEST_CONSTRAINTS,(async e=>{e(this._originMediaStreamTrack.getSettings())}))}unbindProcessorContextEvents(e){e.removeAllListeners(vt.REQUEST_CONSTRAINTS)}initWebAudio(){return this._trackSource instanceof bi&&(this._trackSource=new $t(this._mediaStreamTrack,!1,this._getOriginVolumeLevel?this._mediaStreamTrack:void 0)),this._trackSource}initProcessor(){const e=new Si(this._source.context,this.getTrackId(),"local"),t=new yi(e);return this._processorContext=e,this._processorDestination=t,this.bindProcessorContextEvents(e),this.bindProcessorDestinationEvents(t),this._source.on(ht.UPDATE_SOURCE,(()=>{this.processor&&this.processor.updateInput({node:this._source.processSourceNode,context:e})})),this._useAudioElement&&(this._useAudioElement=!1,this.isPlaying&&(fi.stop(this.getTrackId()),this._source.play()),M(this,tt.NEED_REPLACE_MIXING_TRACK,this).then((()=>{me.debug("[".concat(this.getTrackId(),"] replace from origin track to web audio track success"))})).catch((e=>{me.warning("[".concat(this.getTrackId(),"] replace from origin track to web audio track failed"),e)}))),{processorContext:e,processorDestination:t}}}).prototype,"setVolume",[Wi],Object.getOwnPropertyDescriptor(sr.prototype,"setVolume"),sr.prototype),Rt(sr.prototype,"setPlaybackDevice",[Fi,Gi],Object.getOwnPropertyDescriptor(sr.prototype,"setPlaybackDevice"),sr.prototype),Rt(sr.prototype,"setEnabled",[Bi,Ki,Hi],Object.getOwnPropertyDescriptor(sr.prototype,"setEnabled"),sr.prototype),Rt(sr.prototype,"setMuted",[Yi,Xi,zi],Object.getOwnPropertyDescriptor(sr.prototype,"setMuted"),sr.prototype),Rt(sr.prototype,"getStats",[ji],Object.getOwnPropertyDescriptor(sr.prototype,"getStats"),sr.prototype),Rt(sr.prototype,"setAudioFrameCallback",[Qi],Object.getOwnPropertyDescriptor(sr.prototype,"setAudioFrameCallback"),sr.prototype),Rt(sr.prototype,"play",[Ji,qi],Object.getOwnPropertyDescriptor(sr.prototype,"play"),sr.prototype),Rt(sr.prototype,"stop",[$i,er],Object.getOwnPropertyDescriptor(sr.prototype,"stop"),sr.prototype),Rt(sr.prototype,"close",[tr],Object.getOwnPropertyDescriptor(sr.prototype,"close"),sr.prototype),Rt(sr.prototype,"pipe",[ir],Object.getOwnPropertyDescriptor(sr.prototype,"pipe"),sr.prototype),Rt(sr.prototype,"unpipe",[rr],Object.getOwnPropertyDescriptor(sr.prototype,"unpipe"),sr.prototype),sr),Rr=(or=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),nr=Ti(),ar=$("MicrophoneAudioTrack","_enabledMutex"),cr=fe({argsMap:(e,t,i)=>[e.getTrackId(),t,i]}),dr=Ti(),ur=fe({argsMap:e=>[e.getTrackId()]}),Rt((hr=class extends Ar{get __className__(){return"MicrophoneAudioTrack"}constructor(e,t,i,r){super(e,t.encoderConfig?He(t.encoderConfig):{},r,u("GET_VOLUME_OF_MUTED_AUDIO_TRACK")),Ct(this,"_config",void 0),Ct(this,"_deviceName","default"),Ct(this,"_constraints",void 0),Ct(this,"_originalConstraints",void 0),Ct(this,"_enabled",!0),this._config=t,this._constraints=i,this._originalConstraints=i,this._deviceName=e.label,"boolean"==typeof t.bypassWebAudio&&(this._bypassWebAudio=t.bypassWebAudio),(Y()||te())&&Ut.bindInterruptDetectorTrack(this)}async setDevice(e){if(me.info("[".concat(this.getTrackId(),"] start set device to ").concat(e)),this._enabled)try{const t=await hi.getDeviceById(e),i={};i.audio=Nt({},this._constraints),i.audio.deviceId={exact:e},this._originMediaStreamTrack.stop();let r=null;try{r=await ni(i,this.getTrackId())}catch(e){throw me.error("[".concat(this.getTrackId(),"] setDevice failed"),e.toString()),r=await ni({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 me.error("[".concat(this.getTrackId(),"] setDevice error"),e.toString()),e}else try{const t=await hi.getDeviceById(e);this._deviceName=t.label,this._config.microphoneId=e,this._constraints.deviceId={exact:e}}catch(e){throw me.error("[".concat(this.getTrackId(),"] setDevice error"),e.toString()),e}me.info("[".concat(this.getTrackId(),"] set device to ").concat(e," success"))}async setEnabled(e,t,i){if(t)return me.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(me.info("[".concat(this.getTrackId(),"] start setEnabled"),e),u("AUTO_RESET_AUDIO_ROUTE")&&(L()||P())){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 M(this,tt.NEED_DISABLE_TRACK,this)}catch(e){throw me.error("[".concat(this.getTrackId(),"] setEnabled false failed"),e.toString()),e}return}const s=Nt({},this._constraints),o=hi.searchDeviceIdByName(this._deviceName);o&&!s.deviceId&&(s.deviceId=o);try{i||(this._enabled=!0);const e=await ni({audio:this._constraints},this.getTrackId());await this._updateOriginMediaStreamTrack(e.getAudioTracks()[0],!1),await M(this,tt.NEED_ENABLE_TRACK,this)}catch(e){throw i||(this._enabled=!1),me.error("[".concat(this.getTrackId(),"] setEnabled true failed"),e.toString()),e}me.info("[".concat(this.getTrackId(),"] setEnabled success"))}close(){super.close(),(Y()||te())&&Ut.unbindInterruptDetectorTrack(this),je()||Wt()}onTrackEnded(){if((L()||P())&&this._enabled&&!this._isClosed&&Ut.duringInterruption){const e=async()=>{Ut.off(Oe.IOS_INTERRUPTION_END,e),this._enabled&&!this._isClosed&&(me.debug("[".concat(this.getTrackId(),"] try capture microphone media device for interrupted iOS device.")),await this.setEnabled(!1),await this.setEnabled(!0))};Ut.on(Oe.IOS_INTERRUPTION_END,e)}else me.debug("[".concat(this.getTrackId(),"] track ended")),this.safeEmit(ct.TRACK_ENDED)}async renewMediaStreamTrack(e){const t=e||this._constraints,i=hi.searchDeviceIdByName(this._deviceName);if(i&&!t.deviceId&&(t.deviceId=i),this._constraints=t,this._enabled){this._originMediaStreamTrack.stop();const e=await ni({audio:this._constraints},this.getTrackId());await this._updateOriginMediaStreamTrack(e.getAudioTracks()[0],!0)}}bindProcessorContextEvents(e){super.bindProcessorContextEvents(e),e.on(vt.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(vt.REQUEST_UPDATE_CONSTRAINTS)}}).prototype,"setDevice",[or,nr],Object.getOwnPropertyDescriptor(hr.prototype,"setDevice"),hr.prototype),Rt(hr.prototype,"setEnabled",[ar,cr,dr],Object.getOwnPropertyDescriptor(hr.prototype,"setEnabled"),hr.prototype),Rt(hr.prototype,"close",[ur],Object.getOwnPropertyDescriptor(hr.prototype,"close"),hr.prototype),hr),wr=(lr=fe({argsMap:(e,t)=>[e.getTrackId(),t,e.duration]}),pr=Ti(),mr=fe({argsMap:e=>[e.getTrackId()]}),gr=Ti(),_r=fe({argsMap:e=>[e.getTrackId()]}),fr=Ti(),Tr=fe({argsMap:e=>[e.getTrackId()]}),vr=Ti(),Er=fe({argsMap:e=>[e.getTrackId()]}),yr=Ti(),Sr=fe({argsMap:e=>[e.getTrackId()]}),br=fe({argsMap:e=>[e.getTrackId()]}),kr=Ti(),Rt((Ir=class extends Ar{get __className__(){return"BufferSourceAudioTrack"}constructor(e,t,i,r){super(t.createOutputTrack(),i,r),Ct(this,"source",void 0),Ct(this,"_bufferSource",void 0),this._useAudioElement=!1,this.source=e,this._bufferSource=t,this._bufferSource.on(ht.AUDIO_SOURCE_STATE_CHANGE,(e=>{this.safeEmit(ct.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(e,"speed",0),this._bufferSource.setAudioBufferPlaybackSpeed(e)}}).prototype,"startProcessAudioBuffer",[lr,pr],Object.getOwnPropertyDescriptor(Ir.prototype,"startProcessAudioBuffer"),Ir.prototype),Rt(Ir.prototype,"pauseProcessAudioBuffer",[mr,gr],Object.getOwnPropertyDescriptor(Ir.prototype,"pauseProcessAudioBuffer"),Ir.prototype),Rt(Ir.prototype,"seekAudioBuffer",[_r,fr],Object.getOwnPropertyDescriptor(Ir.prototype,"seekAudioBuffer"),Ir.prototype),Rt(Ir.prototype,"resumeProcessAudioBuffer",[Tr,vr],Object.getOwnPropertyDescriptor(Ir.prototype,"resumeProcessAudioBuffer"),Ir.prototype),Rt(Ir.prototype,"stopProcessAudioBuffer",[Er,yr],Object.getOwnPropertyDescriptor(Ir.prototype,"stopProcessAudioBuffer"),Ir.prototype),Rt(Ir.prototype,"close",[Sr],Object.getOwnPropertyDescriptor(Ir.prototype,"close"),Ir.prototype),Rt(Ir.prototype,"setAudioBufferPlaybackSpeed",[br,kr],Object.getOwnPropertyDescriptor(Ir.prototype,"setAudioBufferPlaybackSpeed"),Ir.prototype),Ir);class Cr extends Ar{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=Ft().createMediaStreamDestination();super(e.stream.getAudioTracks()[0],void 0,R(8,"track-mix-")),Ct(this,"trackList",void 0),Ct(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)?(me.debug("add ".concat(e.getTrackId()," to mixing track")),e._source.outputNode.connect(this.destNode),this.trackList.push(e),this.updateEncoderConfig()):me.debug("track ".concat(e.getTrackId()," is already added"))}removeAudioTrack(e){if(-1!==this.trackList.indexOf(e)){me.debug("remove ".concat(e.getTrackId()," from mixing track"));try{e._source.outputNode.disconnect(this.destNode)}catch(e){}O(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 Cr?t.emit(at.TRANSCEIVER_UPDATED,e):t._updateRtpTransceiver(e)})))}}class Dr extends qt{set currentState(e){e!==this._currentState&&(this._currentState=e,this.safeEmit(ht.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(),Ct(this,"audioBuffer",void 0),Ct(this,"sourceNode",void 0),Ct(this,"startPlayTime",0),Ct(this,"startPlayOffset",0),Ct(this,"pausePlayTime",0),Ct(this,"options",void 0),Ct(this,"currentLoopCount",0),Ct(this,"currentPlaybackSpeed",100),Ct(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):me.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 Nr=new Map;function Mr(e,t){if(0===e.length||0===t.length)return 1/0;const i=se(e),r=se(t);return Math.floor(r/i)}class Or{get rendFrameRate(){const e=Math.max(1,Mr(this._render_interframe_delays_sizes,this._render_interframe_delays));return Math.floor(1e3/e)}get videoElementStatus(){return this._isInPage?this._videoElementStatus:bt.DESTROYED}set videoElementStatus(e){e!==this._videoElementStatus&&(me.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){Ct(this,"trackId",void 0),Ct(this,"config",void 0),Ct(this,"onFirstVideoFrameDecoded",void 0),Ct(this,"onFirstVideoFrameRender",void 0),Ct(this,"onVideoBufferReady",void 0),Ct(this,"onVideoStateChanged",void 0),Ct(this,"freezeTimeCounterList",[]),Ct(this,"renderFreezeAccTime",0),Ct(this,"renderFreezeAccTime2",0),Ct(this,"totalFreezeTime",0),Ct(this,"isKeepLastFrame",!1),Ct(this,"isDestroyed",!1),Ct(this,"timeUpdatedCount",0),Ct(this,"freezeTime",0),Ct(this,"playbackTime",0),Ct(this,"lastTimeUpdatedTime",0),Ct(this,"autoplayFailed",!1),Ct(this,"videoTrack",void 0),Ct(this,"videoElement",void 0),Ct(this,"cacheVideoElement",void 0),Ct(this,"cancelRVFId",void 0),Ct(this,"internal",!1),Ct(this,"_render_interframe_delays",[]),Ct(this,"_render_interframe_delays_sizes",[]),Ct(this,"_videoState",kt.VideoStateStopped),Ct(this,"videoElementCheckInterval",void 0),Ct(this,"videoElementFreezeTimeout",void 0),Ct(this,"_videoElementStatus",bt.NONE),Ct(this,"_isInPage",!0),Ct(this,"isGettingVideoDimensions",!1),Ct(this,"startGetVideoDimensions",(()=>{const e=()=>{if(this.isGettingVideoDimensions=!0,this.videoElement.videoWidth*this.videoElement.videoHeight>4)return me.debug("[".concat(this.trackId,"] current video dimensions:"),this.videoElement.videoWidth,this.videoElement.videoHeight),void(this.isGettingVideoDimensions=!1);setTimeout(e,500)};!this.isGettingVideoDimensions&&e()})),Ct(this,"autoResumeAfterInterruption",(()=>{this.videoTrack&&"live"===this.videoTrack.readyState&&"running"===Ut.curState&&(me.debug("[track-".concat(this.trackId,"] video element paused, auto resume for ").concat(oe())),ne()?(this.videoElement.srcObject=null,this.videoElement.srcObject=new MediaStream([this.videoTrack]),this.videoElement.play()):(this.videoElement.pause(),this.videoElement.play()))})),Ct(this,"handleVideoEvents",(e=>{switch(e.type){case"play":case"playing":"play"===e.type&&me.debug("[".concat(this.trackId,"] video element status: play")),this.startGetVideoDimensions(),this.videoElementStatus=bt.PLAYING;break;case"loadeddata":if(this.videoState=kt.VideoStateStarting,this.onFirstVideoFrameRender&&this.onFirstVideoFrameRender(),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=bt.CANPLAY;break;case"stalled":this.videoElementStatus=bt.STALLED;break;case"suspend":this.videoElementStatus=bt.SUSPEND;break;case"pause":this.videoElementStatus=bt.PAUSED,L()||P()||c()&&this.autoplayFailed||!this.videoTrack||"live"!==this.videoTrack.readyState||(me.debug("[track-".concat(this.trackId,"] video element paused, auto resume")),this.videoElement.play());break;case"waiting":this.videoElementStatus=bt.WAITING;break;case"abort":this.videoElementStatus=bt.ABORT;break;case"ended":this.videoElementStatus=bt.ENDED;break;case"emptied":this.videoElementStatus=bt.EMPTIED;break;case"error":{const e=this.videoElement.error;e&&(this.videoElementStatus=bt.ERROR,me.error("[".concat(this.trackId,"] media error: ").concat(e.message," (").concat(e.code,")")));break}case"timeupdate":{const e=performance.now();if(this.timeUpdatedCount+=1,this.onVideoBufferReady&&this.timeUpdatedCount>u("BUFFER_READY_FRAMES")&&this.onVideoBufferReady(),this.timeUpdatedCount<10)return void(this.lastTimeUpdatedTime=e);const t=e-this.lastTimeUpdatedTime,i=this.lastTimeUpdatedTime;if(this.lastTimeUpdatedTime=e,Xs.lastVisibleTime<Xs.lastHiddenTime||i<Xs.lastHiddenTime||i<Xs.lastVisibleTime)return;if(this.isSkipCalcRenderFreezeTime())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}}})),Ct(this,"autoResumeAfterInterruptionOnIOS15_16",(()=>{this.videoTrack&&"live"===this.videoTrack.readyState&&(me.debug("[track-".concat(this.trackId,"] video element paused, auto resume for ").concat(oe())),ne()?(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"),Ut.on(Oe.IOS_INTERRUPTION_END,this.autoResumeAfterInterruption),Ut.on(Oe.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&&gi(t,"video",e.message,this.trackId),"NotAllowedError"===e.name?(me.warning("detected video element autoplay failed",e),this.autoplayFailed=!0,this.handleAutoPlayFailed()):me.warning("[".concat(this.trackId,"] play warning: "),e)}));const r=e();if(("Safari"===r.name&&15===Number(r.version)||Y())&&i&&i.then){const e=()=>{this.config.mirror&&!this.config.noStyle&&(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 me.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 Ui(e);r({buffer:t,width:i.width,height:i.height})}else s(new b(k.CONVERTING_VIDEO_FRAME_TO_BLOB_FAILED))}),e,t<0?.1:t>1?1:t)}))):await xi(e)}destroy(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isDestroyed=!0,Ut.off(Oe.IOS_INTERRUPTION_END,this.autoResumeAfterInterruption),Ut.off(Oe.IOS_15_16_INTERRUPTION_END,this.autoResumeAfterInterruptionOnIOS15_16),e?this.videoElement.pause():this.videoElement.srcObject=null,this.resetVideoElement(),this.freezeTimeCounterList=[],this.videoState=kt.VideoStateStopped}initVideoElement(){if(this._videoElementStatus!==bt.NONE&&this._videoElementStatus!==bt.DESTROYED||(this.videoElementStatus=bt.INIT),!this.videoElementCheckInterval&&(Lr.forEach((e=>{this.videoElement.addEventListener(e,this.handleVideoEvents)})),this.videoElementCheckInterval=window.setInterval((()=>{this._isInPage=re(this.videoElement)}),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===kt.VideoStateDecoding&&("visible"===document.visibilityState?this.videoState=kt.VideoStateFrozen:document.addEventListener("visibilitychange",r))},o=(t,i)=>{if(this.videoElementStatus===bt.PLAYING){if(e){const t=i.presentationTime-e.presentationTime,r=i.presentedFrames-e.presentedFrames;this._render_interframe_delays_sizes.push(r),this._render_interframe_delays.push(t);const o=se(this._render_interframe_delays_sizes),n=o-this._render_interframe_delays_sizes[0];if(o>30&&n>5&&(this._render_interframe_delays_sizes.shift(),this._render_interframe_delays.shift()),this.videoState===kt.VideoStateStarting&&(this.videoState=kt.VideoStateDecoding),this.videoState===kt.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===kt.VideoStateFrozen&&(this.videoState=kt.VideoStateDecoding),t>u("VIDEO_FREEZE_DURATION")&&Xs.lastVisibleTime>=Xs.lastHiddenTime&&e.timestamp>Xs.lastVisibleTime&&e.timestamp>Xs.lastHiddenTime){const e=Math.min(66,Mr(this._render_interframe_delays_sizes,this._render_interframe_delays)),i=Math.max(0,t-(r-1)*e),s=i>e?i:0;this.renderFreezeAccTime2+=s,this.totalFreezeTime+=s,this.renderFreezeAccTime+=t}}e=Nt(Nt({},i),{},{timestamp:t})}else this.isSkipCalcRenderFreezeTime()&&(e=Nt(Nt({},i),{},{timestamp:t}));var r,n;u("ENABLE_VIDEO_FRAME_CALLBACK")&&(this.cancelRVFId=null===(r=(n=this.videoElement).requestVideoFrameCallback)||void 0===r?void 0:r.call(n,o))};this.cancelRVFId=null===(t=(i=this.videoElement).requestVideoFrameCallback)||void 0===t?void 0:t.call(i,o)}this.videoElement.controls=!1,this.videoElement.setAttribute("playsinline",""),F()&&!u("HIDE_NO_POSTER")&&(this.videoElement.poster="noposter");const r=e();if(this.config.noStyle||("Safari"===r.name&&15===Number(r.version)||Y()||!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=>{me.debug("[".concat(this.trackId,"] playback interrupted"),e.toString())}))}resetVideoElement(){var e,t;(Lr.forEach((e=>{this.videoElement&&this.videoElement.removeEventListener(e,this.handleVideoEvents)})),this.videoElementCheckInterval&&(window.clearInterval(this.videoElementCheckInterval),this.videoElementCheckInterval=void 0),this.cancelRVFId&&this.videoElement)&&(null===(e=(t=this.videoElement).cancelVideoFrameCallback)||void 0===e||e.call(t,this.cancelRVFId),this.cancelRVFId=void 0);this.videoElementStatus=bt.NONE}isSkipCalcRenderFreezeTime(){return this.videoElementStatus===bt.DESTROYED||this.internal}handleAutoPlayFailed(){const e=t=>{t.preventDefault(),this.videoElement.play().then((()=>{me.debug("[".concat(this.trackId,"] Video element for trackId:").concat(this.trackId," autoplay resumed."))})).catch((e=>{me.error(e)})),this.autoplayFailed=!1,K()?document.body.removeEventListener("click",e,!0):(document.body.removeEventListener("touchstart",e,!0),document.body.removeEventListener("mousedown",e,!0))};K()?document.body.addEventListener("click",e,!0):(document.body.addEventListener("touchstart",e,!0),document.body.addEventListener("mousedown",e,!0)),mi()}}const Lr=["play","playing","loadeddata","canplay","pause","stalled","suspend","waiting","abort","emptied","ended","timeupdate","error"];class Pr extends Or{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];super(e),Ct(this,"container",void 0),Ct(this,"slot",void 0),this.slot=e.element,this.internal=t,this.updateConfig(e)}updateConfig(e){this.config=e,this.trackId=e.trackId;const t=e.element;var i;!this.internal||this.slot?(t!==this.slot&&(this.destroy(),this.slot=t),this.createElements()):(this.slot=t,t&&this.container?(this.internal=!1,this.container.id="agora-video-player-".concat(this.trackId),this.videoElement.id="video_".concat(this.trackId),this.config.fit?this.videoElement.style.objectFit=this.config.fit:this.videoElement.style.objectFit="cover",null===(i=this.slot)||void 0===i||i.appendChild(this.container)):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 xi(e)}destroy(){if(super.destroy(),this.videoElement.remove(),this.videoElement=document.createElement("video"),this.container){try{var e;this.container.remove(),null===(e=this.slot)||void 0===e||e.removeChild(this.container)}catch(e){}this.container=void 0}}createElements(){var e;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(),null===(e=this.slot)||void 0===e||e.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 Vr,xr,Ur,Zr,Wr,Fr,Gr,Br,Kr,Hr,Yr,Xr,zr,jr,Qr,Jr,qr,$r,es,ts,is,rs,ss,os,ns,as,cs,ds,us,hs,ls,ps,ms,gs,_s,fs,Ts,vs;let Es=(Vr=fe({argsMap:(e,t,i)=>[e.getTrackId(),"string"==typeof t?t:t instanceof HTMLVideoElement?"HTMLVideoElement":"HTMLElement",i]}),xr=Ti(),Ur=fe({argsMap:e=>[e.getTrackId()]}),Zr=$("LocalVideoTrack","_enabledMutex"),Wr=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),Fr=Ti(),Gr=$("LocalVideoTrack","_enabledMutex"),Br=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),Kr=Ti(),Hr=fe({argsMap:(e,t)=>[e.getTrackId(),t,e._saveEncodeBitrateRatio]}),Yr=Ti(),Xr=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),zr=Ti(),jr=Ti(),Qr=fe({argsMap:(e,t,i)=>[e.getTrackId(),t,i]}),Jr=Ti(),qr=Ti(),$r=Ti(),es=fe({argsMap:e=>[e.getTrackId()]}),ts=Ti(),is=Ti(),rs=Ti(),ss=Ti(),os=Ti(),ns=fe({argsMap:(e,t)=>[e.getTrackId(),t.name]}),as=fe({argsMap:e=>[e.getTrackId()]}),cs=fe({argsMap:e=>[e.getTrackId()]}),ds=fe({argsMap:(e,t,i)=>[e.getTrackId(),t.label,i]}),us=class e extends Lt{get videoHeight(){if(c()){const e=this._mediaStreamTrack.getSettings().height;return this._videoHeight=e,this._videoHeight}return this._videoHeight}get videoWidth(){if(c()){const e=this._mediaStreamTrack.getSettings().width;return this._videoWidth=e,this._videoWidth}return this._videoWidth}get isPlaying(){return!(!this._player||this._player.videoElementStatus!==bt.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),Ct(this,"trackMediaType",ut.VIDEO),Ct(this,"_player",void 0),Ct(this,"isUseScaleResolutionDownBy",!1),Ct(this,"_videoVisibleTimer",null),Ct(this,"_previousVideoVisibleStatus",void 0),Ct(this,"_clearPreviousVideoVisibleStatus",(()=>this._previousVideoVisibleStatus=void 0)),Ct(this,"_encoderConfig",void 0),Ct(this,"_scalabilityMode",{numSpatialLayers:1,numTemporalLayers:1}),Ct(this,"_optimizationMode",void 0),Ct(this,"_saveEncodeBitrateRatio",1),Ct(this,"_videoHeight",void 0),Ct(this,"_videoWidth",void 0),Ct(this,"_forceBitrateLimit",void 0),Ct(this,"_enabled",!0),Ct(this,"_processorDestination",void 0),Ct(this,"_processorContext",void 0),c()){const t=e.getSettings(),i=t.width,r=t.height;this._videoWidth=i,this._videoHeight=r}else this.updateMediaStreamTrackResolution();if(this._scalabilityMode=r,this._optimizationMode=s,this._hints=n||[],i&&-1!==this._hints.indexOf(it.CUSTOM_TRACK)?this._encoderConfig=ae(i):this._encoderConfig=i,-1===this._hints.indexOf(it.SCREEN_TRACK))this.updateBitrateFromProfile();else if(ce(t.CHROME,115)&&de()){const t=Zi(e);t&&(me.info("local screen video track begin to inject frame"),this._mediaStreamTrack=t)}i&&-1!==this._hints.indexOf(it.CUSTOM_TRACK)&&this.setEncoderConfiguration(i),this._processorContext=new Ei(this.getTrackId(),"local"),this._processorDestination=new vi(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:(me.warning("[".concat(this.getTrackId(),'] can not find "#').concat(e,'" element, use document.body')),e=document.body)}me.debug("[".concat(this.getTrackId(),"] start video playback in ").concat(e instanceof HTMLVideoElement?"HTMLVideoElement":"HTMLElement"),JSON.stringify(t));const i=Nt(Nt(Nt({},this._getDefaultPlayerConfig()),t),{},{trackId:this.getTrackId(),element:e});this._player?this._player.updateConfig(i):(e instanceof HTMLVideoElement?this._player=new Or(i):this._player=new Pr(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(ct.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,me.debug("[".concat(this.getTrackId(),"] stop video playback")))}async setEnabled(e,t){if(!t){if(e===this._enabled)return;this.stateCheck("enabled",e)}if(me.info("[".concat(this.getTrackId(),"] start setEnabled"),e),!e){this._originMediaStreamTrack.enabled=!1;try{await M(this,tt.NEED_DISABLE_TRACK,this)}catch(e){throw me.error("[".concat(this.getTrackId(),"] setEnabled to false error"),e.toString()),e}return t||(this._enabled=!1),void me.info("[".concat(this.getTrackId(),"] setEnabled to false success"))}this._originMediaStreamTrack.enabled=!0;try{await M(this,tt.NEED_ENABLE_TRACK,this)}catch(e){throw me.error("[".concat(this.getTrackId(),"] setEnabled to true error"),e.toString()),e}me.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,me.debug("[".concat(this.getTrackId(),"] start set muted: ").concat(e)),e?await M(this,tt.NEED_MUTE_TRACK,this):await M(this,tt.NEED_UNMUTE_TRACK,this))}async setSaveEncodeBitrateRatio(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._saveEncodeBitrateRatio;if(1!==this._saveEncodeBitrateRatio&&this._encoderConfig&&this._encoderConfig.bitrateMax&&this._encoderConfig.bitrateMin){this._encoderConfig.bitrateMin=Math.floor(this._encoderConfig.bitrateMin*e),this._encoderConfig.bitrateMax=Math.floor(this._encoderConfig.bitrateMax*e),me.debug("[".concat(this.getTrackId(),"] set save encode bitrate ratio, ").concat(e)),this._saveEncodeBitrateRatio=1;try{await M(this,tt.NEED_UPDATE_VIDEO_ENCODER,this)}catch(e){return e.throw(me)}}}async setEncoderConfiguration(e,t){if(!this._enabled)throw new b(k.TRACK_IS_DISABLED,"can not set encoder configuration when track is disabled");if(e=Fe(e),u("USE_STANDARD_BITRATE_DEFAULT")&&(delete e.bitrateMax,delete e.bitrateMin),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=Ai({encoderConfig:e});(c()||L()||P())&&(t.deviceId=void 0),me.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 b(k.UNEXPECTED_ERROR,e.toString());throw me.error("[".concat(this.getTrackId(),"] applyConstraints error"),t.toString()),t}}this._encoderConfig=e,-1===this._hints.indexOf(it.SCREEN_TRACK)&&this.updateBitrateFromProfile();try{await M(this,tt.NEED_UPDATE_VIDEO_ENCODER,this)}catch(e){return e.throw(me)}}getStats(){w((()=>{me.warning("[deprecated] LocalVideoTrack.getStats will be removed in the future, use AgoraRTCClient.getLocalVideoStats instead")}),"localVideoTrackGetStatsWarning");const e=ee(this,tt.GET_STATS);return e||Nt({},mt)}async setBeautyEffect(e){me.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 xi(e)}async findClosestProfile(){const e=this.getMediaStreamTrackSettings(),t=e.width,i=e.height,r=e.frameRate,s=this._encoderConfig||{},o=s.width,n=s.height,a=s.frameRate,c=Q(this._videoWidth||t||o||0),d=Q(this._videoHeight||i||n||0),u=Mi(c,d,Q(r||a||15));if(u)return me.debug("[".concat(this.getTrackId(),"] find closest profile, ").concat(c,"x").concat(d," => ").concat(JSON.stringify(u))),this.setEncoderConfiguration(u)}async setBitrateLimit(e){me.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))}async setOptimizationMode(e){if("motion"!==e&&"detail"!==e&&"balanced"!==e)return void me.error(k.INVALID_PARAMS,"optimization mode must be motion, detail or balanced");const t=this._optimizationMode;try{this._optimizationMode=e,await M(this,tt.NEED_UPDATE_VIDEO_SEND_PARAMETERS,this)}catch(e){throw this._optimizationMode=t,me.error("[".concat(this.getTrackId(),"] set optimization mode failed"),e.toString()),e}me.info("[".concat(this.getTrackId(),"] set optimization mode success (").concat(e,")"))}setScalabiltyMode(e){if(1===e.numSpatialLayers&&1!==e.numTemporalLayers)return me.error(k.INVALID_PARAMS,"scalability mode currently not supported, no SVC."),void(this._scalabilityMode={numSpatialLayers:1,numTemporalLayers:1});this._scalabilityMode=e,me.info("[".concat(this.getTrackId(),"] set scalability mode success (").concat(e,")"))}updateMediaStreamTrackResolution(){Ii(this._originMediaStreamTrack).then((e=>{let t=Mt(e,2),i=t[0],r=t[1];this._videoHeight=r,this._videoWidth=i})).catch(z)}_updatePlayerSource(){this._player&&this._player.updateVideoTrack(this._mediaStreamTrack)}_getDefaultPlayerConfig(){return{fit:"contain"}}async setSenderConfiguration(e){if(!this._enabled)throw new b(k.TRACK_IS_DISABLED,"can not set encoder configuration when track is disabled");me.debug("[".concat(this.getTrackId(),"] setSenderConfiguration applyConstraints"),JSON.stringify(e)),e=Fe(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(it.SCREEN_TRACK)&&this.updateBitrateFromProfile();try{await M(this,tt.NEED_UPDATE_VIDEO_ENCODER,this)}catch(e){return e.throw(me)}}updateBitrateFromProfile(){if(!this._encoderConfig)return;const e=this.getMediaStreamTrackSettings(),t=e.width,i=e.height,r=e.frameRate;if(!t||!i||!r)return;const s=this._encoderConfig,o=s.bitrateMax,n=s.bitrateMin;if(null==n||null==o){const e=Oi(t,i,r,n,o),s=e.max,a=e.min;if(this._encoderConfig.bitrateMin=a,this._encoderConfig.bitrateMax=s,u("VIDEO_STANDARD_BITRATE_VERSION")&&null==n&&null==o){const e=Mt(Ni(t,i,r),2),s=e[0],o=e[1];this._encoderConfig.bitrateMax=s,this._encoderConfig.bitrateMin=a?Math.min(a,s):s,this._saveEncodeBitrateRatio=o,me.debug("[".concat(this.getTrackId(),"] update new bitrate from profile, [w: ").concat(t,", h: ").concat(i,", fps: ").concat(r,"] => [brMax: ").concat(this._encoderConfig.bitrateMax,", brMin: ").concat(this._encoderConfig.bitrateMin,", save_bitrate_ratio: ").concat(this._saveEncodeBitrateRatio,"]"))}else me.debug("[".concat(this.getTrackId(),"] update bitrate from profile, [w: ").concat(t,", h: ").concat(i,", fps: ").concat(r,"] => [brMax: ").concat(s,", brMin: ").concat(a,"]")),this._saveEncodeBitrateRatio=1}}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},s=r.element,o=r.slot;if(this.isPlaying&&s instanceof HTMLVideoElement&&o instanceof HTMLElement){const e=ue.checkOneElementVisible(s),t=Object.assign({},e);if(t.visible!==this._previousVideoVisibleStatus){this._previousVideoVisibleStatus=t.visible;const e=ge.reportApiInvoke(null,{tag:D.TRACER,name:C.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 b(k.GET_VIDEO_ELEMENT_VISIBLE_ERROR,e.message)}}async renewMediaStreamTrack(e){}pipe(e){if(this.processor===e)return e;if(e._source)throw new b(k.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=Nt(Nt({},r),Fe(t))),r=he(r);const s=R(8,"track-video-cloned-"),o=new e(i?this._mediaStreamTrack.clone():this._mediaStreamTrack,r,he(this._scalabilityMode),this._optimizationMode,s,he(this._hints));return t&&r&&o.setEncoderConfiguration(r),me.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 b(k.INVALID_PARAMS,"track should be an instance of MediaStreamTrack");if("video"!==e.kind)throw new b(k.INVALID_PARAMS,"track should be a video MediaStreamTrack");await this._updateOriginMediaStreamTrack(e,t,!0),this.updateMediaStreamTrackResolution()}sendSeiData(e){if(w((()=>{ge.reportApiInvoke(null,{name:C.LOCAL_VIDEO_SEND_SEI_DATA,options:[],tag:D.TRACER}).onSuccess("")}),this._mediaStreamTrack.id||this.getTrackId()),!u("ENABLE_VIDEO_SEI")||!u("ENABLE_ENCODED_TRANSFORM"))return void me.warning('To send/receive SEI, please call AgoraRTC.setParameter("ENABLE_VIDEO_SEI", true) before instantiate IAgoraRtcClient');if(e instanceof Uint8Array==!1)return new b(k.INVALID_PARAMS,"Invalid argument type, ILocalVideoTrack.sendSeiData() only accept Uint8Array argument.").throw();const t=this.getRTCRtpTransceiver();if(!t)return void me.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||"video/h265"===r?this.safeEmit("sei-to-send",e):me.warning("SEI is not supported by ".concat(r))}bindProcessorDestinationEvents(){this.processorDestination.on(Tt.ON_TRACK,(async e=>{e?e!==this._mediaStreamTrack&&(this._mediaStreamTrack=e,this._updatePlayerSource(),await M(this,tt.NEED_REPLACE_TRACK,this)):this._mediaStreamTrack!==this._originMediaStreamTrack&&(this._mediaStreamTrack=this._originMediaStreamTrack,this._updatePlayerSource(),await M(this,tt.NEED_REPLACE_TRACK,this))}))}unbindProcessorDestinationEvents(){this.processorDestination.removeAllListeners(Tt.ON_TRACK)}unbindProcessorContextEvents(){this.processorContext.removeAllListeners(vt.REQUEST_UPDATE_CONSTRAINTS),this.processorContext.removeAllListeners(vt.REQUEST_CONSTRAINTS)}},Rt(us.prototype,"play",[Vr,xr],Object.getOwnPropertyDescriptor(us.prototype,"play"),us.prototype),Rt(us.prototype,"stop",[Ur],Object.getOwnPropertyDescriptor(us.prototype,"stop"),us.prototype),Rt(us.prototype,"setEnabled",[Zr,Wr,Fr],Object.getOwnPropertyDescriptor(us.prototype,"setEnabled"),us.prototype),Rt(us.prototype,"setMuted",[Gr,Br,Kr],Object.getOwnPropertyDescriptor(us.prototype,"setMuted"),us.prototype),Rt(us.prototype,"setSaveEncodeBitrateRatio",[Hr,Yr],Object.getOwnPropertyDescriptor(us.prototype,"setSaveEncodeBitrateRatio"),us.prototype),Rt(us.prototype,"setEncoderConfiguration",[Xr,zr],Object.getOwnPropertyDescriptor(us.prototype,"setEncoderConfiguration"),us.prototype),Rt(us.prototype,"getStats",[jr],Object.getOwnPropertyDescriptor(us.prototype,"getStats"),us.prototype),Rt(us.prototype,"setBeautyEffect",[Qr,Jr],Object.getOwnPropertyDescriptor(us.prototype,"setBeautyEffect"),us.prototype),Rt(us.prototype,"getCurrentFrameData",[qr],Object.getOwnPropertyDescriptor(us.prototype,"getCurrentFrameData"),us.prototype),Rt(us.prototype,"getCurrentFrameImage",[$r],Object.getOwnPropertyDescriptor(us.prototype,"getCurrentFrameImage"),us.prototype),Rt(us.prototype,"findClosestProfile",[es,ts],Object.getOwnPropertyDescriptor(us.prototype,"findClosestProfile"),us.prototype),Rt(us.prototype,"setBitrateLimit",[is],Object.getOwnPropertyDescriptor(us.prototype,"setBitrateLimit"),us.prototype),Rt(us.prototype,"setOptimizationMode",[rs],Object.getOwnPropertyDescriptor(us.prototype,"setOptimizationMode"),us.prototype),Rt(us.prototype,"setScalabiltyMode",[ss],Object.getOwnPropertyDescriptor(us.prototype,"setScalabiltyMode"),us.prototype),Rt(us.prototype,"updateMediaStreamTrackResolution",[os],Object.getOwnPropertyDescriptor(us.prototype,"updateMediaStreamTrackResolution"),us.prototype),Rt(us.prototype,"pipe",[ns],Object.getOwnPropertyDescriptor(us.prototype,"pipe"),us.prototype),Rt(us.prototype,"unpipe",[as],Object.getOwnPropertyDescriptor(us.prototype,"unpipe"),us.prototype),Rt(us.prototype,"close",[cs],Object.getOwnPropertyDescriptor(us.prototype,"close"),us.prototype),Rt(us.prototype,"replaceTrack",[ds],Object.getOwnPropertyDescriptor(us.prototype,"replaceTrack"),us.prototype),us),ys=(hs=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),ls=Ti(),ps=$("CameraVideoTrack","_enabledMutex"),ms=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),gs=Ti(),_s=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),fs=Ti(),Ts=fe({argsMap:e=>[e.getTrackId()]}),vs=class e extends Es{get __className__(){return"CameraVideoTrack"}constructor(e,t,i,r,s,o){super(e,Fe(t.encoderConfig),r,s,o),Ct(this,"_config",void 0),Ct(this,"_originalConstraints",void 0),Ct(this,"_constraints",void 0),Ct(this,"_enabled",!0),Ct(this,"_deviceName","default"),Ct(this,"tryResumeVideoForIOS15_16WeChat",(async()=>{(Y()||te())&&!le()&&pe()&&this._enabled&&!this._isClosed&&(me.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=Fe(this._config.encoderConfig),Ut.on(Oe.IOS_15_16_INTERRUPTION_END,this.tryResumeVideoForIOS15_16WeChat),Ut.on(Oe.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(me.info("[".concat(this.getTrackId(),"] set device to ").concat(e)),this._enabled)try{const t=await hi.getDeviceById(e),i={};i.video=Nt({},this._constraints),i.video.deviceId={exact:e},i.video.facingMode=void 0,this._originMediaStreamTrack.stop();let r=null;try{r=await ni(i,this.getTrackId())}catch(e){throw me.error("[".concat(this.getTrackId(),"] setDevice failed"),e.toString()),r=await ni({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 me.error("[".concat(this.getTrackId(),"] setDevice error"),e.toString()),e}else try{const t=await hi.getDeviceById(e);this._deviceName=t.label,this._config.cameraId=e,this._constraints.deviceId={exact:e}}catch(e){throw me.error("[".concat(this.getTrackId(),"] setDevice error"),e.toString()),e}me.info("[".concat(this.getTrackId(),"] setDevice success"))}async _setDeviceByFacingModel(e){me.info("[".concat(this.getTrackId(),"] set facingMode ").concat(e));const t={video:Nt(Nt({},this._constraints),{},{deviceId:void 0,facingMode:{exact:e}})};if(this._enabled){this._originMediaStreamTrack.stop();let e=null;try{e=await ni(t,this.getTrackId())}catch(t){throw me.error("[".concat(this.getTrackId(),"] setDeviceByFacingModel failed"),t.toString()),e=await ni({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=Nt({},t.video),me.info("[".concat(this.getTrackId(),"] setDeviceByFacingModel success"))}async setEnabled(e,t){if(!t){if(e===this._enabled)return;this.stateCheck("enabled",e)}if(me.info("[".concat(this.getTrackId(),"] start setEnabled"),e),e){try{if(this.isExternalTrack)this._originMediaStreamTrack.enabled=!0;else{const e=await ni({video:this._constraints},this.getTrackId());await this._updateOriginMediaStreamTrack(e.getVideoTracks()[0],!1)}await M(this,tt.NEED_ENABLE_TRACK,this)}catch(e){throw me.error("[".concat(this.getTrackId(),"] setEnabled true error"),e.toString()),e}this.updateMediaStreamTrackResolution(),me.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 M(this,tt.NEED_DISABLE_TRACK,this)}catch(e){throw me.error("[".concat(this.getTrackId(),"] setEnabled to false error"),e.toString()),e}me.info("[".concat(this.getTrackId(),"] setEnabled to false success"))}}async setEncoderConfiguration(e,t){if(!this._enabled)throw new b(k.TRACK_IS_DISABLED,"can not set encoder configuration when track is disabled");e=Fe(e),u("USE_STANDARD_BITRATE_DEFAULT")&&(delete e.bitrateMax,delete e.bitrateMin),this._forceBitrateLimit&&(e.bitrateMax=this._forceBitrateLimit.max_bitrate||e.bitrateMax,e.bitrateMin=this._forceBitrateLimit.min_bitrate||e.bitrateMin);const i=ae(this._config);i.encoderConfig=e;const r=Ai(i);(c()||L()||P())&&(r.deviceId=void 0),me.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 b(k.UNEXPECTED_ERROR,e.toString());throw me.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(it.SCREEN_TRACK)&&this.updateBitrateFromProfile();try{await M(this,tt.NEED_UPDATE_VIDEO_ENCODER,this)}catch(e){return e.throw(me)}}_getDefaultPlayerConfig(){return{mirror:!0,fit:"cover"}}onTrackEnded(){if((L()||P())&&this._enabled&&!this._isClosed&&Ut.duringInterruption){const e=async()=>{Ut.off(Oe.IOS_INTERRUPTION_END,e),this._enabled&&!this._isClosed&&(me.debug("[".concat(this.getTrackId(),"] try capture camera media device for interrupted iOS device.")),await this.setEnabled(!1),await this.setEnabled(!0))};Ut.on(Oe.IOS_INTERRUPTION_END,e)}else me.debug("[".concat(this.getTrackId(),"] track ended")),this.safeEmit(ct.TRACK_ENDED)}async renewMediaStreamTrack(e){const t=e||this._constraints,i=hi.searchDeviceIdByName(this._deviceName);if(i&&!t.deviceId&&(t.deviceId={exact:i}),this._enabled){const e=await ni({video:t},this.getTrackId());this._constraints=t,await this._updateOriginMediaStreamTrack(e.getVideoTracks()[0],!0),this.updateMediaStreamTrackResolution()}}close(){super.close(),Ut.off(Oe.IOS_15_16_INTERRUPTION_END,this.tryResumeVideoForIOS15_16WeChat),Ut.off(Oe.IOS_INTERRUPTION_END,this.tryResumeVideoForIOS15_16WeChat)}clone(t){let i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=this._encoderConfig;t&&(r=Nt(Nt({},r),Fe(t))),r=he(r);const s=R(8,"track-cam-cloned-"),o=new e(i?this._mediaStreamTrack.clone():this._mediaStreamTrack,he(Nt(Nt({},this._config),{},{encoderConfig:r})),he(this._constraints),he(this._scalabilityMode),this._optimizationMode,s);return t&&r&&o.setEncoderConfiguration(r),me.debug("clone track from ".concat(this.getTrackId()," to ").concat(s,", clone ").concat(i)),o}bindProcessorContextEvents(){this.processorContext.on(vt.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(vt.REQUEST_CONSTRAINTS,(async e=>{e(this._originMediaStreamTrack.getSettings())}))}},Rt(vs.prototype,"setDevice",[hs,ls],Object.getOwnPropertyDescriptor(vs.prototype,"setDevice"),vs.prototype),Rt(vs.prototype,"setEnabled",[ps,ms,gs],Object.getOwnPropertyDescriptor(vs.prototype,"setEnabled"),vs.prototype),Rt(vs.prototype,"setEncoderConfiguration",[_s,fs],Object.getOwnPropertyDescriptor(vs.prototype,"setEncoderConfiguration"),vs.prototype),Rt(vs.prototype,"close",[Ts],Object.getOwnPropertyDescriptor(vs.prototype,"close"),vs.prototype),vs);function Ss(e){const t=R(8,"track-cus-"),i=ge.reportApiInvoke(null,{id:t,tag:D.TRACER,name:C.CREATE_CUSTOM_AUDIO_TRACK,options:[e]}),r=new Ar(e.mediaStreamTrack,e.encoderConfig?He(e.encoderConfig):{},t,!1);return me.info("create custom audio track success with config",e,"trackId",r.getTrackId()),i.onSuccess(r.getTrackId()),r}async function bs(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=R(8,"track-mic-"),i=ge.reportApiInvoke(null,{id:t,tag:D.TRACER,name:C.CREATE_MIC_AUDIO_TRACK,options:[e]}),r=Di(e);let s=null;me.info("start create microphone audio track with config",JSON.stringify(e),"trackId",t);try{s=(await ni({audio:r},t)).getAudioTracks()[0]||null}catch(e){throw i.onError(e),e}if(!s){const e=new b(k.UNEXPECTED_ERROR,"can not find track in media stream");return i.onError(e),e.throw(me)}const o=new Rr(s,e,r,t);return i.onSuccess(o.getTrackId()),me.info("create microphone audio track success, trackId:",t),o}async function ks(e){var t;const i=e.cacheOnlineFile,r=e.encoderConfig;let s=e.source;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=R(8,"track-buf-"),a=ge.reportApiInvoke(null,{id:n,tag:D.TRACER,name:C.CREATE_BUFFER_AUDIO_TRACK,options:[o]});if(u("DISABLE_WEBAUDIO"))throw new b(k.NOT_SUPPORTED,"can not create BufferSourceAudioTrack when WebAudio disabled");me.info("start create buffer source audio track with config",JSON.stringify(o),"trackId",n);const c=s;if(!(s instanceof AudioBuffer))try{s=await async function(e,t){let i=null;if("string"==typeof e){const t=Nr.get(e);if(t)return me.debug("use cached audio resource: ",e),t;try{i=(await ie((()=>Te.get(e,{responseType:"arraybuffer"})),void 0,void 0,{maxRetryCount:3})).data}catch(e){throw new b(k.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 b(k.READ_LOCAL_AUDIO_FILE_ERROR))},r.onerror=()=>{i(new b(k.READ_LOCAL_AUDIO_FILE_ERROR))},r.readAsArrayBuffer(e)}));i=await t}const r=await Kt(i);return"string"==typeof e&&t&&Nr.set(e,r),r}(s,i)}catch(e){return a.onError(e),e.throw(me)}const d=new Dr(s),h=new wr(c,d,r?He(r):{},n);return me.info("create buffer source audio track success, trackId:",n),a.onSuccess(h.getTrackId()),h}function Is(e){const t=new Cr;return e.forEach((e=>t.addAudioTrack(e))),t}function As(e){const t=R(8,"track-cus-"),i=ge.reportApiInvoke(null,{id:t,tag:D.TRACER,name:C.CREATE_CUSTOM_VIDEO_TRACK,options:[e]});u("USE_STANDARD_BITRATE_DEFAULT")&&(delete e.bitrateMax,delete e.bitrateMin);const r=new Es(e.mediaStreamTrack,{width:e.width,height:e.height,frameRate:e.frameRate,bitrateMax:e.bitrateMax,bitrateMin:e.bitrateMin},e.scalabiltyMode?Be(e.scalabiltyMode):{numSpatialLayers:1,numTemporalLayers:1},e.optimizationMode,t,[it.CUSTOM_TRACK]);return i.onSuccess(r.getTrackId()),me.info("create custom video track success with config",e,"trackId",r.getTrackId()),r}async function Rs(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=u("CAMERA_CAPTURE_CONFIG"),i=R(8,"track-cam-"),r=ge.reportApiInvoke(null,{id:i,tag:D.TRACER,name:C.CREATE_CAM_VIDEO_TRACK,options:[Nt({},e),t]});t&&(e.encoderConfig=t);const s=Ai(e);let o=null;me.info("start create camera video track with config",JSON.stringify(e),"trackId",i);try{o=(await ni({video:s},i)).getVideoTracks()[0]||null}catch(e){throw r.onError(e),e}if(!o){const e=new b(k.UNEXPECTED_ERROR,"can not find track in media stream");return r.onError(e),e.throw(me)}if(e.optimizationMode&&Ds(i,o,e,Fe(e.encoderConfig)),u("USE_STANDARD_BITRATE_DEFAULT")){const t=Fe(e.encoderConfig);e.encoderConfig=t,delete t.bitrateMax,delete t.bitrateMin}const n=new ys(o,e,s,e.scalabiltyMode?Be(e.scalabiltyMode):{numSpatialLayers:1,numTemporalLayers:1},e.optimizationMode,i);return r.onSuccess(n.getTrackId()),me.info("create camera video success, trackId:",i),n}async function ws(){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=R(8,"track-mic-"),s=R(8,"track-cam-"),o=ge.reportApiInvoke(null,{id:"".concat(r,"-").concat(s),tag:D.TRACER,name:C.CREATE_MIC_AND_CAM_TRACKS,options:[e,t,i]});i&&(t.encoderConfig=i);const n=Ai(t),a=Di(e);let c=null,d=null;me.info("start create camera video track(".concat(s,") and microphone audio track(").concat(r,") with config, audio: ").concat(JSON.stringify(e),", video: ").concat(JSON.stringify(t)));try{const e=await ni({audio:a,video:n},"".concat(r,"-").concat(s));c=e.getAudioTracks()[0],d=e.getVideoTracks()[0]}catch(e){throw o.onError(e),e}if(!c||!d){const e=new b(k.UNEXPECTED_ERROR,"can not find tracks in media stream");return o.onError(e),e.throw(me)}if(t.optimizationMode&&Ds(s,d,t,Fe(t.encoderConfig)),u("USE_STANDARD_BITRATE_DEFAULT")){const e=Fe(t.encoderConfig);t.encoderConfig=e,delete e.bitrateMax,delete e.bitrateMin}const h=new Rr(c,e,a,r),l=new ys(d,t,n,t.scalabiltyMode?Be(t.scalabiltyMode):{numSpatialLayers:1,numTemporalLayers:1},t.optimizationMode,s);return o.onSuccess([h.getTrackId(),l.getTrackId()]),me.info("create camera video track(".concat(s,") and microphone audio track(").concat(r,") success")),[h,l]}async function Cs(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"disable";const i="object"==typeof t?Ci(t):void 0;i&&(t="auto");const r=R(8,"track-scr-v-"),s=ge.reportApiInvoke(null,{id:r,tag:D.TRACER,name:C.CREATE_SCREEN_VIDEO_TRACK,options:[Nt({},e),t]});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 o=Ri(e);let n=null,a=null;const c=ye();if(!c.supportShareAudio&&"enable"===t){const e=new b(k.NOT_SUPPORTED,"your browser or platform is not support share-screen with audio");return s.onError(e),e.throw(me)}me.info("start create screen video track with config",e,"withAudio",t,"trackId",r);const d=c.supportShareAudio&&"disable"!==t;try{const e=await ni({screen:o,screenAudio:d?i||!0:void 0},r);n=e.getVideoTracks()[0]||null,a=e.getAudioTracks()[0]||null}catch(e){throw s.onError(e),e}if(!n){const e=new b(k.UNEXPECTED_ERROR,"can not find track in media stream");return s.onError(e),e.throw(me)}if(!a&&"enable"===t){n&&n.stop();const e=new b(k.SHARE_AUDIO_NOT_ALLOWED);return s.onError(e),e.throw(me)}if(e.optimizationMode||(e.optimizationMode="detail"),e.optimizationMode){Ds(r,n,e,e.encoderConfig&&Ge(e.encoderConfig)||void 0),e.encoderConfig&&"string"!=typeof e.encoderConfig&&(e.encoderConfig.bitrateMin=e.encoderConfig.bitrateMax)}const u=new Es(n,e.encoderConfig?Ge(e.encoderConfig):{},e.scalabiltyMode?Be(e.scalabiltyMode):{numSpatialLayers:1,numTemporalLayers:1},e.optimizationMode,r,[it.SCREEN_TRACK]);if(!a)return s.onSuccess(u.getTrackId()),me.info("create screen video track success","video:",u.getTrackId()),u;const h=new Ar(a,void 0,R(8,"track-scr-a-"),!1);return s.onSuccess([u.getTrackId(),h.getTrackId()]),me.info("create screen video track success","video:",u.getTrackId(),"audio:",h.getTrackId()),[u,h]}function Ds(e,t,i,r){i.optimizationMode&&(r&&r.width&&r.height?(i.encoderConfig=Nt(Nt({},r),{},{bitrateMin:r.bitrateMin,bitrateMax:r.bitrateMax}),"motion"!==i.optimizationMode&&"detail"!==i.optimizationMode||(t.contentHint=i.optimizationMode,t.contentHint===i.optimizationMode?me.debug("[".concat(e,"] set content hint to"),i.optimizationMode):me.debug("[".concat(e,"] set content hint failed")))):me.warning("[".concat(e,"] can not apply optimization mode bitrate config, no encoderConfig")))}var Ns,Ms,Os,Ls,Ps,Vs,xs,Us,Zs,Ws,Fs,Gs,Bs;class Ks extends Ot{getUserId(){return this._userId}constructor(e,t,i,r){super(e,"track-".concat(e.kind,"-").concat(t,"-").concat(r.clientId,"_").concat(R(5,""))),Ct(this,"_userId",void 0),Ct(this,"_uintId",void 0),Ct(this,"_isDestroyed",!1),Ct(this,"store",void 0),Ct(this,"processor",void 0),Ct(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,me.info("[".concat(this.getTrackId(),"] is destroyed")),this.stop(),super.close()}getProcessorStats(){return this.processorContext.gatherStats()}getProcessorUsage(){return this.processorContext.gatherUsage()}}let Hs=(Ns=fe({argsMap:(e,t,i)=>[e.getTrackId(),"string"==typeof t?t:t instanceof HTMLVideoElement?"HTMLVideoElement":"HTMLElement",i]}),Ms=fe({argsMap:e=>[e.getTrackId()]}),Os=fe({argsMap:(e,t)=>[e.getTrackId(),t.name]}),Ls=fe({argsMap:e=>[e.getTrackId()]}),Rt((Ps=class extends Ks{get isPlaying(){return!(!this._player||this._player.videoElementStatus!==bt.PLAYING)}get __className__(){return"RemoteVideoTrack"}constructor(e,t,i,r,s){super(e,t,i,r),Ct(this,"_videoVisibleTimer",null),Ct(this,"_previousVideoVisibleStatus",void 0),Ct(this,"_clearPreviousVideoVisibleStatus",(()=>this._previousVideoVisibleStatus=void 0)),Ct(this,"trackMediaType",ut.VIDEO),Ct(this,"_videoWidth",void 0),Ct(this,"_videoHeight",void 0),Ct(this,"_player",void 0),Ct(this,"_prePlayer",void 0),Ct(this,"processorDestination",void 0),Ct(this,"processorContext",void 0),this._prePlayer=s,this.updateMediaStreamTrackResolution(),this.processorContext=new Ei(this.getTrackId(),"remote"),this.processorDestination=new vi(this.processorContext),this.bindProcessorDestinationEvents()}getStats(){w((()=>{me.warning("[deprecated] RemoteVideoTrack.getStats will be removed in the future, use AgoraRTCClient.getRemoteVideoStats instead")}),"remoteVideoTrackGetStatsWarning");return ee(this,tt.GET_STATS)||Nt({},ft)}play(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.safeEmit(dt.PLAY_START),"string"==typeof e){const t=document.getElementById(e);t?e=t:(me.warning("[".concat(this.getTrackId(),'] can not find "#').concat(e,'" element, use document.body')),e=document.body)}me.debug("[".concat(this.getTrackId(),"] start video playback in ").concat(e instanceof HTMLVideoElement?"HTMLVideoElement":"HTMLElement"),JSON.stringify(t));const i=Nt(Nt({fit:"cover"},t),{},{trackId:this.getTrackId(),element:e});if(this._player)this._player.updateConfig(i);else{let t=!1,r=!1;const s=this._prePlayer&&!this._prePlayer.isDestroyed&&e===this._prePlayer.config.element;this._prePlayer&&!s&&(this._prePlayer.destroy(),r=!0),s?(this._player=this._prePlayer,t=this._player.videoState>0,this._player.updateConfig(i)):this._player=e instanceof HTMLVideoElement?new Or(i):new Pr(i),this._prePlayer=void 0,this._player.updateVideoTrack(this._mediaStreamTrack),this._player.onFirstVideoFrameDecoded=()=>{this.store.subscribe(this.getUserId(),"video",void 0,void 0,Date.now()),this.safeEmit(dt.FIRST_FRAME_DECODED),r&&this.safeEmit(dt.FIRST_FRAME_RENDER)},this._player.onVideoStateChanged=e=>{this.safeEmit(dt.VIDEO_STATE_CHANGED,e)},t&&(this._player.onFirstVideoFrameDecoded(),this._player.onVideoStateChanged(this._player.videoState))}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(dt.VIDEO_ELEMENT_VISIBLE_STATUS,e)}catch(e){}}),u("CHECK_VIDEO_VISIBLE_INTERVAL")),this.safeEmit(dt.PLAY_END)}stop(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this._player&&(this._videoVisibleTimer&&(window.clearInterval(this._videoVisibleTimer),this._videoVisibleTimer=null),this._clearPreviousVideoVisibleStatus(),this._player.destroy(e),this._player=void 0,me.debug("[".concat(this.getTrackId(),"] stop video playback")))}getCurrentFrameData(){return this._player?this._player.getCurrentFrame():new ImageData(2,2)}updateMediaStreamTrackResolution(){Ii(this._originMediaStreamTrack).then((e=>{let t=Mt(e,2),i=t[0],r=t[1];this._videoHeight=r,this._videoWidth=i})).catch(z)}_updatePlayerSource(){me.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},s=r.element,o=r.slot;if(this.isPlaying&&s instanceof HTMLVideoElement&&o instanceof HTMLElement){const e=ue.checkOneElementVisible(s),t=Object.assign({},e);if(t.visible!==this._previousVideoVisibleStatus){this._previousVideoVisibleStatus=t.visible;const e=ge.reportApiInvoke(null,{tag:D.TRACER,name:C.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 b(k.GET_VIDEO_ELEMENT_VISIBLE_ERROR,e.message)}}pipe(e){if(this.processor===e)return e;if(e._source)throw new b(k.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(Tt.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(Tt.ON_TRACK)}_destroy(){this._prePlayer&&(this._prePlayer.destroy(),this._prePlayer=void 0),super._destroy(),this.unbindProcessorDestinationEvents()}_onSei(e){this.emit(at.SEI_RECEIVED,e)}}).prototype,"play",[Ns],Object.getOwnPropertyDescriptor(Ps.prototype,"play"),Ps.prototype),Rt(Ps.prototype,"stop",[Ms],Object.getOwnPropertyDescriptor(Ps.prototype,"stop"),Ps.prototype),Rt(Ps.prototype,"pipe",[Os],Object.getOwnPropertyDescriptor(Ps.prototype,"pipe"),Ps.prototype),Rt(Ps.prototype,"unpipe",[Ls],Object.getOwnPropertyDescriptor(Ps.prototype,"unpipe"),Ps.prototype),Ps),Ys=(Vs=fe({argsMap:(e,t)=>[e.getTrackId(),t],throttleTime:300}),xs=fe({argsMap:(e,t)=>[e.getTrackId(),t],throttleTime:300}),Us=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),Zs=fe({argsMap:e=>[e.getTrackId()]}),Ws=fe({argsMap:e=>[e.getTrackId()]}),Fs=fe({argsMap:(e,t)=>[e.getTrackId(),t.name]}),Gs=fe({argsMap:e=>[e.getTrackId()]}),Rt((Bs=class extends Ks{get isPlaying(){return this._useAudioElement?fi.isPlaying(this.getTrackId()):this._source.isPlayed}get __className__(){return"RemoteAudioTrack"}constructor(e,t,i,r){super(e,t,i,r),Ct(this,"trackMediaType",ut.AUDIO),Ct(this,"_source",void 0),Ct(this,"_useAudioElement",!0),Ct(this,"_volume",100),Ct(this,"processorContext",void 0),Ct(this,"processorDestination",void 0),Ct(this,"_played",!1),Ct(this,"_bypassWebAudio",!1),u("DISABLE_WEBAUDIO")?(this._source=new bi,this._bypassWebAudio=!0,this._useAudioElement=!0):(this._source=new $t(e,!0),u("REMOTE_AUDIO_TRACK_USES_WEB_AUDIO")&&(this._useAudioElement=!1)),this._source.once(ht.RECEIVE_TRACK_BUFFER,(()=>{this.safeEmit(dt.FIRST_FRAME_DECODED)})),this.processorContext=new Si(this._source.context,this.getTrackId(),"remote"),this.processorDestination=new yi(this.processorContext),this.bindProcessorDestinationEvents(),this._source.on(ht.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(ht.ON_AUDIO_BUFFER),void this._source.stopGetAudioBuffer();this._source.startGetAudioBuffer(t),this._source.removeAllListeners(ht.ON_AUDIO_BUFFER),this._source.on(ht.ON_AUDIO_BUFFER,(t=>e(t)))}setVolume(e){this._volume=e,this._useAudioElement?fi.setVolume(this.getTrackId(),e):this._source.setVolume(e/100)}setAmplifiedVolume(e){this._useAudioElement&&this._played&&(fi.stop(this.getTrackId()),this._source.play()),this._useAudioElement=!1,e=Math.min(e,u("MAX_WEBAUDIO_VOLUME")),this._volume=e,this._source.setVolume(e/100)}async setPlaybackDevice(e){if(!this._useAudioElement||!Se())throw new b(k.NOT_SUPPORTED,"your browser does not support setting the audio output device");await fi.setSinkID(this.getTrackId(),e)}getVolumeLevel(){return this._source.getAccurateVolumeLevel()}getVolume(){return this._useAudioElement?fi.getVolume(this.getTrackId()):this._source instanceof $t?this._source.getAudioVolume():0}getStats(){w((()=>{me.warning("[deprecated] RemoteAudioTrack.getStats will be removed in the future, use AgoraRTCClient.getRemoteAudioStats instead")}),"remoteAudioTrackGetStatsWarning");return ee(this,tt.GET_STATS)||Nt({},gt)}play(){me.debug("[".concat(this.getTrackId(),"] start audio playback")),this._played=!0,this._useAudioElement?(me.debug("[".concat(this.getTrackId(),"] use audio element to play")),fi.play(this._mediaStreamTrack,this.getTrackId(),this._volume,this.store.sessionId||void 0)):(me.debug("[".concat(this.getTrackId(),"] use audio context to play")),this._source.play())}stop(){me.debug("[".concat(this.getTrackId(),"] stop audio playback")),this._played=!1,this._useAudioElement?fi.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];me.debug("[".concat(this.getTrackId(),"] update player source track")),e&&this._source.updateTrack(this._mediaStreamTrack),this._useAudioElement&&fi.updateTrack(this.getTrackId(),this._mediaStreamTrack)}pipe(e){if(this._bypassWebAudio)throw new b(k.NOT_SUPPORTED,"can not pipe extension when WebAudio disabled");if(this.processor===e)return e;if(e._source)throw new b(k.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 b(k.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(Tt.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(Tt.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(Tt.ON_TRACK),this.processorDestination.removeAllListeners(Tt.ON_NODE)}}).prototype,"setVolume",[Vs],Object.getOwnPropertyDescriptor(Bs.prototype,"setVolume"),Bs.prototype),Rt(Bs.prototype,"setAmplifiedVolume",[xs],Object.getOwnPropertyDescriptor(Bs.prototype,"setAmplifiedVolume"),Bs.prototype),Rt(Bs.prototype,"setPlaybackDevice",[Us],Object.getOwnPropertyDescriptor(Bs.prototype,"setPlaybackDevice"),Bs.prototype),Rt(Bs.prototype,"play",[Zs],Object.getOwnPropertyDescriptor(Bs.prototype,"play"),Bs.prototype),Rt(Bs.prototype,"stop",[Ws],Object.getOwnPropertyDescriptor(Bs.prototype,"stop"),Bs.prototype),Rt(Bs.prototype,"pipe",[Fs],Object.getOwnPropertyDescriptor(Bs.prototype,"pipe"),Bs.prototype),Rt(Bs.prototype,"unpipe",[Gs],Object.getOwnPropertyDescriptor(Bs.prototype,"unpipe"),Bs.prototype),Bs);const Xs=new class extends A{get visibility(){return document.visibilityState}get lastHiddenTime(){return this._lastHiddenTime}get lastVisibleTime(){return this._lastVisibleTime}constructor(){super(),Ct(this,"_lastHiddenTime",0),Ct(this,"_lastVisibleTime",0),Ct(this,"needUploadStats",[]),Ct(this,"isCollectingStats",!1),document.addEventListener("visibilitychange",(()=>{"hidden"===document.visibilityState?this._lastHiddenTime=performance.now():this._lastVisibleTime=performance.now(),this.isCollectingStats&&this.needUploadStats.push("visible"===document.visibilityState?1:0),me.debug("current web page is ".concat(document.visibilityState)),this.emit("VISIBILITY_CHANGE",document.visibilityState)}))}startCollectStats(){this.isCollectingStats=!0,this.needUploadStats.push("visible"===this.visibility?1:0)}stopCollectStats(){this.isCollectingStats=!1,this.needUploadStats.length=0}};class zs extends A{constructor(e,t){super(),Ct(this,"trackMediaType",ut.DATA),Ct(this,"_version",1),Ct(this,"_type",3),Ct(this,"_config",void 0),Ct(this,"_originDataChannel",void 0),Ct(this,"_dataStreamPacketHeader",new ArrayBuffer(4)),Ct(this,"_dataStreamPacketHandler",{serialize:e=>e,deserialize:e=>e}),Ct(this,"_datachannelEventMap",new Map),this._config=e,t&&(this._originDataChannel=t,this._bandDataChannelEvents(t)),this._initPacketHeader()}useDataStream(e){this._dataStreamPacketHandler=e}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 b(k.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 b(k.DATACHANNEL_CONNECTION_TIMEOUT)}}else t(new b(k.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),[At.OPEN,At.CLOSE,At.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=Mt(t,2),r=i[0],s=i[1];e.removeEventListener(r,s)})),this._datachannelEventMap.clear()}}class js extends zs{constructor(e){super(e),Ct(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")&&me.debug("invalid datachannel id: ".concat(i," !== ").concat(this.id)));let r=e.data.slice(this._dataStreamPacketHeader.byteLength);r=this._dataStreamPacketHandler.deserialize(r),this.emit(At.MESSAGE,r)}}_updateDataChannelConfig(e){this._config=e}_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 Qs extends zs{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 Js(){const e=new Blob([atob("ZnVuY3Rpb24gdCh0LGUsbil7cmV0dXJuKGU9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9dHlwZW9mIHR8fCF0KXJldHVybiB0O3ZhciBuPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1uKXt2YXIgcj1uLmNhbGwodCxlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWU/U3RyaW5nOk51bWJlcikodCl9KHQsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgZT9lOmUrIiJ9KGUpKWluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09bix0fWZ1bmN0aW9uIGUodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWNvbnN0IG49InZpZGVvL2gyNjQiLHI9InZpZGVvL2gyNjUiO2Z1bmN0aW9uIGEodCxlLG4pe2xldCByPW5ldyBVaW50OEFycmF5KHQsZSxuKSxhPVtdLG89MDtmb3IoO2EubGVuZ3RoPG47KW8rMzxuJiYwPT09cltvXSYmMD09PXJbbysxXSYmMz09PXJbbysyXSYmKDA9PT1yW28rM118fDE9PT1yW28rM118fDI9PT1yW28rM118fDM9PT1yW28rM10pPyhhLnB1c2gocltvXSxyW28rMV0scltvKzNdKSxvKz00KTooYS5wdXNoKHJbb10pLG8rKyk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGEpfWZ1bmN0aW9uIG8odCxlKXtzd2l0Y2goZSl7Y2FzZSBuOnJldHVybiBmdW5jdGlvbih0KXtjb25zdCBlPW5ldyBEYXRhVmlldyh0LmRhdGEpO2xldCBuPTA7Zm9yKDtuKzQ8dC5kYXRhLmJ5dGVMZW5ndGg7KXtpZigwPT09ZS5nZXRVaW50OChuKzApJiYwPT09ZS5nZXRVaW50OChuKzEpJiYwPT09ZS5nZXRVaW50OChuKzIpJiYxPT09ZS5nZXRVaW50OChuKzMpJiY2PT09ZS5nZXRVaW50OChuKzQpKXtsZXQgcj1uKzYsbz0wLGk9MDtmb3IoOzI1NT09PShpPWUuZ2V0VWludDgocisrKSk7KW8rPTI1NTtvKz1pO2NvbnN0IHM9YSh0LmRhdGEscixvKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkocyl9bisrfXJldHVybiBudWxsfSh0KTtjYXNlIHI6cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0IGU9bmV3IERhdGFWaWV3KHQuZGF0YSk7bGV0IG49MDtmb3IoO24rNTx0LmRhdGEuYnl0ZUxlbmd0aDspe2lmKDA9PT1lLmdldFVpbnQ4KG4rMCkmJjA9PT1lLmdldFVpbnQ4KG4rMSkmJjA9PT1lLmdldFVpbnQ4KG4rMikmJjE9PT1lLmdldFVpbnQ4KG4rMykmJjc4PT09ZS5nZXRVaW50OChuKzQpJiYxPT09ZS5nZXRVaW50OChuKzUpJiYxMDE9PT1lLmdldFVpbnQ4KG4rNikpe2xldCByPW4rNyxvPTAsaT0wO2Zvcig7MjU1PT09KGk9ZS5nZXRVaW50OChyKyspKTspbys9MjU1O28rPWk7Y29uc3Qgcz1hKHQuZGF0YSxyLG8pO3JldHVybiBuZXcgVWludDhBcnJheShzKX1uKyt9cmV0dXJuIG51bGx9KHQpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGkodCl7Y29uc3QgZT10Lmxlbmd0aDtsZXQgbj1bXSxyPTA7Zm9yKDtyPGU7KXIrMjxlJiYwPT09dFtyXSYmMD09PXRbcisxXSYmKDA9PT10W3IrMl18fDE9PT10W3IrMl18fDI9PT10W3IrMl18fDM9PT10W3IrMl0pPyhuLnB1c2godFtyXSx0W3IrMV0sMyx0W3IrMl0pLHIrPTMpOihuLnB1c2godFtyXSkscisrKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkobil9ZnVuY3Rpb24gcyh0LGUsYSl7c3dpdGNoKGEpe2Nhc2UgbjpyZXR1cm4gZnVuY3Rpb24odCxlKXtjb25zdCBuPWkoZSkscj1uLmxlbmd0aCxhPU1hdGguZmxvb3Ioci8yNTUpLG89ciUyNTUscz1uZXcgVWludDhBcnJheSg2K2ErMStyK3QuYnl0ZUxlbmd0aCk7c1swXT0wLHNbMV09MCxzWzJdPTAsc1szXT0xLHNbNF09NixzWzVdPTEwMTtsZXQgZj0wO2Zvcig7ZjxhOylzWzYrZl09MjU1LGYrKztyZXR1cm4gc1s2K2ZdPW8sZisrLHMuc2V0KG4sNitmKSxzLnNldChuZXcgVWludDhBcnJheSh0KSw2K2Yrcikscy5idWZmZXJ9KHQsZSk7Y2FzZSByOnJldHVybiBmdW5jdGlvbih0LGUpe2NvbnN0IG49aShlKSxyPW4ubGVuZ3RoLGE9TWF0aC5mbG9vcihyLzI1NSksbz1yJTI1NSxzPW5ldyBVaW50OEFycmF5KDcrYSsxK3IrMSt0LmJ5dGVMZW5ndGgpO3NbMF09MCxzWzFdPTAsc1syXT0wLHNbM109MSxzWzRdPTc4LHNbNV09MSxzWzZdPTEwMTtsZXQgZj0wO2Zvcig7ZjxhOylzWzcrZl09MjU1LGYrKztyZXR1cm4gc1s3K2ZdPW8sZisrLHMuc2V0KG4sNytmKSxmKz1yLHNbNytmXT0xMjgsZisrLHMuc2V0KG5ldyBVaW50OEFycmF5KHQpLDcrZikscy5idWZmZXJ9KHQsZSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gZih0KXtpZih0Lmxlbmd0aDw1KXJldHVybiIiO2xldCBlPS0xO2ZvcihsZXQgbj0wO248dC5sZW5ndGgtMztuKyspe2lmKDA9PT10W25dJiYwPT09dFtuKzFdJiYxPT09dFtuKzJdKXtlPW47YnJlYWt9aWYobjx0Lmxlbmd0aC00JiYwPT09dFtuXSYmMD09PXRbbisxXSYmMD09PXRbbisyXSYmMT09PXRbbiszXSl7ZT1uO2JyZWFrfX1pZigtMT09PWUpcmV0dXJuIiI7Y29uc3QgYT1lKygwPT09dFtlKzJdPzQ6Myk7aWYoYT49dC5sZW5ndGgpcmV0dXJuIiI7Y29uc3Qgbz10W2FdO2lmKDEyOCZvKXJldHVybiIiO2lmKChvPj4xJjYzKT49MzIpcmV0dXJuIHI7aWYoYSsxPHQubGVuZ3RoKXtpZigwPT0oMjQ4JnRbYSsxXSkpcmV0dXJuIHJ9cmV0dXJuKDMxJm8pPD0zMT9uOiIifWNvbnN0IGw9NzEsdT0xLGM9MixnPTEscD0yO3ZhciBkPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuQVVESU9fTEVWRUw9MV09IkFVRElPX0xFVkVMIix0W3QuTUVUQURBVEE9Ml09Ik1FVEFEQVRBIix0W3QuQVVESU9fNjRfQklUX1BUUz0zXT0iQVVESU9fNjRfQklUX1BUUyIsdH0oZHx8e30pO2Z1bmN0aW9uIGgodCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBuPXQuZ2V0VWludDgoMCk7aWYobiE9PWwpcmV0dXJuO2NvbnN0IHI9dC5nZXRVaW50MTYoMSksYT11K2MrcixvPW5ldyBVaW50OEFycmF5KHQuYnl0ZUxlbmd0aC1hKTtvLnNldChuZXcgVWludDhBcnJheSh0LmJ1ZmZlcixhLHQuYnl0ZUxlbmd0aC1hKSk7Y29uc3QgaT17bTpuLHRsdkxlbjpyLHRsdjpbXSxmcmFtZTpvfTtsZXQgcz11K2M7Zm9yKDtzPGE7KXtjb25zdCBuPXQuZ2V0VWludDgocykscj10LmdldFVpbnQxNihzK2cpLGE9ZytwO2lmKG49PT1kLkFVRElPX0xFVkVMKXtsZXQgbz10LmdldFVpbnQ4KHMrYSk7Zm9yKGxldCBlPTE7ZTxyO2UrKylvPW88PDh8dC5nZXRVaW50OChzK2ErZSk7aS50bHYucHVzaCh7dGFnOm4sbGVuZ3RoOnIsdmFsdWU6ZT8xMjdebz4+MToxMjcmb30pfWVsc2UgaWYobj09PWQuTUVUQURBVEF8fG49PT1kLkFVRElPXzY0X0JJVF9QVFMpe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkocik7Zm9yKGxldCBuPTA7bjxyO24rKyllW25dPXQuZ2V0VWludDgocythK24pO2kudGx2LnB1c2goe3RhZzpuLGxlbmd0aDpyLHZhbHVlOmV9KX1zKz1hK3J9cmV0dXJuIGl9c2VsZi5vbnJ0Y3RyYW5zZm9ybT1uPT57Y29uc3Qgcj1uLnRyYW5zZm9ybWVyLGE9W10saT1bXTtsZXQgeT1udWxsO3Iub3B0aW9ucy5wb3J0Lm9ubWVzc2FnZT10PT57dC5kYXRhLnNlaSYmYS5wdXNoKHQuZGF0YS5zZWkpLHQuZGF0YS5tZXRhZGF0YSYmaS5wdXNoKHQuZGF0YS5tZXRhZGF0YSl9LHNlbGYucG9zdE1lc3NhZ2UoInN0YXJ0ZWQiKTtjb25zdCBVPXIucmVhZGFibGUuZ2V0UmVhZGVyKCksYj1yLndyaXRhYmxlLmdldFdyaXRlcigpOyJzZWktcngiPT09ci5vcHRpb25zLm5hbWU/ZnVuY3Rpb24gbihyKXtVLnJlYWQoKS50aGVuKChhPT57aWYoIWEuZG9uZSl7aWYoYS52YWx1ZSBpbnN0YW5jZW9mIFJUQ0VuY29kZWRWaWRlb0ZyYW1lKXtjb25zdCBuPWYobmV3IFVpbnQ4QXJyYXkoYS52YWx1ZS5kYXRhKSksaT1vKGEudmFsdWUsbik7aWYoaSYmci5vcHRpb25zLnBvcnQucG9zdE1lc3NhZ2Uoe3NlaTppfSksIXkpe2NvbnN0IG49YS52YWx1ZS5nZXRNZXRhZGF0YSgpfHx7fTt5PWZ1bmN0aW9uKG4pe2Zvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3ZhciBhPW51bGwhPWFyZ3VtZW50c1tyXT9hcmd1bWVudHNbcl06e307ciUyP2UoT2JqZWN0KGEpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0KG4sZSxhW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGEpKTplKE9iamVjdChhKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsdCkpfSkpfXJldHVybiBufSh7dHlwZTphLnZhbHVlLnR5cGUscnRwVGltZXN0YW1wOmEudmFsdWUudGltZXN0YW1wLHBheWxvYWRUeXBlOm4ucGF5bG9hZFR5cGV8fDAsc3NyYzpuLnN5bmNocm9uaXphdGlvblNvdXJjZXx8MCxsZW5ndGg6YS52YWx1ZS5kYXRhLmJ5dGVMZW5ndGh9LCJtaW1lVHlwZSJpbiBuP3ttaW1lVHlwZTpuLm1pbWVUeXBlfTp7fSksci5vcHRpb25zLnBvcnQucG9zdE1lc3NhZ2Uoe2ZpcnN0RnJhbWVJbmZvOnl9KX19Yi53cml0ZShhLnZhbHVlKSxyLm9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZSh7dHJhbnNmb3JtZWQ6ITB9KSxuKHIpfX0pKX0ocik6InNlaS10eCI9PT1yLm9wdGlvbnMubmFtZT9mdW5jdGlvbiB0KGUpe1UucmVhZCgpLnRoZW4oKG49PntpZighbi5kb25lKXtpZihuLnZhbHVlIGluc3RhbmNlb2YgUlRDRW5jb2RlZFZpZGVvRnJhbWUpe2NvbnN0IHQ9ZihuZXcgVWludDhBcnJheShuLnZhbHVlLmRhdGEpKSxlPWEuc2hpZnQoKTtpZihlKXtjb25zdCByPXMobi52YWx1ZS5kYXRhLGUsdCk7ciYmKG4udmFsdWUuZGF0YT1yKX19Yi53cml0ZShuLnZhbHVlKSxlLm9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZSh7dHJhbnNmb3JtZWQ6ITB9KSx0KGUpfX0pKX0ocik6ImF1ZGlvLW1ldGFkYXRhLXJ4Ij09PXIub3B0aW9ucy5uYW1lP2Z1bmN0aW9uIHQoZSl7VS5yZWFkKCkudGhlbigobj0+e2lmKCFuLmRvbmUpe2lmKG4udmFsdWUgaW5zdGFuY2VvZiBSVENFbmNvZGVkQXVkaW9GcmFtZSl7Y29uc3QgdD1uZXcgRGF0YVZpZXcobi52YWx1ZS5kYXRhKSxyPXQuZ2V0VWludDgoMCk7bGV0IGE7aWYoMCE9KDEyOCZyKSYmNzEhPT1yKXtjb25zdCBlPWZ1bmN0aW9uKHQpe2lmKHQuYnl0ZUxlbmd0aDw9MClyZXR1cm5bXTtjb25zdCBlPVtdO2xldCBuPTA7Zm9yKDtuPHQuYnl0ZUxlbmd0aDspe2NvbnN0IHI9KDEyOCZ0LmdldFVpbnQ4KG4pKT4+NyxhPTEyNyZ0LmdldFVpbnQ4KG4pO2lmKCEociYmbis0PD10LmJ5dGVMZW5ndGgpKXtuKys7YnJlYWt9e2NvbnN0IHI9dC5nZXRVaW50MzIobiwhMSksbz0oMTY3NzYxOTImcik+PjEwLGk9MTAyMyZyO2UucHVzaCh7cHQ6YSx0c19vZmZzZXQ6byxsZW5ndGg6aSxkYXRhOm5ldyBVaW50OEFycmF5fSksbis9NH19bGV0IHI9dC5ieXRlTGVuZ3RoLW47Zm9yKGNvbnN0IGEgb2YgZSl7aWYoYS5sZW5ndGg+cilyZXR1cm4gY29uc29sZS53YXJuKCJCcm9rZW4gcmVkIHBheWxvYWQiKSxbXTthLmxlbmd0aD4wJiYoYS5kYXRhPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtuLGEubGVuZ3RoKSxuKz1hLmxlbmd0aCxyLT1hLmxlbmd0aCl9aWYocj4wKXtjb25zdCBhPXtwdDplLmxlbmd0aD4wP2VbZS5sZW5ndGgtMV0ucHQ6MCx0c19vZmZzZXQ6MCxsZW5ndGg6cixkYXRhOm5ldyBVaW50OEFycmF5KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtuLHIpfTtlLnB1c2goYSl9cmV0dXJuIGV9KHQpO2lmKGUubGVuZ3RoPjApe2NvbnN0IHQ9ZnVuY3Rpb24odCl7bGV0IGU9MDtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyllKz1uPHQubGVuZ3RoLTE/NDoxLGUrPXRbbl0ubGVuZ3RoO2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoZSk7bGV0IHI9MDtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZihlPHQubGVuZ3RoLTEpe2NvbnN0IGE9KDIxNDc0ODM2NDh8KDEyNyZ0W2VdLnB0KTw8MjR8KDI2MjE0MyZ0W2VdLnRzX29mZnNldCk8PDEwfDEwMjMmdFtlXS5sZW5ndGgpPj4+MDtuW3IrK109YT4+MjQmMjU1LG5bcisrXT1hPj4xNiYyNTUsbltyKytdPWE+PjgmMjU1LG5bcisrXT0yNTUmYX1lbHNlIG5bcisrXT0xMjcmdFtlXS5wdDtmb3IoY29uc3QgZSBvZiB0KW4uc2V0KGUuZGF0YSxyKSxyKz1lLmxlbmd0aDtyZXR1cm4gbn0oZS5tYXAoKHQ9Pntjb25zdCBlPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtlLnNldCh0LmRhdGEpO2NvbnN0IG49aChuZXcgRGF0YVZpZXcoZS5idWZmZXIpKTtyZXR1cm4gbnVsbCE9biYmbi5mcmFtZSYmKHQuZGF0YT1udWxsPT1uP3ZvaWQgMDpuLmZyYW1lKSxhPW4sdH0pKSk7bi52YWx1ZS5kYXRhPXQuYnVmZmVyfX1lbHNlIGE9aCh0KSxhJiYobi52YWx1ZS5kYXRhPWEuZnJhbWUuYnVmZmVyKTtpZihhKXtsZXQgdD1hLnRsdi5maW5kKCh0PT50LnRhZz09PWQuTUVUQURBVEEpKTtpZih0JiZ0LnZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSYmZS5vcHRpb25zLnBvcnQucG9zdE1lc3NhZ2Uoe21ldGFkYXRhOnQudmFsdWV9KSx0PWEudGx2LmZpbmQoKHQ9PnQudGFnPT09ZC5BVURJT182NF9CSVRfUFRTKSksdCYmdC52YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJjg9PXQudmFsdWUubGVuZ3RoKXtjb25zdCBuPW5ldyBEYXRhVmlldyh0LnZhbHVlLmJ1ZmZlcikuZ2V0QmlnVWludDY0KDAsITApO3QmJnQudmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5JiZlLm9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZSh7cHRzOm59KX19fWIud3JpdGUobi52YWx1ZSksZS5vcHRpb25zLnBvcnQucG9zdE1lc3NhZ2Uoe3RyYW5zZm9ybWVkOiEwfSksdChlKX19KSl9KHIpOiJhdWRpby1tZXRhZGF0YS10eCI9PT1yLm9wdGlvbnMubmFtZSYmZnVuY3Rpb24gdChlKXtVLnJlYWQoKS50aGVuKChuPT57aWYoIW4uZG9uZSl7aWYoZS5vcHRpb25zLnBvcnQucG9zdE1lc3NhZ2Uoe2dldE1ldGFkYXRhOiEwfSksbi52YWx1ZSBpbnN0YW5jZW9mIFJUQ0VuY29kZWRBdWRpb0ZyYW1lKXtjb25zdCB0PWkuc2hpZnQoKTt0JiYobi52YWx1ZS5kYXRhPWZ1bmN0aW9uKHQsZSxuKXtjb25zdCByPW4uYnl0ZUxlbmd0aCxhPXIrZytwLG89dStjK2EsaT1uZXcgQXJyYXlCdWZmZXIodC5ieXRlTGVuZ3RoK28pLHM9bmV3IERhdGFWaWV3KGkpO3Muc2V0VWludDgoMCxsKSxzLnNldFVpbnQxNigxLGEpLHMuc2V0VWludDgoMyxlKSxzLnNldFVpbnQxNig0LHIpO2ZvcihsZXQgdD0wO3Q8cjt0Kyspcy5zZXRVaW50OCg2K3Qsblt0XSk7Y29uc3QgZj1uZXcgVWludDhBcnJheShzLmJ1ZmZlcik7cmV0dXJuIGYuc2V0KG5ldyBVaW50OEFycmF5KHQpLG8pLGYuYnVmZmVyfShuLnZhbHVlLmRhdGEsZC5BVURJT182NF9CSVRfUFRTLHQpKX1iLndyaXRlKG4udmFsdWUpLGUub3B0aW9ucy5wb3J0LnBvc3RNZXNzYWdlKHt0cmFuc2Zvcm1lZDohMH0pLHQoZSl9fSkpfShyKX0sc2VsZi5wb3N0TWVzc2FnZSgicmVnaXN0ZXJlZCIpOwo=")],{type:"text/javascript"});return setTimeout((()=>URL.revokeObjectURL(e)),0),new Worker(URL.createObjectURL(e))}const qs=71,$s=1,eo=2,to=1,io=2;var ro=function(e){return e[e.AUDIO_LEVEL=1]="AUDIO_LEVEL",e[e.METADATA=2]="METADATA",e[e.AUDIO_64_BIT_PTS=3]="AUDIO_64_BIT_PTS",e}(ro||{});function so(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=e.getUint8(0);if(i!==qs)return;const r=e.getUint16(1),s=$s+eo+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=$s+eo;for(;a<s;){const i=e.getUint8(a),r=e.getUint16(a+to),s=to+io;if(i===ro.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===ro.METADATA||i===ro.AUDIO_64_BIT_PTS){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 oo=new Map;function no(e,t){const i=t.chunk,r=t.controller,s=ro.METADATA;i.data=function(e,t,i){const r=i.byteLength,s=r+to+io,o=$s+eo+s,n=new ArrayBuffer(e.byteLength+o),a=new DataView(n);a.setUint8(0,qs),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,s,e),r.enqueue(i)}async function ao(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!ye().supportWebRTCEncodedTransform)return void me.warning("browser not support audio encoded transform");if(oo.has(e))return;if(!e.track)return;const i={track:e.track};if(p()){if(!e.createEncodedStreams)return void me.warning("browser not support createEncodedStreams() API");let s=null;try{s=e.createEncodedStreams()}catch(e){return void me.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&&(me.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?no(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 me.warning("browser not support RTCRtpScriptTransform");const s=Js(),o=new MessageChannel;await new Promise((e=>s.onmessage=t=>{"registered"===t.data&&e(void 0)}));const n=new RTCRtpScriptTransform(s,{name:"audio-metadata-tx",port:o.port2},[o.port2]);e.transform=n,await new Promise((e=>s.onmessage=t=>{"started"===t.data&&e(void 0)})),o.port1.onmessage=s=>{var n;if(s.data.transformed&&e.track&&(null===(n=e.track)||void 0===n?void 0:n.id)!==i.track.id)me.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);else if(s.data.getMetadata){const e=t.metadata&&t.metadata();e&&o.port1.postMessage({metadata:e})}},i.worker=s}function r(){if(e.track){if(this.id!==e.track.id)return;e.track.removeEventListener("ended",r)}const t=oo.get(e);if(t){oo.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){me.warning(e&&e.message)}}}oo.set(e,i),e.track.addEventListener("ended",r)}const co=127,uo=1e-10,ho=139/13;const lo=new Map;function po(e,t,i){const r="".concat(e,"-").concat(t,"-").concat(i);let s=0;if(lo.has(r))s=lo.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,lo.set(r,s)}return s<uo&&(s=uo),s}function mo(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=lo;let go=0;class _o{constructor(e){Ct(this,"id",void 0),Ct(this,"immediates",[]),Ct(this,"lastNonSilence",-1),Ct(this,"immediateSpeechActivityScore",uo),Ct(this,"lastLevelChangedTime",Date.now()),Ct(this,"levels",[]),Ct(this,"longs",[]),Ct(this,"longSpeechActivityScore",uo),Ct(this,"mediums",[]),Ct(this,"mediumSpeechActivityScore",uo),Ct(this,"minLevel",0),Ct(this,"nextMinLevel",0),Ct(this,"nextMinLevelWindowLength",0),Ct(this,"energyScore",0),this.id=e||"".concat(go++),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+ho;let r=!1;for(let s=0;s<e.length;++s){let o=t[s];o<i&&(o=0);const n=Math.floor(o/ho);e[s]!==n&&(e[s]=n,r=!0)}return r}computeLongs(){return mo(this.mediums,this.longs,4)}computeMediums(){return mo(this.immediates,this.mediums,7)}evaluateImmediateSpeechActivityScore(){this.immediateSpeechActivityScore=po(this.immediates[0],13,.78)}evaluateLongSpeechActivityScore(e){this.longSpeechActivityScore=po(this.longs[0],10,47),this.longSpeechActivityScore>uo&&(this.lastNonSilence=e)}evaluateMediumSpeechActivityScore(){this.mediumSpeechActivityScore=po(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>co&&(i=co),this.levels.unshift(i),this.levels.length>this.immediates.length&&this.levels.pop(),this.updateMinLevel(i),i>=this.minLevel+ho?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>co&&(e=co),this.minLevel=e,this.nextMinLevel=0,this.nextMinLevelWindowLength=0}}}}class fo{constructor(e){Ct(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 To{constructor(e,t,i){Ct(this,"isDominant",void 0),Ct(this,"energyRanking",void 0),Ct(this,"energyScore",void 0),this.isDominant=e,this.energyRanking=t,this.energyScore=i}}class vo extends A{constructor(e){super(),Ct(this,"dominantId",null),Ct(this,"lastDecisionTime",0),Ct(this,"lastLevelChangedTime",0),Ct(this,"lastLevelIdleTime",0),Ct(this,"relativeSpeechActivities",[]),Ct(this,"speakers",new Map),Ct(this,"enableSilence",!1),Ct(this,"timeoutToSilenceInterval",0),Ct(this,"decisionMaker",null),Ct(this,"loudest",[]),Ct(this,"numLoudestToTrack",3),Ct(this,"energyExpireTimeMs",250),Ct(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 _o(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 To(r,t,e.energyScore)}if(e.energyScore=Math.floor((this.energyAlphaPct*t+(100-this.energyAlphaPct)*e.energyScore+50)/100),0===this.numLoudestToTrack)return new To(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 To(r,n,e.energyScore)}maybeStartDecisionMaker(){!this.decisionMaker&&this.speakers.size>0&&(this.decisionMaker=new fo(this),this.decisionMaker.execute())}makeDecision(e){let t=null,i=null;const r=this.speakers.size;let s=null;if(0===r)s=null;else if(1===r){const t=this.speakers.values().next().value;if(this.enableSilence&&t){s=t.id,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();e.value&&(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=Mt(o,2),a=n[0],c=n[1];if(c===t)continue;c.evaluateSpeechActivityScores(e);for(let e=0;e<i.length;++e){const r=null==t?uo:t.getSpeechActivityScore(e);i[e]=Math.log(c.getSpeechActivityScore(e)/r)}const d=i[0],u=i[1],h=i[2];d>3&&u>2&&h>0&&u>r&&(r=u,s=a)}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 Eo=new Map;let yo=null,So=null;const bo=3;let ko=[];function Io(e,t){let i=Eo.get(e);if(i||(i=function(e){const t=new _o;return Eo.set(e,t),yo||(yo=new vo(u("TOPN_SILENCE_THRESHOLD")||500),yo.on("ActiveSpeakerChanged",(e=>{null!=e&&(So=e)}))),yo.addSpeakers([t]),t}(e)),Eo.size<=bo)return{selected:!0,speaker:i};if(!yo)throw new Error("no active speaker detector");yo.levelChanged(i.id,t),ko=yo.loudest.map((e=>e.id)),So&&!ko.includes(So)&&ko.length>=bo&&ko.pop();return{selected:ko.includes(i.id)||i.id===So,speaker:i}}const Ao=1e3,Ro=40,wo=new Map,Co=new Map;class Do{get samples(){return this.actives+this.inactives}get activeRate(){return this.actives/this.samples}constructor(e,t){Ct(this,"id",void 0),Ct(this,"track",void 0),Ct(this,"score",0),Ct(this,"active",!0),Ct(this,"muted",!1),Ct(this,"timer",0),Ct(this,"actives",0),Ct(this,"inactives",0),this.id=e,this.track=t,this.setActive(wo.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 t=function(){const e=[],t=[];return Array.from(wo.values()).forEach((i=>{i.active?e.push(i):t.push(i)})),{actives:e,inactives:t}}(),i=t.actives,r=t.inactives;if(i.length>3){let e;i.forEach((t=>{(!e||e.score>t.score)&&(e=t)})),e&&e.setActive(!1)}if(i.length<3&&r.length>0){let t;r.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(wo.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(wo.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()}),Ao)}clearTimer(){this.timer&&(clearTimeout(this.timer),this.timer=0)}}let No;function Mo(e,t,i){const r=wo.get(e)||new Do(e,t);return r.score=i,wo.set(e,r),function(e){if(Co.set(e,!0),!No)return void(No=Date.now());const t=Date.now();t-No>1e3&&(Co.get(e)?Co.set(e,!1):(Oo(e),Co.delete(e)),No=t)}(e),r}function Oo(e){const t=wo.get(e);t&&(wo.delete(e),t.clearTimer())}const Lo=new Map,Po=new Map;function Vo(e,t,i,r){const s=new DataView(e.data),o=s.getUint8(0);let n;if(0!=(128&o)&&71!==o){const t=function(e){if(e.byteLength<=0)return[];const t=[];let i=0;for(;i<e.byteLength;){const r=(128&e.getUint8(i))>>7,s=127&e.getUint8(i);if(!(r&&i+4<=e.byteLength)){i++;break}{const r=e.getUint32(i,!1),o=(16776192&r)>>10,n=1023&r;t.push({pt:s,ts_offset:o,length:n,data:new Uint8Array}),i+=4}}let r=e.byteLength-i;for(const s of t){if(s.length>r)return console.warn("Broken red payload"),[];s.length>0&&(s.data=new Uint8Array(e.buffer,e.byteOffset+i,s.length),i+=s.length,r-=s.length)}if(r>0){const s={pt:t.length>0?t[t.length-1].pt:0,ts_offset:0,length:r,data:new Uint8Array(e.buffer,e.byteOffset+i,r)};t.push(s)}return t}(s);if(t.length>0){const i=function(e){let t=0;for(let i=0;i<e.length;i++)t+=i<e.length-1?4:1,t+=e[i].length;const i=new Uint8Array(t);let r=0;for(let t=0;t<e.length;t++)if(t<e.length-1){const s=(2147483648|(127&e[t].pt)<<24|(262143&e[t].ts_offset)<<10|1023&e[t].length)>>>0;i[r++]=s>>24&255,i[r++]=s>>16&255,i[r++]=s>>8&255,i[r++]=255&s}else i[r++]=127&e[t].pt;for(const t of e)i.set(t.data,r),r+=t.length;return i}(t.map((e=>{const t=new Uint8Array(e.length);t.set(e.data);const i=so(new DataView(t.buffer));return null!=i&&i.frame&&(e.data=null==i?void 0:i.frame),n=i,e})));e.data=i.buffer}}else n=so(s),n&&(e.data=n.frame.buffer);if(t.enqueue(e),!n)return;const a=n.tlv.find((e=>e.tag===ro.METADATA));a&&i&&a.value instanceof Uint8Array&&i(a.value);const c=n.tlv.find((e=>e.tag===ro.AUDIO_64_BIT_PTS));if(c&&r&&c.value instanceof Uint8Array&&8==c.value.length){r(new DataView(c.value.buffer).getBigUint64(0,!0))}}async function xo(e){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!ye().supportWebRTCEncodedTransform)return void me.warning("browser not support audio encoded transform");if(Lo.has(e))return;const r={track:e.track,onMetadata:i.onMetadata,onPts:i.onPts};if(p()&&!L()){if(!e.createEncodedStreams)return void me.warning("browser not support createEncodedStreams() API");ce(t.CHROME,87,116)||(i.enableTopn=!1);let o=null;try{o=e.createEncodedStreams()}catch(e){return void me.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&&(me.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=so(new DataView(t.data));if(!s)return i.enqueue(t);const o=e.track.id;Po.set(o,e.track);const n=null===(r=s.tlv.find((e=>e.tag===ro.AUDIO_LEVEL)))||void 0===r?void 0:r.value;let a=0;"number"==typeof n&&(a=127-n);const c=Io(e,Math.round(Math.pow(10,a/60)-1)),d=c.selected,u=c.speaker,h=Mo(o,e.track,u.energyScore);h.addSample(d),h.active&&(t.data=s.frame.buffer,i.enqueue(t))}(e,t,o):i.enableMetadata||i.enablePts?Vo(t,o,i.onMetadata,i.onPts):o.enqueue(t)}});o.readable.pipeThrough(n).pipeTo(o.writable)}else{if("undefined"==typeof RTCRtpScriptTransform)return void me.warning("browser not support RTCRtpScriptTransform");const t=Js(),i=new MessageChannel;await new Promise((e=>t.onmessage=t=>{"registered"===t.data&&e(void 0)}));const o=new RTCRtpScriptTransform(t,{name:"audio-metadata-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?(me.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)):t.data.metadata&&r.onMetadata?r.onMetadata(t.data.metadata):t.data.pts&&r.onPts&&r.onPts(t.data.pts)},r.worker=t}function s(){e.track.removeEventListener("ended",s),function(e){const t=Lo.get(e);if(t){!function(e){const t=Eo.get(e);t&&(Eo.delete(e),yo&&(yo.removeSpeakers([t]),0===Eo.size&&(yo.destroy(),yo=null)))}(e),Oo(e.track.id),Lo.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){me.warning(e&&e.message)}}}(e)}Lo.set(e,r),e.track.addEventListener("ended",s)}const Uo="video/h264",Zo="video/h265";function Wo(e,t,i){let r=new Uint8Array(e,t,i),s=[],o=0;for(;s.length<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)}function Fo(e,t){switch(t){case Uo:return function(e){const t=new DataView(e.data);let i=0;for(;i+4<e.data.byteLength;){if(0===t.getUint8(i+0)&&0===t.getUint8(i+1)&&0===t.getUint8(i+2)&&1===t.getUint8(i+3)&&6===t.getUint8(i+4)){let r=i+6,s=0,o=0;for(;255===(o=t.getUint8(r++));)s+=255;s+=o;const n=Wo(e.data,r,s);return new Uint8Array(n)}i++}return null}(e);case Zo:return function(e){const t=new DataView(e.data);let i=0;for(;i+5<e.data.byteLength;){if(0===t.getUint8(i+0)&&0===t.getUint8(i+1)&&0===t.getUint8(i+2)&&1===t.getUint8(i+3)&&78===t.getUint8(i+4)&&1===t.getUint8(i+5)&&101===t.getUint8(i+6)){let r=i+7,s=0,o=0;for(;255===(o=t.getUint8(r++));)s+=255;s+=o;const n=Wo(e.data,r,s);return new Uint8Array(n)}i++}return null}(e);default:return null}}function Go(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)}function Bo(e,t,i){switch(i){case Uo:return function(e,t){const i=Go(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}(e,t);case Zo:return function(e,t){const i=Go(t),r=i.length,s=Math.floor(r/255),o=r%255,n=new Uint8Array(7+s+1+r+1+e.byteLength);n[0]=0,n[1]=0,n[2]=0,n[3]=1,n[4]=78,n[5]=1,n[6]=101;let a=0;for(;a<s;)n[7+a]=255,a++;return n[7+a]=o,a++,n.set(i,7+a),a+=r,n[7+a]=128,a++,n.set(new Uint8Array(e),7+a),n.buffer}(e,t);default:return null}}function Ko(e){if(e.length<5)return"";let t=-1;for(let i=0;i<e.length-3;i++){if(0===e[i]&&0===e[i+1]&&1===e[i+2]){t=i;break}if(i<e.length-4&&0===e[i]&&0===e[i+1]&&0===e[i+2]&&1===e[i+3]){t=i;break}}if(-1===t)return"";const i=t+(0===e[t+2]?4:3);if(i>=e.length)return"";const r=e[i];if(128&r)return"";if((r>>1&63)>=32)return Zo;if(i+1<e.length){if(0==(248&e[i+1]))return Zo}return(31&r)<=31?Uo:""}const Ho=new Map;async function Yo(e,t){if(!ye().supportWebRTCEncodedTransform)return void me.warning("browser not support video encoded transform");if(Ho.has(e))return;if(!e.track)return;const i={track:e.track};if(p()){if(!e.createEncodedStreams)return void me.warning("browser not support createEncodedStreams() API");let s=null;try{s=e.createEncodedStreams()}catch(e){return void me.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&&(me.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=Ko(new Uint8Array(t.data)),a=o.shift();if(a){const e=Bo(t.data,a,n);e&&(t.data=e)}s.enqueue(t)}});s.readable.pipeThrough(n).pipeTo(s.writable)}else{if(!c())return;{if("undefined"==typeof RTCRtpScriptTransform)return void me.warning("browser not support RTCRtpScriptTransform");const s=Js(),o=new MessageChannel;await new Promise((e=>s.onmessage=t=>{"registered"===t.data&&e(void 0)}));const n=new RTCRtpScriptTransform(s,{name:"sei-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&&(me.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=Ho.get(e);if(t){Ho.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){me.warning(e&&e.message)}}}Ho.set(e,i),e.track.addEventListener("ended",r)}const Xo=new Map;async function zo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!ye().supportWebRTCEncodedTransform)return void me.warning("browser not support video encoded transform");if(!e.track)return;if(Xo.has(e)){const i=Xo.get(e);return void(i&&(i.onSei=t.onSei))}const i={track:e.track,onSei:t.onSei};if(p()){if(!e.createEncodedStreams)return void me.warning("browser not support createEncodedStreams() API");let s=null;try{s=e.createEncodedStreams()}catch(e){return void me.error("create video-encoded-streams error",e&&e.message)}const o=new TransformStream({transform(s,o){if(i.controller||(i.controller=o),!i.firstFrameInfo){var n;const e=s.getMetadata()||{};i.firstFrameInfo=Nt({type:s.type,rtpTimestamp:s.timestamp,payloadType:e.payloadType||0,ssrc:e.synchronizationSource||0,length:s.data.byteLength},"mimeType"in e?{mimeType:e.mimeType}:{}),null===(n=t.onFirstFrame)||void 0===n||n.call(t,i.firstFrameInfo)}e.track&&e.track.id!==i.track.id&&(me.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 a=Fo(s,Ko(new Uint8Array(s.data)));a&&i.onSei&&i.onSei(a),o.enqueue(s)}});s.readable.pipeThrough(o).pipeTo(s.writable)}else if(c()){if("undefined"==typeof RTCRtpScriptTransform)return void me.warning("browser not support RTCRtpScriptTransform");const s=Js(),o=new MessageChannel;await new Promise((e=>s.onmessage=t=>{"registered"===t.data&&e(void 0)}));const n=new RTCRtpScriptTransform(s,{name:"sei-rx",port:o.port2},[o.port2]);e.transform=n,await new Promise((e=>s.onmessage=t=>{"started"===t.data&&e(void 0)})),o.port1.onmessage=s=>{var o;if(s.data.transformed&&e.track&&(null===(o=e.track)||void 0===o?void 0:o.id)!==i.track.id)me.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);else if(s.data.sei&&i.onSei)i.onSei(s.data.sei);else if(s.data.firstFrameInfo&&t.onFirstFrame){var n;null===(n=t.onFirstFrame)||void 0===n||n.call(t,s.data.firstFrameInfo)}},i.worker=s}function r(){if(e.track){if(this.id!==e.track.id)return;e.track.removeEventListener("ended",r)}!function(e){const t=Xo.get(e);if(t){Xo.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){me.warning(e&&e.message)}}}(e)}Xo.set(e,i),e.track.addEventListener("ended",r)}Ee();export{Oe as AUDIO_CONTEXT_EVENT,Ke as AUDIO_ENCODER_CONFIG_SETTINGS,lt as AUDIO_TRACK_EVENT,Pr as AgoraRTCPlayer,Si as AudioProcessorContext,yi as AudioProcessorDestination,ht as AudioSourceEvents,wr as BufferSourceAudioTrack,ys as CameraVideoTrack,pt as DEFAULT_LOCAL_AUDIO_TRACK_STATS,mt as DEFAULT_LOCAL_VIDEO_TRACK_STATS,_t as DEFAULT_NETWORK_QUALITY_STATS,gt as DEFAULT_REMOTE_AUDIO_TRACK_STATS,ft as DEFAULT_REMOTE_VIDEO_TRACK_STATS,zs as DataChannel,At as DataChannelEvents,ui as DeviceManager,yt as DeviceManagerEvent,Et as DeviceManagerState,si as HAS_GUM_AUDIO,oi as HAS_GUM_VIDEO,Ar as LocalAudioTrack,Qs as LocalDataChannel,Lt as LocalTrack,ct as LocalTrackEvents,Es as LocalVideoTrack,It as MediaElementNumStatus,bt as MediaElementStatus,Rr as MicrophoneAudioTrack,Cr as MixingAudioTrack,vt as PROCESSOR_CONTEXT_EVENTS,Tt as PROCESSOR_DESTINATION_EVENTS,Ys as RemoteAudioTrack,js as RemoteDataChannel,nt as RemoteStreamFallbackType,ot as RemoteStreamType,Ks as RemoteTrack,dt as RemoteTrackEvents,Hs as RemoteVideoTrack,ri as SAFARI_GLOBAL_GUM_LOCK,Ze as SUPPORT_SCREEN_ENCODER_CONFIG_LIST,We as SUPPORT_SVC_CONFIG_LIST,Ue as SUPPORT_VIDEO_ENCODER_CONFIG_LIST,st as StreamType,Ot as Track,at as TrackEvents,it as TrackHint,tt as TrackInternalEvent,ut as TrackMediaType,Or as VideoPlayer,Ei as VideoProcessorContext,vi as VideoProcessorDestination,kt as VideoState,Ye as __TRACK_LIST__,Xe as addTrack,Ut as audioContextState,fi as audioElementPlayCenter,Yt as audioTimerLoop,pi as autoPlayGestureEventEmitter,Ui as blob2Uint8Array,Ii as checkMediaStreamTrackResolution,Ti as checkTrackState,ks as createBufferSourceAudioTrack,Rs as createCameraVideoTrack,Ss as createCustomAudioTrack,As as createCustomVideoTrack,ws as createMicrophoneAndCameraTracks,bs as createMicrophoneAudioTrack,Is as createMixingAudioTrack,Cs as createScreenVideoTrack,Kt as decodeAudioData,Se as detectSupportAudioElementSetSinkId,we as detectSupportAutCC,Ce as detectSupportAutCCFeedback,Re as detectSupportInstantVideo,Ae as detectSupportPrePc,Ie as detectSupportPreSub,Me as detectSupportRestrictOwnAudio,ke as detectSupportSDPEndpoint,Ne as detectSupportSuppressLocalAudioPlayback,hi as deviceManager,xi as emptyImage2TypedArray,Vi as frameData2CryptoBuffer,Ft as getAudioContext,He as getAudioEncoderConfiguration,Oi as getBitrateConstrainRange,Li as getBitrateFromResAndFps,ye as getCompatibility,wi as getConstraintsFromAudioConfig,Ai as getConstraintsFromCameraConfig,Di as getConstraintsFromMicrophoneConfig,Ci as getConstraintsFromScreenAudioConfig,Ri as getConstraintsFromScreenConfig,ii as getElectronScreenSources,ei as getElectronScreenStream,ti as getElectronScreenStreamByUserSelect,ni as getLocalStream,Mi as getNewNearestVideoProfile,Ni as getNewVideoBitrate,Pi as getOriginSenderConfig,Be as getScalabilityConfiguration,Ge as getScreenEncoderConfiguration,zt as getSilenceAudioTrack,Qt as getSilenceSamplesDuration,Zi as getStaticTrackStream,Fe as getVideoEncoderConfiguration,ci as handleGetUserMediaError,Gt as hasAudioContext,je as hasMicrophoneTrack,ao as interceptLocalAudioFrame,Yo as interceptLocalVideoFrame,xo as interceptRemoteAudioFrame,zo as interceptRemoteVideoFrame,Je as isAudioEncoderConfiguration,$e as isAudioEncoderConfigurationOrPreset,St as isBeautyEffectOptions,rt as isLowStreamParameter,be as isPlanB,et as isScreenSourceType,Qe as isVideoEncoderConfiguration,qe as isVideoEncoderConfigurationOrPreset,Bt as polyfillAudioNode,ze as removeTrack,mi as requestAutoplayGesture,Wt as restartBackgroundTag,jt as silenceScriptProcessHandler,Ee as updateAgoraRTCCompatibility,Xs as visibilityWatcher};
|
|
5
|
+
import"webrtc-adapter";import{getBrowserInfo as e,BrowserName as t,isChromeKernel as i,nextTick as r,isAboveChrome as o,isAboveFirefox as s,isAboveSafari as n,BrowserOS as a,isSafari as c,isWkWebview as d,getParameter as u,isFirefox as h,isAboveSafari15_4 as l,isChrome as p,isEdge as m,isMobile as g,isBelowChrome as _,isAboveEdge as f,isAboveOpera as v,checkValidConstrainLong as T,checkValidNumber as E,checkValidEnum as y,checkValidBoolean as S,AgoraRTCError as b,AgoraRTCErrorCode as k,isEmpty as I,EventEmitter as A,getRandomString as R,runOnce as w,AgoraAPIName as D,AgoraAPITag as C,PromiseMutex as M,emitAsPromiseNoResponse as N,removeItemFromList as O,isIOS as L,isIpadOS as P,wait as V,showElectronSelectSourceWindow as x,getElectronInstance as U,isElectron as W,recursiveMerge as Z,isAndroid as B,isHarmonyOS as F,detectSecureContext as G,isAndroidChromium as K,domLoadedPromise as H,isIOS15 as Y,emitAsPromise as X,noop as z,isLegacyChrome as j,constrainLongToNumber as Q,hexToBytes as J,md5 as q,atom as $,emitAsInvokerNoResponse as ee,isIOS16 as te,retryable as ie,isInPage as re,sumArray as oe,getOSWithVersion as se,isAboveIOS15_1 as ne,jsonClone as ae,isBetweenBrowser as ce,isWindows as de,elementVisibleChecker as ue,safeCloneJson as he,isAboveIOS15_2 as le,isWechatBrowser as pe}from"@agora-js/shared";export{isElectron}from"@agora-js/shared";import{logger as me,report as ge,AgoraRTCEventUploadType as _e,apiInvoke as fe}from"@agora-js/report";import ve from"axios";const Te={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,supportSuppressLocalAudioPlayback:!1,supportRestrictOwnAudio:!1};function Ee(){const p=e();Te.getDisplayMedia=function(e){if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia)return!0;return!1}(),Te.getStreamFromExtension=p.name===t.CHROME&&Number(p.version)>34,Te.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}(),Te.supportMinBitrate=p.name===t.CHROME||p.name===t.EDGE,Te.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)}(),p.name===t.SAFARI&&(Number(p.version)>=14?Te.supportDualStream=!0:Te.supportDualStream=!1),Te.webAudioMediaStreamDest=function(){const i=e();if(i.name===t.SAFARI&&Number(i.version)<12)return!1;return!0}(),Te.supportReplaceTrack=function(){if(!window.RTCRtpSender)return!1;if("function"==typeof RTCRtpSender.prototype.replaceTrack)return!0;return!1}(),Te.supportWebGL="undefined"!=typeof WebGLRenderingContext,Te.supportRequestFrame=!!window.CanvasCaptureMediaStreamTrack,i()||(Te.webAudioWithAEC=!0),Te.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}(),Te.supportDataChannel=function(){if(o(76)||s(68)||n(14))return!0;return!1}(),Te.supportPCSetConfiguration=function(){const e=window.RTCPeerConnection;return!h()&&!!e&&e.prototype.setConfiguration instanceof Function}(),Te.supportWebRTCEncodedTransform=o(87)||l()||s(117),Te.supportWebRTCInsertableStream=function(){const i=e();return(i.name===t.CHROME||i.name===t.EDGE)&&Number(i.version)>=94&&"MediaStreamTrackGenerator"in window&&"MediaStreamTrackProcessor"in window}(),Te.supportRequestVideoFrameCallback=function(){if("requestVideoFrameCallback"in HTMLVideoElement.prototype)return!0;return!1}(),Te.supportWebCrypto="undefined"!=typeof window&&void 0!==window.crypto&&void 0!==window.crypto.subtle,Te.supportSuppressLocalAudioPlayback=Me(),Te.supportRestrictOwnAudio=Ne(),r((()=>{Te.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"))}(),me.debug("browser ua: ",navigator.userAgent),me.info("browser info: ",p),me.info("browser compatibility: ",Te)}))}function ye(){return Te}function Se(){return"setSinkId"in HTMLAudioElement.prototype&&(!u("RESTRICTION_SET_PLAYBACK_DEVICE")||(p()||m())&&!g())}function be(){return!Te.supportUnifiedPlan||u("CHROME_FORCE_PLAN_B")&&i()}function ke(){return u("ENABLE_JOIN_V4")}function Ie(e){return!(h()||_(87)||be())&&(!!u("ENABLE_PRE_SUB")||!(null==e||!e.autoSubscribe||u("FORCE_DISABLE_AUTO_SUB")))}function Ae(e){return!be()&&!u("USE_NEW_TOKEN")&&(!!u("ENABLE_PREALLOC_PC")||!(null==e||!e.autoSubscribe||u("FORCE_DISABLE_AUTO_SUB")))}function Re(e){return u("ENABLE_INSTANT_VIDEO")?u("ENABLE_INSTANT_VIDEO"):!(null==e||!e.autoSubscribe||u("FORCE_DISABLE_AUTO_SUB"))}function we(){return!!u("FORCE_ENABLE_AUT_CC")||!be()&&(!!u("ENABLE_AUT_CC")||void 0)}function De(){return!!u("FORCE_ENABLE_AUT_CC")||!be()&&(!!u("ENABLE_AUT_FEEDBACK")||void 0)}function Ce(){return navigator.mediaDevices&&"getSupportedConstraints"in navigator.mediaDevices}function Me(){if(Ce()){const e=navigator.mediaDevices.getSupportedConstraints();return!(!("suppressLocalAudioPlayback"in e)||!e.suppressLocalAudioPlayback)}return o(141)||f(141)||v(141)}function Ne(){if(Ce()){const e=navigator.mediaDevices.getSupportedConstraints();return!(!("restrictOwnAudio"in e)||!e.restrictOwnAudio)}return o(141)||f(141)||v(125)}let Oe=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 Le(e,t,i){return{sampleRate:e,stereo:t,bitrate:i}}function Pe(e,t,i,r,o){return{width:e,height:t,frameRate:i,bitrateMin:r,bitrateMax:o}}function Ve(e,t,i,r,o){return{width:{max:e},height:{max:t},frameRate:i,bitrateMin:r,bitrateMax:o}}function xe(e,t){return{numSpatialLayers:e,numTemporalLayers:t}}const Ue={"90p":Pe(160,90),"90p_1":Pe(160,90),"120p":Pe(160,120,15,30,65),"120p_1":Pe(160,120,15,30,65),"120p_3":Pe(120,120,15,30,50),"120p_4":Pe(212,120),"180p":Pe(320,180,15,30,140),"180p_1":Pe(320,180,15,30,140),"180p_3":Pe(180,180,15,30,100),"180p_4":Pe(240,180,15,30,120),"240p":Pe(320,240,15,40,200),"240p_1":Pe(320,240,15,40,200),"240p_3":Pe(240,240,15,40,140),"240p_4":Pe(424,240,15,40,220),"360p":Pe(640,360,15,80,400),"360p_1":Pe(640,360,15,80,400),"360p_3":Pe(360,360,15,80,260),"360p_4":Pe(640,360,30,80,600),"360p_6":Pe(360,360,30,80,400),"360p_7":Pe(480,360,15,80,320),"360p_8":Pe(480,360,30,80,490),"360p_9":Pe(640,360,15,80,800),"360p_10":Pe(640,360,24,80,800),"360p_11":Pe(640,360,24,80,1e3),"480p":Pe(640,480,15,100,500),"480p_1":Pe(640,480,15,100,500),"480p_2":Pe(640,480,30,100,1e3),"480p_3":Pe(480,480,15,100,400),"480p_4":Pe(640,480,30,100,750),"480p_6":Pe(480,480,30,100,600),"480p_8":Pe(848,480,15,100,610),"480p_9":Pe(848,480,30,100,930),"480p_10":Pe(640,480,10,100,400),"720p":Pe(1280,720,15,120,1130),"720p_auto":Pe(1280,720,30,900,3e3),"720p_1":Pe(1280,720,15,120,1130),"720p_2":Pe(1280,720,30,120,2e3),"720p_3":Pe(1280,720,30,120,1710),"720p_5":Pe(960,720,15,120,910),"720p_6":Pe(960,720,30,120,1380),"1080p":Pe(1920,1080,15,120,2080),"1080p_1":Pe(1920,1080,15,120,2080),"1080p_2":Pe(1920,1080,30,120,3e3),"1080p_3":Pe(1920,1080,30,120,3150),"1080p_5":Pe(1920,1080,60,120,4780),"1440p":Pe(2560,1440,30,120,4850),"1440p_1":Pe(2560,1440,30,120,4850),"1440p_2":Pe(2560,1440,60,120,7350),"4k":Pe(3840,2160,30,120,8910),"4k_1":Pe(3840,2160,30,120,8910),"4k_3":Pe(3840,2160,60,120,13500)},We={"480p":Ve(640,480,5),"480p_1":Ve(640,480,5),"480p_2":Ve(640,480,30),"480p_3":Ve(640,480,15),"720p":Ve(1280,720,5),"720p_auto":Pe(1280,720,30,900,3e3),"720p_1":Ve(1280,720,5),"720p_2":Ve(1280,720,30),"720p_3":Ve(1280,720,15),"1080p":Ve(1920,1080,5),"1080p_1":Ve(1920,1080,5),"1080p_2":Ve(1920,1080,30),"1080p_3":Ve(1920,1080,15)},Ze={"1SL1TL":xe(1,1),"3SL3TL":xe(3,3),"2SL3TL":xe(2,3)};function Be(e){return e||(e="480p_1"),"string"==typeof e?Object.assign({},Ue[e]):e}function Fe(e){return"string"==typeof e?Object.assign({},We[e]):e}function Ge(e){return"string"==typeof e?Object.assign({},Ze[e]):e}const Ke={speech_low_quality:Le(16e3,!1),speech_standard:Le(32e3,!1,18),music_standard:Le(48e3,!1),standard_stereo:Le(48e3,!0,56),high_quality:Le(48e3,!1,128),high_quality_stereo:Le(48e3,!0,192)};function He(e){return"string"==typeof e?Object.assign({},Ke[e]):e}const Ye=[];function Xe(e){Ye.includes(e)||Ye.push(e)}function ze(e){const t=Ye.indexOf(e);-1!==t&&Ye.splice(t,1)}function je(){return Ye.some((e=>function(e){return"__className__"in e&&"MicrophoneAudioTrack"===e.__className__}(e)))}let Qe=function(e){return e.VIDEO_MIRROR_MODE_ENABLED="enabled",e.VIDEO_MIRROR_MODE_DISABLED="disabled",e}({});function Je(e){return T(e.width,"config.width"),T(e.height,"config.height"),void 0!==e.frameRate&&T(e.frameRate,"config.frameRate"),void 0!==e.bitrateMax&&E(e.bitrateMax,"config.bitrateMax"),void 0!==e.bitrateMin&&E(e.bitrateMin,"config.bitrateMin"),void 0!==e.mirrorMode&&y(e.mirrorMode,"config.mirrorMode",[Qe.VIDEO_MIRROR_MODE_ENABLED,Qe.VIDEO_MIRROR_MODE_DISABLED]),!0}function qe(e){return void 0!==e.sampleRate&&E(e.sampleRate,"config.sampleRate",0,96e3,!0),void 0!==e.sampleSize&&E(e.sampleRate,"config.sampleSize",0,128,!0),void 0!==e.stereo&&S(e.stereo,"config.stereo"),void 0!==e.bitrate&&E(e.bitrate,"config.bitrate",0,1e4,!1),!0}function $e(e){return"string"==typeof e?y(e,"profile",Object.keys(Ue)):Je(e),!0}function et(e){return"string"==typeof e?y(e,"profile",Object.keys(Ke)):qe(e),!0}function tt(e){return y(e,"mediaSource",["screen","window","application"]),!0}let it=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}({}),rt=function(e){return e.SCREEN_TRACK="screen_track",e.CUSTOM_TRACK="custome_track",e.LOW_STREAM="low_stream",e.SCREEN_LOW_TRACK="screen_low_track",e}({});function ot(e){if(!e)throw new b(k.INVALID_PARAMS);return I(e.width)||T(e.width,"streamParameter.width"),I(e.height)||T(e.height,"streamParameter.height"),I(e.framerate)||T(e.framerate,"streamParameter.framerate"),I(e.bitrate)||E(e.bitrate,"streamParameter.bitrate"),!0}let st=function(e){return e[e.HIGH_STREAM=0]="HIGH_STREAM",e[e.LOW_STREAM=1]="LOW_STREAM",e}({}),nt=function(e){return e[e.HIGH_STREAM=0]="HIGH_STREAM",e[e.LOW_STREAM=1]="LOW_STREAM",e[e.HIGH_STREAM_LAYER1=4]="HIGH_STREAM_LAYER1",e[e.HIGH_STREAM_LAYER2=5]="HIGH_STREAM_LAYER2",e[e.HIGH_STREAM_LAYER3=6]="HIGH_STREAM_LAYER3",e[e.HIGH_STREAM_LAYER4=7]="HIGH_STREAM_LAYER4",e[e.HIGH_STREAM_LAYER5=8]="HIGH_STREAM_LAYER5",e[e.HIGH_STREAM_LAYER6=9]="HIGH_STREAM_LAYER6",e}({}),at=function(e){return e[e.DISABLE=0]="DISABLE",e[e.LOW_STREAM=1]="LOW_STREAM",e[e.AUDIO_ONLY=2]="AUDIO_ONLY",e[e.HIGH_STREAM_LAYER1=3]="HIGH_STREAM_LAYER1",e[e.HIGH_STREAM_LAYER2=4]="HIGH_STREAM_LAYER2",e[e.HIGH_STREAM_LAYER3=5]="HIGH_STREAM_LAYER3",e[e.HIGH_STREAM_LAYER4=6]="HIGH_STREAM_LAYER4",e[e.HIGH_STREAM_LAYER5=7]="HIGH_STREAM_LAYER5",e[e.HIGH_STREAM_LAYER6=8]="HIGH_STREAM_LAYER6",e}({}),ct=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}({}),dt=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}({}),ut=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.PLAY_START="play-start",e.PLAY_END="play-end",e.FIRST_FRAME_RENDER="first-frame-render",e}({}),ht=function(e){return e.AUDIO="audio",e.VIDEO="video",e.DATA="data",e}({}),lt=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}({}),pt=function(e){return e.UPDATE_TRACK_SOURCE="update-track-source",e}({});const mt={sendVolumeLevel:0,sendBitrate:0,sendBytes:0,sendPackets:0,sendPacketsLost:0,sendJitterMs:0,sendRttMs:0,currentPacketLossRate:0},gt={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},_t={transportDelay:0,end2EndDelay:0,receiveBitrate:0,receiveLevel:0,receiveBytes:0,receiveDelay:0,receivePackets:0,receivePacketsLost:0,receivePacketsDiscarded:0,totalDuration:0,totalFreezeTime:0,freezeRate:0,packetLossRate:0,currentPacketLossRate:0,publishDuration:-1},ft={uplinkNetworkQuality:0,downlinkNetworkQuality:0},vt={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 Tt=function(e){return e.ON_TRACK="on_track",e.ON_NODE="on_node",e}({}),Et=function(e){return e.REQUEST_UPDATE_CONSTRAINTS="request_update_constraints",e.REQUEST_CONSTRAINTS="request_constraints",e}({}),yt=function(e){return e.IDLE="IDLE",e.INITING="INITING",e.INITEND="INITEND",e}({}),St=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 bt(e){return void 0!==e.smoothnessLevel&&E(e.smoothnessLevel,"options.smoothnessLevel",0,1,!1),void 0!==e.lighteningLevel&&E(e.lighteningLevel,"options.lighteningLevel",0,1,!1),void 0!==e.rednessLevel&&E(e.rednessLevel,"options.rednessLevel",0,1,!1),void 0!==e.lighteningContrastLevel&&y(e.lighteningContrastLevel,"options.lighteningContrastLevel",[0,1,2]),!0}let kt=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}({}),It=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 At={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 Rt=function(e){return e.OPEN="open",e.MESSAGE="message",e.CLOSE="close",e.CLOSING="closing",e.ERROR="error",e}({});function wt(e,t,i,r,o){var s={};return Object.keys(r).forEach((function(e){s[e]=r[e]})),s.enumerable=!!s.enumerable,s.configurable=!!s.configurable,("value"in s||s.initializer)&&(s.writable=!0),s=i.slice().reverse().reduce((function(i,r){return r(e,t,i)||i}),s),o&&void 0!==s.initializer&&(s.value=s.initializer?s.initializer.call(o):void 0,s.initializer=void 0),void 0===s.initializer?(Object.defineProperty(e,t,s),null):s}function Dt(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,r=Array(t);i<t;i++)r[i]=e[i];return r}function Ct(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!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:t+""}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function Mt(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 Nt(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?Mt(Object(i),!0).forEach((function(t){Ct(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):Mt(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function Ot(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var i=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=i){var r,o,s,n,a=[],c=!0,d=!1;try{if(s=(i=i.call(e)).next,0===t){if(Object(i)!==i)return;c=!1}else for(;!(c=(r=s.call(i)).done)&&(a.push(r.value),a.length!==t);c=!0);}catch(e){d=!0,o=e}finally{try{if(!c&&null!=i.return&&(n=i.return(),Object(n)!==n))return}finally{if(d)throw o}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Dt(e,t);var i={}.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?Dt(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}class Lt extends A{set _mediaStreamTrack(e){e!==this.mediaStreamTrack&&(this.safeEmit(ct.TRACK_UPDATED,e),this.mediaStreamTrack=e)}get _mediaStreamTrack(){return this.mediaStreamTrack}constructor(e,t){super(),Ct(this,"trackMediaType",void 0),Ct(this,"_ID",void 0),Ct(this,"_rtpTransceiver",void 0),Ct(this,"_lowRtpTransceiver",void 0),Ct(this,"_hints",[]),Ct(this,"_isClosed",!1),Ct(this,"_originMediaStreamTrack",void 0),Ct(this,"mediaStreamTrack",void 0),Ct(this,"_external",{}),this._ID=t||R(8,"track-"),this._originMediaStreamTrack=e,this.mediaStreamTrack=e,Xe(this)}toString(){return this._ID}getTrackId(){return this._ID}getMediaStreamTrack(e){return e||w((()=>{var e;ge.reportApiInvoke(null,{name:D.GET_MEDIA_STREAM_TRACK,options:[],tag:C.TRACER}).onSuccess((null===(e=this._mediaStreamTrack)||void 0===e?void 0:e.label)||"")}),this.mediaStreamTrack.id||this.getTrackId()),this._mediaStreamTrack}getRTCRtpTransceiver(e){return e===st.LOW_STREAM?this._lowRtpTransceiver:this._rtpTransceiver}getMediaStreamTrackSettings(){return this.getMediaStreamTrack(!0).getSettings()}close(){this._isClosed=!0,this._lowRtpTransceiver=void 0,this._rtpTransceiver=void 0,ze(this),this.emit(dt.CLOSED),this.removeAllListeners(ct.SEI_RECEIVED)}_updateRtpTransceiver(e,t){if(t===st.LOW_STREAM){if(this._lowRtpTransceiver===e)return;this._lowRtpTransceiver=e}else{if(this._rtpTransceiver===e)return;this._rtpTransceiver=e}this.emit(ct.TRANSCEIVER_UPDATED,e,t)}}class Pt extends Lt{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),Ct(this,"_enabled",!0),Ct(this,"_muted",!1),Ct(this,"_isExternalTrack",!1),Ct(this,"_isClosed",!1),Ct(this,"_enabledMutex",void 0),Ct(this,"processor",void 0),Ct(this,"_processorContext",void 0),Ct(this,"_handleTrackEnded",(()=>{this.onTrackEnded()})),this._enabledMutex=new M("".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,me.debug("[".concat(this.getTrackId(),"] close")),this.emit(it.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 N(this,it.NEED_REPLACE_TRACK,this),this.processor&&this._processorContext&&this.processor.updateInput({track:this._originMediaStreamTrack,context:this._processorContext}))}_getDefaultPlayerConfig(){return{}}onTrackEnded(){me.debug("[".concat(this.getTrackId(),"] track ended")),this.safeEmit(dt.TRACK_ENDED)}stateCheck(e,t){if(me.debug("check track state, [muted: ".concat(this._muted,", enabled: ").concat(this._enabled,"] to [").concat(e,": ").concat(t,"]")),S(t,e),this._enabled&&this._muted&&"enabled"===e&&!1===t)throw new b(k.TRACK_STATE_UNREACHABLE,"cannot set enabled while the track is muted").print("error",me);if(!this._enabled&&!this._muted&&"muted"===e&&!0===t)throw new b(k.TRACK_STATE_UNREACHABLE,"cannot set muted while the track is disabled").print("error",me)}getProcessorStats(){return this._processorContext&&this._processorContext.gatherStats()||[]}getProcessorUsage(){return this._processorContext?this._processorContext.gatherUsage():Promise.resolve([])}}const Vt=window.AudioContext||window.webkitAudioContext;let xt,Ut=null;const Wt=new class extends A{constructor(){super(...arguments),Ct(this,"prevState",void 0),Ct(this,"curState",void 0),Ct(this,"currentTime",void 0),Ct(this,"currentTimeStuckAt",void 0),Ct(this,"interruptDetectorTrack",void 0),Ct(this,"onLocalAudioTrackMute",(()=>{me.info("ios15-interruption-start"),this.emit(Oe.IOS_15_16_INTERRUPTION_START)})),Ct(this,"onLocalAudioTrackUnmute",(async()=>{me.info("ios15-interruption-end"),"running"!==this.curState||this.duringInterruption?me.info("ios15-interruption-end-canceled"):(Ut&&await Ut.suspend(),this.emit(Oe.IOS_15_16_INTERRUPTION_END))}))}get duringInterruption(){return"running"===this.prevState&&"interrupted"===this.curState}bindInterruptDetectorTrack(e){me.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){me.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 Zt(){if(!Vt)return void me.error("your browser is not support web audio");me.info("create audio context");const t=Nt({},u("WEBAUDIO_INIT_OPTIONS"));me.debug("audio context init option:",JSON.stringify(t)),Ut=new Vt(t),Wt.curState=Ut.state,Ut.onstatechange=()=>{Wt.prevState=Wt.curState,Wt.curState=Ut?Ut.state:void 0;const t=Wt.prevState,i=Wt.curState,r="running"===i,o="interrupted"===i,s="running"===t,n="suspended"===t,a="interrupted"===t,c=e().osVersion;(L()||P())&&s&&o&&(me.info("ios".concat(c,"-interruption-start")),Wt.emit(Oe.IOS_INTERRUPTION_START)),(L()||P())&&(n||a)&&r&&(me.info("ios".concat(c,"-interruption-end")),Wt.emit(Oe.IOS_INTERRUPTION_END)),t!==i&&Wt.emit(Oe.STATE_CHANGE,i,t)},setInterval((()=>{var e;const t=null===(e=Ut)||void 0===e?void 0:e.currentTime;if(Wt.currentTime!==t)Wt.currentTimeStuckAt&&(me.debug("AudioContext current time resume at ".concat(t)),Wt.currentTimeStuckAt=void 0),Wt.currentTime=t;else{if(t!==Wt.currentTimeStuckAt){ge.reportApiInvoke(null,{name:"WEB_AUDIO_CURRENT_TIME_STUCK",options:{currentTime:t},tag:C.TRACER}).onSuccess(),me.warning("AudioContext current time stuck at ".concat(t))}Wt.currentTimeStuckAt=t}}),5e3),async function(e){const t=["click","contextmenu","auxclick","dblclick","mousedown","mouseup","touchend","keydown","keyup"];let i,r=!1,o=!1,s=!1;function n(t){"running"===e.state?a(!1):L()||P()?"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,h,{capture:!0,passive:!0}):window.removeEventListener(t,h,{capture:!0,passive:!0})}}}function c(){n(!0)}function d(){n(!1)}function h(){n(!0)}function l(){let e;try{e=i.play(),e?e.then(g,g):(i.addEventListener("playing",g),i.addEventListener("abort",g),i.addEventListener("error",g))}catch(e){g()}}function p(e){s||(i.paused?e?(m(!1),s=!0,l()):m(!0):m(!1))}function m(e){if(o!==e){o=e;for(let i=0,r=t;i<r.length;i++){const t=r[i];e?window.addEventListener(t,_,{capture:!0,passive:!0}):window.removeEventListener(t,_,{capture:!0,passive:!0})}}}function g(){i.removeEventListener("playing",g),i.removeEventListener("abort",g),i.removeEventListener("error",g),s=!1,p(!1)}function _(){p(!0)}let f;if(L()&&u("IOS_BG_TAG")){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,f=()=>{if(u("IOS_AUTO_RESTART_BG_TAG")&&i&&i.srcObject&&!s&&(!i.paused||!0!==o)){i.paused||i.pause();try{s=!0,l()}catch(e){s=!1}return!0}},p(!0)}return Wt.on(Oe.STATE_CHANGE,c),n(!1),f}(Ut).then((e=>{xt=e}))}function Bt(){if(xt){if(xt()){ge.reportApiInvoke(null,{name:"BG_AUDIO_TAG_RESTART",options:{},tag:C.TRACER}).onSuccess(),me.debug("restart background audio tag success")}}}function Ft(){if(!Ut){if(Zt(),!Ut)throw new b(k.NOT_SUPPORTED,"can not create audio context");return Ut}return Ut}function Gt(){return!!Ut}function Kt(e){if(function(){if(null!==Yt)return Yt;const e=Ft(),t=e.createBufferSource(),i=e.createGain(),r=e.createGain();t.connect(i),t.connect(r),t.disconnect(i);let o=!1;try{t.disconnect(i)}catch(e){o=!0}return t.disconnect(),Yt=o,o}())return;const t=e.connect,i=e.disconnect;e.connect=(i,r,o)=>(e._inputNodes||(e._inputNodes=[]),e._inputNodes.includes(i)||(i instanceof AudioNode?(e._inputNodes.push(i),t.call(e,i,r,o)):t.call(e,i,r)),e),e.disconnect=(r,o,s)=>{i.call(e),r?O(e._inputNodes,r):e._inputNodes=[];for(const i of e._inputNodes)t.call(e,i)}}function Ht(e){const t=Ft();return new Promise(((i,r)=>{t.decodeAudioData(e,(e=>{i(e)}),(e=>{r(new b(k.DECODE_AUDIO_FILE_FAILED,e.toString()))}))}))}let Yt=null;function Xt(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=Ft();let o=t.createGain();o.gain.value=0,o.connect(t.destination);const s=()=>{if(i)return void(o=null);const n=t.createOscillator();n.onended=s,n.connect(o),n.start(0),n.stop(t.currentTime+r),e(t.currentTime)};s()}return()=>{i=!0}}let zt=null;function jt(){if(zt)return zt;const e=Ft();if(!e.createMediaStreamDestination)throw new b(k.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),zt=r.stream.getAudioTracks()[0],zt}function Qt(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 Jt(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 qt{constructor(){Ct(this,"context",void 0),Ct(this,"analyserNode",void 0),Ct(this,"sourceNode",void 0),this.context=Ft(),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||L()||P()||"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){me.warning("rebuild analyser node failed.")}}destroy(){this.updateSource(void 0)}}class $t extends A{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(),Ct(this,"outputNode",void 0),Ct(this,"outputTrack",void 0),Ct(this,"isPlayed",!1),Ct(this,"sourceNode",void 0),Ct(this,"context",void 0),Ct(this,"audioBufferNode",void 0),Ct(this,"destNode",void 0),Ct(this,"audioOutputLevel",0),Ct(this,"volumeLevelAnalyser",void 0),Ct(this,"_processedNode",void 0),Ct(this,"playNode",void 0),Ct(this,"isDestroyed",!1),Ct(this,"onNoAudioInput",void 0),Ct(this,"isNoAudioInput",!1),Ct(this,"_noAudioInputCount",0),this.context=Ft(),this.playNode=this.context.destination,this.outputNode=this.context.createGain(),Kt(this.outputNode),this.volumeLevelAnalyser=new qt}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(lt.ON_AUDIO_BUFFER,Qt(e))})}stopGetAudioBuffer(){this.audioBufferNode&&(this.audioBufferNode.onaudioprocess=null,this.outputNode.disconnect(this.audioBufferNode),this.audioBufferNode=void 0)}createOutputTrack(){if(!ye().webAudioMediaStreamDest)throw new b(k.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((()=>{Wt.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;L()||P()?"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 V(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 ei extends $t{get isFreeze(){return!1}constructor(t,i,r){var o;if(super(),Ct(this,"sourceNode",void 0),Ct(this,"track",void 0),Ct(this,"clonedTrack",void 0),Ct(this,"audioElement",void 0),Ct(this,"isCurrentTrackCloned",!1),Ct(this,"isRemoteTrack",!1),Ct(this,"originVolumeLevelAnalyser",void 0),Ct(this,"rebuildWebAudio",(async()=>{if(me.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 me.debug("rebuild web audio success, current volume status",this.getAccurateVolumeLevel());this.context.resume().then((()=>me.info("resume success"))),me.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),Kt(this.sourceNode),this.volumeLevelAnalyser.rebuildAnalyser();const i=this.outputNode.gain.value;this.outputNode=this.context.createGain(),this.outputNode.gain.setValueAtTime(i,this.context.currentTime),Kt(this.outputNode),this.emit(lt.UPDATE_SOURCE),this.connect(),this.audioElement.srcObject=t,this.isPlayed&&this.play(this.playNode),this.checkHasAudioInput()})),"audio"!==t.kind)throw new b(k.UNEXPECTED_ERROR);this.track=t;const s=new MediaStream([this.track]);if(this.isRemoteTrack=!!i,this.sourceNode=this.context.createMediaStreamSource(s),Kt(this.sourceNode),r){const e=r.clone();e.enabled=!0,this.clonedTrack=e,me.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]));Kt(t),this.originVolumeLevelAnalyser=new qt,this.originVolumeLevelAnalyser.updateSource(t)}this.connect(),this.audioElement=document.createElement("audio"),this.audioElement.srcObject=s;const n=e();i&&n.os===a.IOS&&Number(null===(o=n.osVersion)||void 0===o?void 0:o.split(".")[0])<15&&(Wt.on(Oe.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),Kt(this.sourceNode),this.processedNode||this.sourceNode.connect(this.outputNode),this.emit(lt.UPDATE_SOURCE),this.audioElement.srcObject=t}destroy(){var e;this.audioElement.srcObject=null,this.audioElement.remove(),Wt.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),me.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]));Kt(i),this.originVolumeLevelAnalyser&&this.originVolumeLevelAnalyser.updateSource(i)}getOriginVolumeLevel(){return this.originVolumeLevelAnalyser?this.originVolumeLevelAnalyser.getVolumeLevel():this.getAccurateVolumeLevel()}}async function ti(e,t,i){const r=(e,t)=>e?"number"!=typeof e?e.max||e.exact||e.ideal||e.min||t:e:t,o={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?(o.video.mandatory.maxFrameRate=t.frameRate.max,o.video.mandatory.minFrameRate=t.frameRate.min):"number"==typeof t.frameRate&&(o.video.mandatory.maxFrameRate=t.frameRate),await navigator.mediaDevices.getUserMedia(o)}async function ii(e,t){const i=await ri(e.mediaSource),r=await x(i,t),o=r.sourceId,s=r.audio;return await ti(o,e,s)}async function ri(e){let t=["window","screen"];"application"!==e&&"window"!==e||(t=["window"]),"screen"===e&&(t=["screen"]);const i=U();if(!i)throw console.error("failed to fetch electron, please mount it to window"),new b(k.ELECTRON_IS_NULL);let r=null;try{var o;r=(null===(o=i.desktopCapturer)||void 0===o?void 0:o.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 b(k.ELECTRON_DESKTOP_CAPTURER_GET_SOURCES_ERROR,e.toString())}}const oi=new M("safari");let si=!1,ni=!1;async function ai(e,t){let i=0,r=null;for(;i<2;)try{r=await ci(e,t,i>0);break}catch(e){if(e instanceof b)throw me.error("[".concat(t,"] ").concat(e.toString())),e;const r=di(e.name||e.code||e,e.message);if(r.code===k.MEDIA_OPTION_INVALID){me.debug("[".concat(t,"] detect media option invalid, retry")),i+=1,await V(500);continue}throw me.error("[".concat(t,"] ").concat(r.toString())),r}if(!r)throw new b(k.UNEXPECTED_ERROR,"can not find stream after getUserMedia");return r}async function ci(t,i,r){if(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)throw new b(k.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 o=ye(),s=new MediaStream;if(t.audioSource&&s.addTrack(t.audioSource),t.videoSource&&s.addTrack(t.videoSource),!t.audio&&!t.video&&!t.screen)return me.debug("Using Video Source/ Audio Source"),s;if(t.screen)if(W())if(t.screen.sourceId){ui(s,await ti(t.screen.sourceId,t.screen,!!t.screenAudio))}else{ui(s,await ii(t.screen,!!t.screenAudio))}else if(p()&&t.screen.extensionId&&t.screen.mandatory){if(!o.getStreamFromExtension)throw new b(k.NOT_SUPPORTED,"This browser does not support screen sharing");me.debug("[".concat(i,'] Screen access on chrome stable, looking for extension"'));const e=await(a=t.screen.extensionId,l=i,new Promise(((e,t)=>{try{chrome.runtime.sendMessage(a,{getStream:!0},(i=>{if(!i||!i.streamId)return me.error("[".concat(l,"] No response from Chrome Plugin. Plugin not installed properly"),i),void t(new b(k.CHROME_PLUGIN_NO_RESPONSE,"No response from Chrome Plugin. Plugin not installed properly"));e(i.streamId)}))}catch(e){me.error("[".concat(l,"] AgoraRTC screensharing plugin is not accessible(").concat(a,")"),e.toString()),t(new b(k.CHROME_PLUGIN_NOT_INSTALL))}})));t.screen.mandatory.chromeMediaSourceId=e;ui(s,await navigator.mediaDevices.getUserMedia({video:{mandatory:t.screen.mandatory}}))}else if(o.getDisplayMedia){var n;t.screen.mediaSource&&tt(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},r=t.screen,o=r.selfBrowserSurface,a=r.surfaceSwitching,c=r.systemAudio,d=r.preferCurrentTab,u=r.windowAudio,h=r.monitorTypeSurfaces,l={selfBrowserSurface:o,surfaceSwitching:a,systemAudio:c,preferCurrentTab:d,windowAudio:u,monitorTypeSurfaces:h};!o&&delete l.selfBrowserSurface,!a&&delete l.surfaceSwitching,!c&&delete l.systemAudio,!d&&delete l.preferCurrentTab,!u&&delete l.windowAudio,!h&&delete l.monitorTypeSurfaces,me.debug("[".concat(i,"] getDisplayMedia:"),JSON.stringify({video:e,audio:t.screenAudio,controls:l}));ui(s,await navigator.mediaDevices.getDisplayMedia(Nt({video:e,audio:t.screenAudio},l)))}else{if(!h())throw me.error("[".concat(i,"] This browser does not support screenSharing")),new b(k.NOT_SUPPORTED,"This browser does not support screen sharing");{t.screen.mediaSource&&tt(t.screen.mediaSource);const e={video:{mediaSource:t.screen.mediaSource,width:t.screen.width,height:t.screen.height,frameRate:t.screen.frameRate}};me.debug("[".concat(i,"] getUserMedia: ").concat(JSON.stringify(e)));ui(s,await navigator.mediaDevices.getUserMedia(e))}}var a,l;if(!t.video&&!t.audio)return s;let m={video:t.video,audio:t.audio},g=u("MEDIA_DEVICE_CONSTRAINTS");if(g)try{"string"==typeof g&&(g=JSON.parse(g)),m=Z(m,g)}catch(e){}me.debug("[".concat(i,"] GetUserMedia"),JSON.stringify(m)),e();let _,f=null;(c()||L()||d())&&(f=await oi.lock());try{_=await navigator.mediaDevices.getUserMedia(m)}catch(e){throw f&&f(),e}return m.audio&&(si=!0),m.video&&(ni=!0),ui(s,_),f&&f(),s}function di(e,t){switch(e){case"Starting video failed":case"OverconstrainedError":case"TrackStartError":return new b(k.MEDIA_OPTION_INVALID,"".concat(e,": ").concat(t));case"NotFoundError":case"DevicesNotFoundError":return new b(k.DEVICE_NOT_FOUND,"".concat(e,": ").concat(t));case"NotSupportedError":return new b(k.NOT_SUPPORTED,"".concat(e,": ").concat(t));case"NotReadableError":return new b(k.NOT_READABLE,"".concat(e,": ").concat(t));case"InvalidStateError":case"NotAllowedError":case"PERMISSION_DENIED":case"PermissionDeniedError":return new b(k.PERMISSION_DENIED,"".concat(e,": ").concat(t));case"ConstraintNotSatisfiedError":return new b(k.CONSTRAINT_NOT_SATISFIED,"".concat(e,": ").concat(t));default:return me.error("getUserMedia unexpected error",e),new b(k.UNEXPECTED_ERROR,"".concat(e,": ").concat(t))}}function ui(e,t){const i=e.getVideoTracks()[0],r=e.getAudioTracks()[0],o=t.getVideoTracks()[0],s=t.getAudioTracks()[0];s&&(r&&e.removeTrack(r),e.addTrack(s)),o&&(i&&e.removeTrack(i),e.addTrack(o))}class hi extends A{get state(){return this._state}set state(e){e!==this._state&&(this.emit(St.STATE_CHANGE,e),this._state=e)}constructor(){super(),Ct(this,"_state",yt.IDLE),Ct(this,"isAccessMicrophonePermission",!1),Ct(this,"isAccessCameraPermission",!1),Ct(this,"lastAccessMicrophonePermission",!1),Ct(this,"lastAccessCameraPermission",!1),Ct(this,"checkdeviceMatched",!1),Ct(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()||F())&&i())&&this.updateDevicesInfo()}),u("ENUMERATE_DEVICES_INTERVAL_TIME"))})).catch((e=>me.error(e.toString())))}async enumerateDevices(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices)throw new b(k.NOT_SUPPORTED,"enumerateDevices() not supported.");const r=await navigator.mediaDevices.enumerateDevices(),o=this.checkMediaDeviceInfoIsOk(r);let s=!this.isAccessMicrophonePermission&&e,n=!this.isAccessCameraPermission&&t;o.audio&&(s=!1),o.video&&(n=!1);let a=null,c=null,d=null;if(!i&&(s||n)){if(oi.isLocked){me.debug("[device manager] wait GUM lock");(await oi.lock())(),me.debug("[device manager] GUM unlock")}if(si&&(s=!1,this.isAccessMicrophonePermission=!0),ni&&(n=!1,this.isAccessCameraPermission=!0),me.debug("[device manager] check media device permissions",e,t,s,n),s&&n){try{d=await navigator.mediaDevices.getUserMedia({audio:!0,video:!0})}catch(e){const t=di(e.name||e.code||e,e.message);if(t.code===k.PERMISSION_DENIED)throw t;me.warning("getUserMedia failed in getDevices",t)}this.isAccessCameraPermission=!0,this.isAccessMicrophonePermission=!0}else if(s){try{a=await navigator.mediaDevices.getUserMedia({audio:e})}catch(e){const t=di(e.name||e.code||e,e.message);if(t.code===k.PERMISSION_DENIED)throw t;me.warning("getUserMedia failed in getDevices",t)}this.isAccessMicrophonePermission=!0}else if(n){try{c=await navigator.mediaDevices.getUserMedia({video:t})}catch(e){const t=di(e.name||e.code||e,e.message);if(t.code===k.PERMISSION_DENIED)throw t;me.warning("getUserMedia failed in getDevices",t)}this.isAccessCameraPermission=!0}me.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 b(k.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 b(k.DEVICE_NOT_FOUND,"deviceId: ".concat(e));return t}async init(){this.state=yt.INITING;try{await this.updateDevicesInfo(),this.state=yt.INITEND}catch(e){if(this.state=yt.IDLE,!G())throw new b(k.WEB_SECURITY_RESTRICT,"Your context is limited by web security, please try using https protocol or localhost.");throw me.warning("Device Detection functionality cannot start properly.",e.toString()),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?me.debug("[device-check] default input ".concat(t.label," and output ").concat(i.label," is the same group")):me.debug("[device-check] default input ".concat(t.label," and output ").concat(i.label," is not the same group")):me.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!==yt.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(St.RECORDING_DEVICE_CHANGED,e);break;case"videoinput":this.lastAccessCameraPermission&&this.isAccessCameraPermission&&this.emit(St.CAMERA_DEVICE_CHANGED,e);break;case"audiooutput":this.lastAccessMicrophonePermission&&this.isAccessMicrophonePermission&&this.emit(St.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 li=new hi;let pi=!1;const mi=new class extends A{constructor(){super(...arguments),Ct(this,"onAutoplayFailed",void 0),Ct(this,"onAudioAutoplayFailed",void 0)}};function gi(){if(pi)return u("FLS_AUTOPLAY_EMITS")?(mi.onAutoplayFailed&&mi.onAutoplayFailed(),mi.emit("autoplay-failed")):void 0;{const e=t=>{t.preventDefault(),pi=!1,K()?document.body.removeEventListener("click",e,!0):(document.body.removeEventListener("touchstart",e,!0),document.body.removeEventListener("mousedown",e,!0))};pi=!0,K()?document.body.addEventListener("click",e,!0):(document.body.addEventListener("touchstart",e,!0),document.body.addEventListener("mousedown",e,!0)),me.info("detect media autoplay failed, document: https://docs.agora.io/cn/Voice/autoplay_policy_web_ng?platform=Web"),mi.onAutoplayFailed?mi.onAutoplayFailed():mi.onAudioAutoplayFailed?me.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 ."):me.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 ."),mi.emit("autoplay-failed")}}function _i(e,t,i,r){if(!e)return;const o=ge.getBaseInfoBySessionId(e);if(!o)return;const s=o.info,n=Date.now(),a=Nt(Nt({},s),{},{vid:void 0===s.vid?0:Number(s.vid),lts:n,elapse:n-o.startTime,cbRegistered:mi.onAutoplayFailed||mi.onAudioAutoplayFailed?1:-1,errorMsg:i,mediaType:t,trackId:r,extend:void 0});ge.send({type:_e.AUTOPLAY_FAILED,data:a},!0)}const fi=["play","playing","loadeddata","canplay","pause","stalled","suspend","waiting","abort","emptied","ended","error"],vi=new class{constructor(){Ct(this,"onAutoplayFailed",void 0),Ct(this,"elementMap",new Map),Ct(this,"elementStateMap",new Map),Ct(this,"elementsNeedToResume",[]),Ct(this,"sinkIdMap",new Map),Ct(this,"autoResumeAfterInterruption",(e=>Promise.all(Array.from(this.elementMap.entries()).map((async t=>{let i=Ot(t,2),r=i[0],o=i[1];const s=this.elementStateMap.get(r),n=o.srcObject.getAudioTracks()[0],a=n&&n.readyState;if(me.debug("resume after interrupted, ele: ".concat(s," audio: ").concat(a," ").concat(e)),"live"===a){if(e)return o.pause(),o.play();if("running"===Wt.curState)return Y()?(o.pause(),o.play()):s&&"paused"===s?o.play():void 0}}))))),Ct(this,"autoResumeAfterInterruptionOnIOS15_16",(()=>{Array.from(this.elementMap.entries()).forEach((e=>{let t=Ot(e,2);t[0];let i=t[1];const r=i.srcObject.getAudioTracks()[0];r&&"live"===r.readyState&&(me.debug("auto resume after interruption inside autoResumeAfterInterruptionOnIOS15"),i.pause(),i.play())}))})),this.autoResumeAudioElement(),Wt.on(Oe.IOS_INTERRUPTION_END,this.autoResumeAfterInterruption),Wt.on(Oe.IOS_15_16_INTERRUPTION_END,this.autoResumeAfterInterruptionOnIOS15_16),Wt.on(Oe.STATE_CHANGE,(()=>{L()&&"suspended"===Wt.prevState&&"running"===Wt.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 b(k.PERMISSION_DENIED,"can not set sink id: "+e.toString())}}play(e,t,i,o){if(this.elementMap.has(t))return;const s=document.createElement("audio");s.autoplay=!0,s.srcObject=new MediaStream([e]),this.bindAudioElementEvents(t,s),this.elementMap.set(t,s),this.elementStateMap.set(t,kt.INIT),this.setVolume(t,i);const n=this.sinkIdMap.get(t);if(n)try{s.setSinkId(n).catch((e=>{me.warning("[".concat(t,"] set sink id failed"),e.toString())}))}catch(e){me.warning("[".concat(t,"] set sink id failed"),e.toString())}const a=s.play();a&&a.then&&a.catch((e=>{o&&_i(o,"audio",e.message,t),me.warning("audio element play warning",e.toString()),this.elementMap.has(t)&&"NotAllowedError"===e.name&&(me.warning("detected audio element autoplay failed"),this.elementsNeedToResume.push(s),r((()=>{this.onAutoplayFailed&&this.onAutoplayFailed(),gi()})))}))}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)}getVolume(e){const t=this.elementMap.get(e);return t?t.volume:0}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){fi.forEach((i=>{t.addEventListener(i,(i=>{const r=this.elementStateMap.get(e),o="pause"===i.type?"paused":i.type;if(me.debug("[".concat(e,"] audio-element-status change ").concat(r," => ").concat(o)),"error"===i.type){const i=null==t?void 0:t.error;i&&me.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=>{me.debug("Auto resume audio element success")})).catch((e=>{me.warning("Auto resume audio element failed!",e)}))})),this.elementsNeedToResume=[]};H().then((()=>{K()?document.body.addEventListener("click",e,!0):(document.body.addEventListener("touchstart",e,!0),document.body.addEventListener("mousedown",e,!0))}))}};function Ti(){return function(e,t,i){const r=i.value;return"function"==typeof r&&(i.value=function(){this._isClosed&&new b(k.INVALID_OPERATION,"[".concat(this.getTrackId(),"] cannot operate a closed track")).print("warning",me);for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const o=r.apply(this,t);return o instanceof Promise?new Promise(((e,t)=>{o.then(e).catch(t)})):o}),i}}class Ei extends A{constructor(e){super(),Ct(this,"name","VideoProcessorDestination"),Ct(this,"ID","0"),Ct(this,"_source",void 0),Ct(this,"videoContext",void 0),Ct(this,"inputTrack",void 0),this.videoContext=e}get kind(){return"video"}get enabled(){return!0}pipe(){throw new b(k.NOT_SUPPORTED,"VideoProcessor cannot pipe to any other Processor")}unpipe(){throw new b(k.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(Tt.ON_TRACK,e.track))}reset(){this.inputTrack=void 0,this.videoContext.chained=!1,this.emit(Tt.ON_TRACK,void 0)}}class yi extends A{set chained(e){this._chained=e}get chained(){return this._chained}constructor(e,t){super(),Ct(this,"constraintsMap",new Map),Ct(this,"statsRegistry",[]),Ct(this,"usageRegistry",[]),Ct(this,"trackId",void 0),Ct(this,"direction",void 0),Ct(this,"_chained",!1),this.trackId=e,this.direction=t}async getConstraints(){return await X(this,Et.REQUEST_CONSTRAINTS)}async requestApplyConstraints(e,t){return me.info("processor ".concat(t.name," requestApplyConstraints for ").concat(this.trackId)),e&&this.constraintsMap.set(t,e),N(this,Et.REQUEST_UPDATE_CONSTRAINTS,Array.from(this.constraintsMap.values()))}async requestRevertConstraints(e){if(this.constraintsMap.has(e))return me.info("processor ".concat(e.name," requestRevertConstraints for ").concat(this.trackId)),this.constraintsMap.delete(e),N(this,Et.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 t of this.statsRegistry){const i=t.processorID,r=t.processorName,o=t.type,s=t.cb;try{const t=s();e.push({processorID:i,processorName:r,type:o,stats:t})}catch(e){me.error(new b(k.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 t of this.usageRegistry){const i=t.cb;try{let t=i();t instanceof Promise&&(t=await t),e.push(Nt(Nt({},t),{},{direction:this.direction}))}catch(e){me.error("gather extension usage error",e)}}return e}getDirection(){return this.direction}}class Si extends A{constructor(e){super(),Ct(this,"name","AudioProcessorDestination"),Ct(this,"ID","0"),Ct(this,"inputTrack",void 0),Ct(this,"inputNode",void 0),Ct(this,"audioProcessorContext",void 0),Ct(this,"_source",void 0),this.audioProcessorContext=e}get kind(){return"audio"}get enabled(){return!0}pipe(){throw new b(k.NOT_SUPPORTED,"AudioProcessorDestination cannot pipe to any other Processor")}unpipe(){throw new b(k.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(Tt.ON_TRACK,void 0),this.emit(Tt.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(Tt.ON_TRACK,this.inputTrack)),e.node&&this.inputNode!==e.node&&(this.audioProcessorContext.chained=!0,this.inputNode=e.node,this.emit(Tt.ON_NODE,this.inputNode))}}class bi extends A{set chained(e){this._chained=e}get chained(){return this._chained}constructor(e,t,i){super(),Ct(this,"constraintsMap",new Map),Ct(this,"statsRegistry",[]),Ct(this,"audioContext",void 0),Ct(this,"trackId",void 0),Ct(this,"direction",void 0),Ct(this,"usageRegistry",[]),Ct(this,"_chained",!1),this.audioContext=e,this.trackId=t,this.direction=i}async getConstraints(){return X(this,Et.REQUEST_CONSTRAINTS)}getAudioContext(){return this.audioContext}async requestApplyConstraints(e,t){return me.info("processor ".concat(t.name," requestApplyConstraints for ").concat(this.trackId)),e&&this.constraintsMap.set(t,e),N(this,Et.REQUEST_UPDATE_CONSTRAINTS,Array.from(this.constraintsMap.values()))}async requestRevertConstraints(e){if(this.constraintsMap.has(e))return this.constraintsMap.delete(e),N(this,Et.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 t of this.statsRegistry){const i=t.processorID,r=t.processorName,o=t.type,s=t.cb;try{const t=s();e.push({processorID:i,processorName:r,type:o,stats:t})}catch(e){me.error(new b(k.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 t of this.usageRegistry){const i=t.cb;try{let t=i();t instanceof Promise&&(t=await t),e.push(Nt(Nt({},t),{},{direction:this.direction}))}catch(e){me.error("gather extension usage error",e)}}return e}getDirection(){return this.direction}}class ki extends A{get isPlayed(){return!0}get isFreeze(){return!1}constructor(){super(),Ct(this,"context",void 0),Ct(this,"processSourceNode",void 0),Ct(this,"outputTrack",void 0),Ct(this,"processedNode",void 0),Ct(this,"clonedTrack",void 0),Ct(this,"outputNode",void 0),this.outputNode=new Ii}setVolume(){}createOutputTrack(){throw new b(k.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 Ii{disconnect(){}connect(){}}function Ai(e){return new Promise(((t,i)=>{let r=!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 s=L()?"canplay":"playing";o.addEventListener(s,(()=>{const e=o.videoWidth,i=o.videoHeight;!e&&h()||(r=!0,o.srcObject=null,o.remove(),t([e,i]))})),o.srcObject=new MediaStream([e]),o.play().catch(z),setTimeout((()=>{r||(o.srcObject=null,o.remove(),t([o.videoWidth,o.videoHeight]))}),4e3)}))}function Ri(e){const t={};e.facingMode&&(t.facingMode=e.facingMode),e.cameraId&&(t.deviceId={exact:e.cameraId});const i=Be(e.encoderConfig);return null!=i.width&&(t.width=i.width),null!=i.height&&(t.height=i.height),!j()&&i.frameRate&&(t.frameRate=i.frameRate),m()&&"object"==typeof t.frameRate&&(t.frameRate.max=60),h()&&(t.frameRate={ideal:30,max:30}),t}function wi(e){const t={};e.screenSourceType&&(t.mediaSource=e.screenSourceType),e.extensionId&&p()&&(t.extensionId=e.extensionId);const i=e.displaySurface,r=e.selfBrowserSurface,s=e.surfaceSwitching,n=e.systemAudio,a=e.preferCurrentTab,c=e.windowAudio,d=e.monitorTypeSurfaces;(o(107)||f(107)||v(93))&&(i&&(y(i,"displaySurface",["browser","window","monitor"]),t.displaySurface=i),r?(y(r,"selfBrowserSurface",["exclude","include"]),t.selfBrowserSurface=r):t.selfBrowserSurface="include",s&&(y(s,"surfaceSwitching",["exclude","include"]),t.surfaceSwitching=s)),(o(105)||f(105)||v(91))&&n&&(y(n,"systemAudio",["exclude","include"]),t.systemAudio=n),(o(94)||f(94)||v(80))&&a&&(t.preferCurrentTab=!0),(o(141)||f(141)||v(125))&&c&&(y(c,"windowAudio",["exclude","system"]),t.windowAudio=c),(o(119)||f(119)||v(105))&&d&&(y(d,"monitorTypeSurfaces",["exclude","include"]),t.monitorTypeSurfaces=d),e.electronScreenSourceId&&(t.sourceId=e.electronScreenSourceId);const u=e.encoderConfig?Fe(e.encoderConfig):null;return t.mandatory={chromeMediaSource:"desktop",maxWidth:u?u.width:void 0,maxHeight:u?u.height:void 0},u&&(u.frameRate&&("number"==typeof u.frameRate?(t.mandatory.maxFrameRate=u.frameRate,t.mandatory.minFrameRate=u.frameRate):(t.mandatory.maxFrameRate=u.frameRate.max||u.frameRate.ideal||u.frameRate.exact||void 0,t.mandatory.minFrameRate=u.frameRate.min||u.frameRate.ideal||u.frameRate.exact||void 0),t.frameRate=u.frameRate),u.width&&(t.width=u.width),u.height&&(t.height=u.height)),t}function Di(e){const t={};return j()||(void 0!==e.AGC&&(t.autoGainControl=e.AGC),void 0!==e.AEC&&(t.echoCancellation=e.AEC),void 0!==e.ANS&&(t.noiseSuppression=e.ANS,p()&&e.ANS&&(t.googHighpassFilter=e.ANS))),t}function Ci(e){const t=Di(e);return Me()&&e.suppressLocalAudioPlayback&&(t.suppressLocalAudioPlayback=e.suppressLocalAudioPlayback),Ne()&&e.restrictOwnAudio&&(t.restrictOwnAudio=!0),t}function Mi(e){const t=Di(e);if(e.encoderConfig){const i=He(e.encoderConfig);t.channelCount=i.stereo?2:1,t.sampleRate=i.sampleRate,t.sampleSize=i.sampleSize}return e.microphoneId&&(t.deviceId={exact:e.microphoneId}),B()&&(t.sampleRate=void 0),t}function Ni(e,t,i){const r=4*Math.floor(2e5*Math.pow(i/15,.6)*Math.pow(e*t/230400,.75)),o=e*t,s=new Map([[19200,.9],[230400,.85],[518400,.75],[921600,.7],[2073600,.6],[3686400,.5]]),n=new Map([[230400,.95],[518400,.9],[921600,.85],[2073600,.8]]);let a=s.values().next().value,c=1;if(s.has(o))a=s.get(o);else{const e=Array.from(s.entries()).sort(((e,t)=>Ot(e,1)[0]-Ot(t,1)[0])),t=e.find((e=>Ot(e,1)[0]>o));if(t){const i=e.indexOf(t);if(i>0){const r=e[i-1],s=(o-r[0])/(t[0]-r[0]);a=r[1]+s*(t[1]-r[1])}else a=t[1]}else a=e[e.length-1][1]}if(n.has(o))c=n.get(o);else{const e=Array.from(n.entries()).sort(((e,t)=>Ot(e,1)[0]-Ot(t,1)[0])),t=e.find((e=>Ot(e,1)[0]>o));if(t){const i=e.indexOf(t);if(i>0){const r=e[i-1],s=(o-r[0])/(t[0]-r[0]);c=r[1]+s*(t[1]-r[1])}else c=t[1]}else c=e[e.length-1][1]}const d=u("VIDEO_NEW_BITRATE_RATIO");d&&d>0&&(a=d/100);const h=Math.floor(r*a),l=Math.floor(65e4*Math.pow(e*t/230400,.5)*Math.pow(i/15,.69));let p=h;const m=u("VIDEO_STANDARD_BITRATE_VERSION");return m&&m>0&&(1===m?p=r:2===m?p=h:3===m&&(p=l)),[Math.floor(p/1e3),c]}function Oi(e,t,i){if(!Array.isArray(u("VIDEO_ENCODER_CONFIG_LIST")))return!1;if(0===u("VIDEO_ENCODER_CONFIG_LIST").length)return!1;const r=Math.min(e,t);if(r>=480)return!1;return Nt(Nt({},u("VIDEO_ENCODER_CONFIG_LIST").find((e=>e.height>r))),{},{frameRate:i})}function Li(e,t,i,r,o){const s=u("BITRATE_ADAPTER_TYPE");if("DEFAULT_BITRATE"===s)return{min:r,max:o};if(void 0===o){const n=Math.floor(200*Math.pow(i/15,.6)*Math.pow(e*t/640/360,.75));o="STANDARD_BITRATE"===s?4*n:2*n,r=null!=r?r:n}else r=null!=r?r:Math.floor(o/10);return{min:r,max:o}}function Pi(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 Vi=e=>{const t=e._encoderConfig;if(!t)return;const i=e.getMediaStreamTrackSettings(),r=i.frameRate,o=i.width,s=i.height;let n=t.frameRate,a=void 0===n?r:n,c=t.width,d=void 0===c?o:c,h=t.height,l=void 0===h?s:h;if(!a||!d||!l)return;d=Q(d),l=Q(l),a=Q(a);const p=Pi(d,l,a),m=p.max,g=p.min,_=t||{},f=_.bitrateMax,v=_.bitrateMin;f||me.debug("calculate bitrate: [w: ".concat(d,", h: ").concat(l,", fps: ").concat(a,"] => [brMax: ").concat(f,", brMin: ").concat(v,"]"));const T=u("ENCODER_CONFIG_LIMIT").maxFramerate;return T&&"number"==typeof T&&(a=Math.min(a,T)),{frameRate:a,bitrateMax:f||m,bitrateMin:v||g,scaleResolutionDownBy:1,scale:0}},xi=async(e,t,i)=>await(async(e,t,i)=>{const r=J(q(""+t+i)).slice(0,16),o=r.slice(0,12),s=await window.crypto.subtle.importKey("raw",r,"AES-GCM",!0,["encrypt"]);return new Uint8Array(await window.crypto.subtle.encrypt({name:"AES-GCM",iv:o},s,e))})(e.buffer,t,i),Ui=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 Wi(e);i({buffer:r,width:t.width,height:t.height})}else r(new b(k.CONVERTING_VIDEO_FRAME_TO_BLOB_FAILED))}),e,1)}))},Wi=async e=>{const t=await e.arrayBuffer();return new Uint8Array(t)};function Zi(e,t){if("VideoFrame"in window&&"TransformStream"in window&&ye().supportWebRTCInsertableStream){const i=new MediaStreamTrackProcessor(e),r=new MediaStreamTrackGenerator({kind:"video"});let o,s,n=Date.now();const a=()=>{c&&(clearInterval(c),c=void 0),o&&(o.close(),o=void 0),e.stop(),s=void 0,r.removeEventListener("ended",a)};let c=window.setInterval((()=>{if(s&&o&&Date.now()-n>(null!=t?t:1e3))try{"live"===r.readyState?s.enqueue(o.clone()):a()}catch(e){a()}}),null!=t?t:1e3);const d=new TransformStream({transform:(e,t)=>{"live"===r.readyState?(s=t,n=Date.now(),void 0===o?(o=e,t.enqueue(e.clone())):(t.enqueue(o),o=e)):e.close()}});return r.addEventListener("ended",a),i.readable.pipeThrough(d).pipeTo(r.writable),r}}var Bi,Fi,Gi,Ki,Hi,Yi,Xi,zi,ji,Qi,Ji,qi,$i,er,tr,ir,rr,or,sr,nr,ar,cr,dr,ur,hr,lr,pr,mr,gr,_r,fr,vr,Tr,Er,yr,Sr,br,kr,Ir,Ar;let Rr=(Bi=fe({argsMap:(e,t)=>[e.getTrackId(),t],throttleTime:300}),Fi=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),Gi=Ti(),Ki=$("LocalAudioTrack","_enabledMutex"),Hi=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),Yi=Ti(),Xi=$("LocalAudioTrack","_enabledMutex"),zi=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),ji=Ti(),Qi=Ti(),Ji=Ti(),qi=fe({argsMap:e=>[e.getTrackId()]}),$i=Ti(),er=fe({argsMap:e=>[e.getTrackId()]}),tr=Ti(),ir=fe({argsMap:e=>[e.getTrackId()]}),rr=fe({argsMap:(e,t)=>[e.getTrackId(),t.name]}),or=fe({argsMap:e=>[e.getTrackId()]}),wt((sr=class extends Pt{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?vi.isPlaying(this.getTrackId()):this._source.isPlayed}get __className__(){return"LocalAudioTrack"}constructor(e,t,i,r){super(e,i),Ct(this,"trackMediaType",ht.AUDIO),Ct(this,"_encoderConfig",void 0),Ct(this,"_trackSource",void 0),Ct(this,"metadata",[]),Ct(this,"_enabled",!0),Ct(this,"_volume",100),Ct(this,"_useAudioElement",!0),Ct(this,"_bypassWebAudio",!1),Ct(this,"processor",void 0),Ct(this,"_processorContext",void 0),Ct(this,"_processorDestination",void 0),Ct(this,"_getOriginVolumeLevel",void 0),this._encoderConfig=t,this._getOriginVolumeLevel=!!r,this._trackSource=new ki,u("DISABLE_WEBAUDIO")&&(this._bypassWebAudio=!0),u("LOCAL_AUDIO_TRACK_USES_WEB_AUDIO")&&(this._useAudioElement=!1);c()&&!Gt()?setTimeout((()=>this.initWebAudio())):this.initWebAudio()}setVolume(e){E(e,"volume",0,1e3),this._volume=e,this._source.setVolume(e/100),this._useAudioElement&&vi.setVolume(this.getTrackId(),e);try{if(this._bypassWebAudio)return void me.debug("[".concat(this.getTrackId(),"] setVolume returned because no pass through WebAudio."));const e=this._source.createOutputTrack();this._mediaStreamTrack!==e&&(this._mediaStreamTrack=e,N(this,it.NEED_REPLACE_TRACK,this).then((()=>{me.debug("[".concat(this.getTrackId(),"] replace web audio track success"))})).catch((e=>{me.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||!Se())throw new b(k.NOT_SUPPORTED,"your browser does not support setting the audio output device");await vi.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(me.info("[".concat(this.getTrackId(),"] start setEnabled"),e),e){this._originMediaStreamTrack.enabled=!0;try{i||(this._enabled=!0),await N(this,it.NEED_ENABLE_TRACK,this),me.info("[".concat(this.getTrackId(),"] setEnabled to ").concat(e," success"))}catch(e){throw i||(this._enabled=!1),me.error("[".concat(this.getTrackId(),"] setEnabled to true error"),e.toString()),e}}else{this._originMediaStreamTrack.enabled=!1,i||(this._enabled=!1);try{await N(this,it.NEED_DISABLE_TRACK,this)}catch(e){throw i||(this._enabled=!0),me.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,me.debug("[".concat(this.getTrackId(),"] start set muted: ").concat(e)),e?await N(this,it.NEED_MUTE_TRACK,this):await N(this,it.NEED_UNMUTE_TRACK,this))}getStats(){w((()=>{me.warning("[deprecated] LocalAudioTrack.getStats will be removed in the future, use AgoraRTCClient.getLocalAudioStats instead")}),"localAudioTrackGetStatsWarning");const e=ee(this,it.GET_STATS);return e||Nt({},mt)}setAudioFrameCallback(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4096;if(!e)return this._source.removeAllListeners(lt.ON_AUDIO_BUFFER),void this._source.stopGetAudioBuffer();this._source.startGetAudioBuffer(t),this._source.removeAllListeners(lt.ON_AUDIO_BUFFER),this._source.on(lt.ON_AUDIO_BUFFER,(t=>e(t)))}play(){me.debug("[".concat(this.getTrackId(),"] start audio playback")),this._useAudioElement?(me.debug("[".concat(this.getTrackId(),"] start audio playback in element")),vi.play(this._mediaStreamTrack,this.getTrackId(),this._volume)):this._source.play()}stop(){me.debug("[".concat(this.getTrackId(),"] stop audio playback")),this._useAudioElement?vi.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];me.debug("[".concat(this.getTrackId(),"] update player source track")),e&&this._source.updateTrack(this._mediaStreamTrack),this._useAudioElement&&vi.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 N(this,it.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 b(k.INVALID_OPERATION,"Can not process AudioTrack when bypassWebAudio set to true.");if(this.processor===e)return e;if(e._source)throw new b(k.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(Tt.ON_TRACK,(async e=>{e?e!==this._mediaStreamTrack&&(this._mediaStreamTrack=e,this._updatePlayerSource(!1),this._source.processedNode=this._source.createMediaStreamSourceNode(e),await N(this,it.NEED_REPLACE_TRACK,this)):this._mediaStreamTrack!==this._originMediaStreamTrack&&(this._mediaStreamTrack=this._originMediaStreamTrack,this._updatePlayerSource(),await N(this,it.NEED_REPLACE_TRACK,this))})),e.on(Tt.ON_NODE,(e=>{this._source.processedNode=e}))}unbindProcessorDestinationEvents(e){e.removeAllListeners(Tt.ON_TRACK),e.removeAllListeners(Tt.ON_NODE)}bindProcessorContextEvents(e){e.on(Et.REQUEST_CONSTRAINTS,(async e=>{e(this._originMediaStreamTrack.getSettings())}))}unbindProcessorContextEvents(e){e.removeAllListeners(Et.REQUEST_CONSTRAINTS)}initWebAudio(){return this._trackSource instanceof ki&&(this._trackSource=new ei(this._mediaStreamTrack,!1,this._getOriginVolumeLevel?this._mediaStreamTrack:void 0)),this._trackSource}initProcessor(){const e=new bi(this._source.context,this.getTrackId(),"local"),t=new Si(e);return this._processorContext=e,this._processorDestination=t,this.bindProcessorContextEvents(e),this.bindProcessorDestinationEvents(t),this._source.on(lt.UPDATE_SOURCE,(()=>{this.processor&&this.processor.updateInput({node:this._source.processSourceNode,context:e})})),this._useAudioElement&&(this._useAudioElement=!1,this.isPlaying&&(vi.stop(this.getTrackId()),this._source.play()),N(this,it.NEED_REPLACE_MIXING_TRACK,this).then((()=>{me.debug("[".concat(this.getTrackId(),"] replace from origin track to web audio track success"))})).catch((e=>{me.warning("[".concat(this.getTrackId(),"] replace from origin track to web audio track failed"),e)}))),{processorContext:e,processorDestination:t}}}).prototype,"setVolume",[Bi],Object.getOwnPropertyDescriptor(sr.prototype,"setVolume"),sr.prototype),wt(sr.prototype,"setPlaybackDevice",[Fi,Gi],Object.getOwnPropertyDescriptor(sr.prototype,"setPlaybackDevice"),sr.prototype),wt(sr.prototype,"setEnabled",[Ki,Hi,Yi],Object.getOwnPropertyDescriptor(sr.prototype,"setEnabled"),sr.prototype),wt(sr.prototype,"setMuted",[Xi,zi,ji],Object.getOwnPropertyDescriptor(sr.prototype,"setMuted"),sr.prototype),wt(sr.prototype,"getStats",[Qi],Object.getOwnPropertyDescriptor(sr.prototype,"getStats"),sr.prototype),wt(sr.prototype,"setAudioFrameCallback",[Ji],Object.getOwnPropertyDescriptor(sr.prototype,"setAudioFrameCallback"),sr.prototype),wt(sr.prototype,"play",[qi,$i],Object.getOwnPropertyDescriptor(sr.prototype,"play"),sr.prototype),wt(sr.prototype,"stop",[er,tr],Object.getOwnPropertyDescriptor(sr.prototype,"stop"),sr.prototype),wt(sr.prototype,"close",[ir],Object.getOwnPropertyDescriptor(sr.prototype,"close"),sr.prototype),wt(sr.prototype,"pipe",[rr],Object.getOwnPropertyDescriptor(sr.prototype,"pipe"),sr.prototype),wt(sr.prototype,"unpipe",[or],Object.getOwnPropertyDescriptor(sr.prototype,"unpipe"),sr.prototype),sr),wr=(nr=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),ar=Ti(),cr=$("MicrophoneAudioTrack","_enabledMutex"),dr=fe({argsMap:(e,t,i)=>[e.getTrackId(),t,i]}),ur=Ti(),hr=fe({argsMap:e=>[e.getTrackId()]}),wt((lr=class extends Rr{get __className__(){return"MicrophoneAudioTrack"}constructor(e,t,i,r){super(e,t.encoderConfig?He(t.encoderConfig):{},r,u("GET_VOLUME_OF_MUTED_AUDIO_TRACK")),Ct(this,"_config",void 0),Ct(this,"_deviceName","default"),Ct(this,"_constraints",void 0),Ct(this,"_originalConstraints",void 0),Ct(this,"_enabled",!0),this._config=t,this._constraints=i,this._originalConstraints=i,this._deviceName=e.label,"boolean"==typeof t.bypassWebAudio&&(this._bypassWebAudio=t.bypassWebAudio),(Y()||te())&&Wt.bindInterruptDetectorTrack(this)}async setDevice(e){if(me.info("[".concat(this.getTrackId(),"] start set device to ").concat(e)),this._enabled)try{const t=await li.getDeviceById(e),i={};i.audio=Nt({},this._constraints),i.audio.deviceId={exact:e},this._originMediaStreamTrack.stop();let r=null;try{r=await ai(i,this.getTrackId())}catch(e){throw me.error("[".concat(this.getTrackId(),"] setDevice failed"),e.toString()),r=await ai({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 me.error("[".concat(this.getTrackId(),"] setDevice error"),e.toString()),e}else try{const t=await li.getDeviceById(e);this._deviceName=t.label,this._config.microphoneId=e,this._constraints.deviceId={exact:e}}catch(e){throw me.error("[".concat(this.getTrackId(),"] setDevice error"),e.toString()),e}me.info("[".concat(this.getTrackId(),"] set device to ").concat(e," success"))}async setEnabled(e,t,i){if(t)return me.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(me.info("[".concat(this.getTrackId(),"] start setEnabled"),e),u("AUTO_RESET_AUDIO_ROUTE")&&(L()||P())){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 N(this,it.NEED_DISABLE_TRACK,this)}catch(e){throw me.error("[".concat(this.getTrackId(),"] setEnabled false failed"),e.toString()),e}return}const o=Nt({},this._constraints),s=li.searchDeviceIdByName(this._deviceName);s&&!o.deviceId&&(o.deviceId=s);try{i||(this._enabled=!0);const e=await ai({audio:this._constraints},this.getTrackId());await this._updateOriginMediaStreamTrack(e.getAudioTracks()[0],!1),await N(this,it.NEED_ENABLE_TRACK,this)}catch(e){throw i||(this._enabled=!1),me.error("[".concat(this.getTrackId(),"] setEnabled true failed"),e.toString()),e}me.info("[".concat(this.getTrackId(),"] setEnabled success"))}close(){super.close(),(Y()||te())&&Wt.unbindInterruptDetectorTrack(this),je()||Bt()}onTrackEnded(){if((L()||P())&&this._enabled&&!this._isClosed&&Wt.duringInterruption){const e=async()=>{Wt.off(Oe.IOS_INTERRUPTION_END,e),this._enabled&&!this._isClosed&&(me.debug("[".concat(this.getTrackId(),"] try capture microphone media device for interrupted iOS device.")),await this.setEnabled(!1),await this.setEnabled(!0))};Wt.on(Oe.IOS_INTERRUPTION_END,e)}else me.debug("[".concat(this.getTrackId(),"] track ended")),this.safeEmit(dt.TRACK_ENDED)}async renewMediaStreamTrack(e){const t=e||this._constraints,i=li.searchDeviceIdByName(this._deviceName);if(i&&!t.deviceId&&(t.deviceId=i),this._constraints=t,this._enabled){this._originMediaStreamTrack.stop();const e=await ai({audio:this._constraints},this.getTrackId());await this._updateOriginMediaStreamTrack(e.getAudioTracks()[0],!0)}}bindProcessorContextEvents(e){super.bindProcessorContextEvents(e),e.on(Et.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(Et.REQUEST_UPDATE_CONSTRAINTS)}}).prototype,"setDevice",[nr,ar],Object.getOwnPropertyDescriptor(lr.prototype,"setDevice"),lr.prototype),wt(lr.prototype,"setEnabled",[cr,dr,ur],Object.getOwnPropertyDescriptor(lr.prototype,"setEnabled"),lr.prototype),wt(lr.prototype,"close",[hr],Object.getOwnPropertyDescriptor(lr.prototype,"close"),lr.prototype),lr),Dr=(pr=fe({argsMap:(e,t)=>[e.getTrackId(),t,e.duration]}),mr=Ti(),gr=fe({argsMap:e=>[e.getTrackId()]}),_r=Ti(),fr=fe({argsMap:e=>[e.getTrackId()]}),vr=Ti(),Tr=fe({argsMap:e=>[e.getTrackId()]}),Er=Ti(),yr=fe({argsMap:e=>[e.getTrackId()]}),Sr=Ti(),br=fe({argsMap:e=>[e.getTrackId()]}),kr=fe({argsMap:e=>[e.getTrackId()]}),Ir=Ti(),wt((Ar=class extends Rr{get __className__(){return"BufferSourceAudioTrack"}constructor(e,t,i,r){super(t.createOutputTrack(),i,r),Ct(this,"source",void 0),Ct(this,"_bufferSource",void 0),this._useAudioElement=!1,this.source=e,this._bufferSource=t,this._bufferSource.on(lt.AUDIO_SOURCE_STATE_CHANGE,(e=>{this.safeEmit(dt.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(e,"speed",0),this._bufferSource.setAudioBufferPlaybackSpeed(e)}}).prototype,"startProcessAudioBuffer",[pr,mr],Object.getOwnPropertyDescriptor(Ar.prototype,"startProcessAudioBuffer"),Ar.prototype),wt(Ar.prototype,"pauseProcessAudioBuffer",[gr,_r],Object.getOwnPropertyDescriptor(Ar.prototype,"pauseProcessAudioBuffer"),Ar.prototype),wt(Ar.prototype,"seekAudioBuffer",[fr,vr],Object.getOwnPropertyDescriptor(Ar.prototype,"seekAudioBuffer"),Ar.prototype),wt(Ar.prototype,"resumeProcessAudioBuffer",[Tr,Er],Object.getOwnPropertyDescriptor(Ar.prototype,"resumeProcessAudioBuffer"),Ar.prototype),wt(Ar.prototype,"stopProcessAudioBuffer",[yr,Sr],Object.getOwnPropertyDescriptor(Ar.prototype,"stopProcessAudioBuffer"),Ar.prototype),wt(Ar.prototype,"close",[br],Object.getOwnPropertyDescriptor(Ar.prototype,"close"),Ar.prototype),wt(Ar.prototype,"setAudioBufferPlaybackSpeed",[kr,Ir],Object.getOwnPropertyDescriptor(Ar.prototype,"setAudioBufferPlaybackSpeed"),Ar.prototype),Ar);class Cr extends Rr{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=Ft().createMediaStreamDestination();super(e.stream.getAudioTracks()[0],void 0,R(8,"track-mix-")),Ct(this,"trackList",void 0),Ct(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)?(me.debug("add ".concat(e.getTrackId()," to mixing track")),e._source.outputNode.connect(this.destNode),this.trackList.push(e),this.updateEncoderConfig()):me.debug("track ".concat(e.getTrackId()," is already added"))}removeAudioTrack(e){if(-1!==this.trackList.indexOf(e)){me.debug("remove ".concat(e.getTrackId()," from mixing track"));try{e._source.outputNode.disconnect(this.destNode)}catch(e){}O(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 Cr?t.emit(ct.TRANSCEIVER_UPDATED,e):t._updateRtpTransceiver(e)})))}}class Mr extends $t{set currentState(e){e!==this._currentState&&(this._currentState=e,this.safeEmit(lt.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(),Ct(this,"audioBuffer",void 0),Ct(this,"sourceNode",void 0),Ct(this,"startPlayTime",0),Ct(this,"startPlayOffset",0),Ct(this,"pausePlayTime",0),Ct(this,"options",void 0),Ct(this,"currentLoopCount",0),Ct(this,"currentPlaybackSpeed",100),Ct(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):me.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 Nr=new Map;function Or(e,t){if(0===e.length||0===t.length)return 1/0;const i=oe(e),r=oe(t);return Math.floor(r/i)}class Lr{get rendFrameRate(){const e=Math.max(1,Or(this._render_interframe_delays_sizes,this._render_interframe_delays));return Math.floor(1e3/e)}get videoElementStatus(){return this._isInPage?this._videoElementStatus:kt.DESTROYED}set videoElementStatus(e){e!==this._videoElementStatus&&(me.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){Ct(this,"trackId",void 0),Ct(this,"config",void 0),Ct(this,"onFirstVideoFrameDecoded",void 0),Ct(this,"onFirstVideoFrameRender",void 0),Ct(this,"onVideoBufferReady",void 0),Ct(this,"onVideoStateChanged",void 0),Ct(this,"freezeTimeCounterList",[]),Ct(this,"renderFreezeAccTime",0),Ct(this,"renderFreezeAccTime2",0),Ct(this,"totalFreezeTime",0),Ct(this,"isKeepLastFrame",!1),Ct(this,"isDestroyed",!1),Ct(this,"timeUpdatedCount",0),Ct(this,"freezeTime",0),Ct(this,"playbackTime",0),Ct(this,"lastTimeUpdatedTime",0),Ct(this,"autoplayFailed",!1),Ct(this,"videoTrack",void 0),Ct(this,"videoElement",void 0),Ct(this,"cacheVideoElement",void 0),Ct(this,"cancelRVFId",void 0),Ct(this,"internal",!1),Ct(this,"_render_interframe_delays",[]),Ct(this,"_render_interframe_delays_sizes",[]),Ct(this,"_videoState",It.VideoStateStopped),Ct(this,"videoElementCheckInterval",void 0),Ct(this,"videoElementFreezeTimeout",void 0),Ct(this,"_videoElementStatus",kt.NONE),Ct(this,"_isInPage",!0),Ct(this,"isGettingVideoDimensions",!1),Ct(this,"startGetVideoDimensions",(()=>{const e=()=>{if(this.isGettingVideoDimensions=!0,this.videoElement.videoWidth*this.videoElement.videoHeight>4)return me.debug("[".concat(this.trackId,"] current video dimensions:"),this.videoElement.videoWidth,this.videoElement.videoHeight),void(this.isGettingVideoDimensions=!1);setTimeout(e,500)};!this.isGettingVideoDimensions&&e()})),Ct(this,"autoResumeAfterInterruption",(()=>{this.videoTrack&&"live"===this.videoTrack.readyState&&"running"===Wt.curState&&(me.debug("[track-".concat(this.trackId,"] video element paused, auto resume for ").concat(se())),ne()?(this.videoElement.srcObject=null,this.videoElement.srcObject=new MediaStream([this.videoTrack]),this.videoElement.play()):(this.videoElement.pause(),this.videoElement.play()))})),Ct(this,"handleVideoEvents",(e=>{switch(e.type){case"play":case"playing":"play"===e.type&&me.debug("[".concat(this.trackId,"] video element status: play")),this.startGetVideoDimensions(),this.videoElementStatus=kt.PLAYING;break;case"loadeddata":if(this.videoState=It.VideoStateStarting,this.onFirstVideoFrameRender&&this.onFirstVideoFrameRender(),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=kt.CANPLAY;break;case"stalled":this.videoElementStatus=kt.STALLED;break;case"suspend":this.videoElementStatus=kt.SUSPEND;break;case"pause":this.videoElementStatus=kt.PAUSED,L()||P()||c()&&this.autoplayFailed||!this.videoTrack||"live"!==this.videoTrack.readyState||(me.debug("[track-".concat(this.trackId,"] video element paused, auto resume")),this.videoElement.play());break;case"waiting":this.videoElementStatus=kt.WAITING;break;case"abort":this.videoElementStatus=kt.ABORT;break;case"ended":this.videoElementStatus=kt.ENDED;break;case"emptied":this.videoElementStatus=kt.EMPTIED;break;case"error":{const e=this.videoElement.error;e&&(this.videoElementStatus=kt.ERROR,me.error("[".concat(this.trackId,"] media error: ").concat(e.message," (").concat(e.code,")")));break}case"timeupdate":{const e=performance.now();if(this.timeUpdatedCount+=1,this.onVideoBufferReady&&this.timeUpdatedCount>u("BUFFER_READY_FRAMES")&&this.onVideoBufferReady(),this.timeUpdatedCount<10)return void(this.lastTimeUpdatedTime=e);const t=e-this.lastTimeUpdatedTime,i=this.lastTimeUpdatedTime;if(this.lastTimeUpdatedTime=e,qo.lastVisibleTime<qo.lastHiddenTime||i<qo.lastHiddenTime||i<qo.lastVisibleTime)return;if(this.isSkipCalcRenderFreezeTime())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}}})),Ct(this,"autoResumeAfterInterruptionOnIOS15_16",(()=>{this.videoTrack&&"live"===this.videoTrack.readyState&&(me.debug("[track-".concat(this.trackId,"] video element paused, auto resume for ").concat(se())),ne()?(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"),Wt.on(Oe.IOS_INTERRUPTION_END,this.autoResumeAfterInterruption),Wt.on(Oe.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&&_i(t,"video",e.message,this.trackId),"NotAllowedError"===e.name?(me.warning("detected video element autoplay failed",e),this.autoplayFailed=!0,this.handleAutoPlayFailed()):me.warning("[".concat(this.trackId,"] play warning: "),e)}));const r=e();if(("Safari"===r.name&&15===Number(r.version)||Y())&&i&&i.then){const e=()=>{this.config.mirror&&!this.config.noStyle&&(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 me.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,o)=>{i.toBlob((async e=>{if(i.remove(),e){const t=await Wi(e);r({buffer:t,width:i.width,height:i.height})}else o(new b(k.CONVERTING_VIDEO_FRAME_TO_BLOB_FAILED))}),e,t<0?.1:t>1?1:t)}))):await Ui(e)}destroy(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isDestroyed=!0,Wt.off(Oe.IOS_INTERRUPTION_END,this.autoResumeAfterInterruption),Wt.off(Oe.IOS_15_16_INTERRUPTION_END,this.autoResumeAfterInterruptionOnIOS15_16),e?this.videoElement.pause():this.videoElement.srcObject=null,this.resetVideoElement(),this.freezeTimeCounterList=[],this.videoState=It.VideoStateStopped}initVideoElement(){if(this._videoElementStatus!==kt.NONE&&this._videoElementStatus!==kt.DESTROYED||(this.videoElementStatus=kt.INIT),!this.videoElementCheckInterval&&(Pr.forEach((e=>{this.videoElement.addEventListener(e,this.handleVideoEvents)})),this.videoElementCheckInterval=window.setInterval((()=>{this._isInPage=re(this.videoElement)}),1e3),u("ENABLE_VIDEO_FRAME_CALLBACK"))){var t,i;let e;const r=()=>{"visible"===document.visibilityState&&(document.removeEventListener("visibilitychange",r),this.videoElementFreezeTimeout=window.setTimeout(o,u("VIDEO_FREEZE_DURATION")))},o=()=>{this.videoElementFreezeTimeout=void 0,this.videoState===It.VideoStateDecoding&&("visible"===document.visibilityState?this.videoState=It.VideoStateFrozen:document.addEventListener("visibilitychange",r))},s=(t,i)=>{if(this.videoElementStatus===kt.PLAYING){if(e){const t=i.presentationTime-e.presentationTime,r=i.presentedFrames-e.presentedFrames;this._render_interframe_delays_sizes.push(r),this._render_interframe_delays.push(t);const s=oe(this._render_interframe_delays_sizes),n=s-this._render_interframe_delays_sizes[0];if(s>30&&n>5&&(this._render_interframe_delays_sizes.shift(),this._render_interframe_delays.shift()),this.videoState===It.VideoStateStarting&&(this.videoState=It.VideoStateDecoding),this.videoState===It.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===It.VideoStateFrozen&&(this.videoState=It.VideoStateDecoding),t>u("VIDEO_FREEZE_DURATION")&&qo.lastVisibleTime>=qo.lastHiddenTime&&e.timestamp>qo.lastVisibleTime&&e.timestamp>qo.lastHiddenTime){const e=Math.min(66,Or(this._render_interframe_delays_sizes,this._render_interframe_delays)),i=Math.max(0,t-(r-1)*e),o=i>e?i:0;this.renderFreezeAccTime2+=o,this.totalFreezeTime+=o,this.renderFreezeAccTime+=t}}e=Nt(Nt({},i),{},{timestamp:t})}else this.isSkipCalcRenderFreezeTime()&&(e=Nt(Nt({},i),{},{timestamp:t}));var r,n;u("ENABLE_VIDEO_FRAME_CALLBACK")&&(this.cancelRVFId=null===(r=(n=this.videoElement).requestVideoFrameCallback)||void 0===r?void 0:r.call(n,s))};this.cancelRVFId=null===(t=(i=this.videoElement).requestVideoFrameCallback)||void 0===t?void 0:t.call(i,s)}this.videoElement.controls=!1,this.videoElement.setAttribute("playsinline",""),B()&&!u("HIDE_NO_POSTER")&&(this.videoElement.poster="noposter");const r=e();if(this.config.noStyle||("Safari"===r.name&&15===Number(r.version)||Y()||!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=>{me.debug("[".concat(this.trackId,"] playback interrupted"),e.toString())}))}resetVideoElement(){var e,t;(Pr.forEach((e=>{this.videoElement&&this.videoElement.removeEventListener(e,this.handleVideoEvents)})),this.videoElementCheckInterval&&(window.clearInterval(this.videoElementCheckInterval),this.videoElementCheckInterval=void 0),this.cancelRVFId&&this.videoElement)&&(null===(e=(t=this.videoElement).cancelVideoFrameCallback)||void 0===e||e.call(t,this.cancelRVFId),this.cancelRVFId=void 0);this.videoElementStatus=kt.NONE}isSkipCalcRenderFreezeTime(){return this.videoElementStatus===kt.DESTROYED||this.internal}handleAutoPlayFailed(){const e=t=>{t.preventDefault(),this.videoElement.play().then((()=>{me.debug("[".concat(this.trackId,"] Video element for trackId:").concat(this.trackId," autoplay resumed."))})).catch((e=>{me.error(e)})),this.autoplayFailed=!1,K()?document.body.removeEventListener("click",e,!0):(document.body.removeEventListener("touchstart",e,!0),document.body.removeEventListener("mousedown",e,!0))};K()?document.body.addEventListener("click",e,!0):(document.body.addEventListener("touchstart",e,!0),document.body.addEventListener("mousedown",e,!0)),gi()}}const Pr=["play","playing","loadeddata","canplay","pause","stalled","suspend","waiting","abort","emptied","ended","timeupdate","error"];class Vr extends Lr{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];super(e),Ct(this,"container",void 0),Ct(this,"slot",void 0),this.slot=e.element,this.internal=t,this.updateConfig(e)}updateConfig(e){this.config=e,this.trackId=e.trackId;const t=e.element;var i;!this.internal||this.slot?(t!==this.slot&&(this.destroy(),this.slot=t),this.createElements()):(this.slot=t,t&&this.container?(this.internal=!1,this.container.id="agora-video-player-".concat(this.trackId),this.videoElement.id="video_".concat(this.trackId),this.config.fit?this.videoElement.style.objectFit=this.config.fit:this.videoElement.style.objectFit="cover",null===(i=this.slot)||void 0===i||i.appendChild(this.container)):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 Ui(e)}destroy(){if(super.destroy(),this.videoElement.remove(),this.videoElement=document.createElement("video"),this.container){try{var e;this.container.remove(),null===(e=this.slot)||void 0===e||e.removeChild(this.container)}catch(e){}this.container=void 0}}createElements(){var e;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(),null===(e=this.slot)||void 0===e||e.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}}function xr(e){return new b(k.NOT_SUPPORTED,e)}class Ur{static assertSupported(){if("undefined"==typeof document||"undefined"==typeof MediaStream)throw xr("video mirror requires DOM media APIs");const e=document.createElement("canvas"),t=e.getContext("2d");if(!t||"function"!=typeof t.setTransform)throw xr("2D canvas is not supported for video mirror");if("function"!=typeof e.captureStream)throw xr("canvas.captureStream() is not supported")}constructor(e){Ct(this,"outputTrack",void 0),Ct(this,"videoElement",void 0),Ct(this,"canvasElement",void 0),Ct(this,"context",void 0),Ct(this,"inputTrack",void 0),Ct(this,"renderFrameRate",0),Ct(this,"stopRenderLoop",void 0),Ct(this,"closed",!1),Ct(this,"lastInputEnabled",void 0),Ct(this,"lastPlayAttemptAt",0),this.checkInputTrack(e),Ur.assertSupported();const t=document.createElement("video"),i=document.createElement("canvas"),r=i.getContext("2d");if(!r)throw xr("2D canvas is not supported for video mirror");const o=e.getSettings();i.width=this.normalizeDimension(o.width),i.height=this.normalizeDimension(o.height),t.autoplay=!0,t.muted=!0,t.playsInline=!0,c()||d()?(t.style.opacity="0.01",t.style.position="fixed",t.style.left="0",t.style.top="0",t.style.width="1px",t.style.height="1px",t.style.pointerEvents="none"):t.style.display="none",i.style.display="none";const s=(ye().supportRequestFrame?i.captureStream(0):i.captureStream()).getVideoTracks()[0];if(!s)throw xr("canvas.captureStream() did not create a video track");this.videoElement=t,this.canvasElement=i,this.context=r,this.outputTrack=s;(document.body||document.documentElement).append(t,i);try{this.setInputTrack(e)}catch(e){throw this.close(),e}}setInputTrack(e){this.assertOpen(),this.checkInputTrack(e);const t=e.getSettings();this.resizeCanvas(t.width,t.height),this.syncContentHint(e),this.updateRenderTimer(t.frameRate),e!==this.inputTrack&&(this.inputTrack=e,this.lastInputEnabled=void 0,this.videoElement.srcObject=new MediaStream([e])),this.lastPlayAttemptAt=performance.now();const i=this.videoElement.play();i&&i.catch(z),this.drawFrame()}close(){this.closed||(this.closed=!0,this.stopRenderLoop&&(this.stopRenderLoop(),this.stopRenderLoop=void 0),this.videoElement.pause(),this.videoElement.srcObject=null,this.videoElement.remove(),this.outputTrack.stop(),this.canvasElement.width=0,this.canvasElement.height=0,this.canvasElement.remove(),this.inputTrack=void 0)}drawFrame(){const e=this.inputTrack;if(this.closed||!e)return;if(this.videoElement.paused){const e=performance.now();if(e-this.lastPlayAttemptAt>=1e3){this.lastPlayAttemptAt=e;const t=this.videoElement.play();t&&t.catch(z)}}if(e.enabled!==this.lastInputEnabled&&(this.lastInputEnabled=e.enabled,this.outputTrack.enabled=e.enabled),!e.enabled||e.muted||"live"!==e.readyState)return;const t=this.videoElement.videoWidth,i=this.videoElement.videoHeight;if(t<=0||i<=0)return;this.resizeCanvas(t,i),this.context.setTransform(-1,0,0,1,t,0),this.context.drawImage(this.videoElement,0,0,t,i);const r=this.outputTrack;r.requestFrame&&r.requestFrame()}resizeCanvas(e,t){if(!e||!t||e<=0||t<=0)return;const i=this.normalizeDimension(e),r=this.normalizeDimension(t);this.canvasElement.width===i&&this.canvasElement.height===r||(this.canvasElement.width=i,this.canvasElement.height=r)}updateRenderTimer(e){const t=e&&Number.isFinite(e)&&e>0?e:30;t!==this.renderFrameRate&&(this.stopRenderLoop&&this.stopRenderLoop(),this.renderFrameRate=t,this.stopRenderLoop=this.startRenderLoop(t))}startRenderLoop(e){const t=()=>this.drawFrame();if(u("DISABLE_WEBAUDIO"))return me.info("[uplink-mirror ".concat(this.outputTrack.id,"] start render loop, scheduler: interval, reason: DISABLE_WEBAUDIO, frameRate: ").concat(e)),Xt(t,e);const i=Ft();let r,o="running"===i.state,s=!1;const n=()=>{if(o)return Xt(t,e);const i=window.setInterval(t,1e3/e);return()=>window.clearInterval(i)};r=n(),me.info("[uplink-mirror ".concat(this.outputTrack.id,"] start render loop, scheduler: ").concat(o?"webaudio":"interval",", audioContextState: ").concat(i.state,", frameRate: ").concat(e));const a=()=>{if(s)return;const t="running"===i.state;if(t===o)return;const a=o?"webaudio":"interval";r(),o=t,r=n(),me.info("[uplink-mirror ".concat(this.outputTrack.id,"] switch render loop, scheduler: ").concat(a," => ").concat(o?"webaudio":"interval",", audioContextState: ").concat(i.state,", frameRate: ").concat(e))};return Wt.on(Oe.STATE_CHANGE,a),()=>{s||(s=!0,Wt.off(Oe.STATE_CHANGE,a),r())}}syncContentHint(e){try{this.outputTrack.contentHint=e.contentHint||""}catch(e){}}normalizeDimension(e){return e&&e>0?Math.round(e):1}checkInputTrack(e){if("video"!==e.kind)throw new b(k.INVALID_PARAMS,"video mirror input must be a video track")}assertOpen(){if(this.closed)throw new b(k.INVALID_OPERATION,"video mirror controller is closed")}}var Wr,Zr,Br,Fr,Gr,Kr,Hr,Yr,Xr,zr,jr,Qr,Jr,qr,$r,eo,to,io,ro,oo,so,no,ao,co,uo,ho,lo,po,mo,go,_o,fo,vo,To,Eo,yo,So,bo;let ko=(Wr=fe({argsMap:(e,t,i)=>[e.getTrackId(),"string"==typeof t?t:t instanceof HTMLVideoElement?"HTMLVideoElement":"HTMLElement",i]}),Zr=Ti(),Br=fe({argsMap:e=>[e.getTrackId()]}),Fr=$("LocalVideoTrack","_enabledMutex"),Gr=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),Kr=Ti(),Hr=$("LocalVideoTrack","_enabledMutex"),Yr=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),Xr=Ti(),zr=fe({argsMap:(e,t)=>[e.getTrackId(),t,e._saveEncodeBitrateRatio]}),jr=Ti(),Qr=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),Jr=Ti(),qr=Ti(),$r=fe({argsMap:(e,t,i)=>[e.getTrackId(),t,i]}),eo=Ti(),to=Ti(),io=Ti(),ro=fe({argsMap:e=>[e.getTrackId()]}),oo=Ti(),so=Ti(),no=Ti(),ao=Ti(),co=Ti(),uo=fe({argsMap:(e,t)=>[e.getTrackId(),t.name]}),ho=fe({argsMap:e=>[e.getTrackId()]}),lo=fe({argsMap:e=>[e.getTrackId()]}),po=fe({argsMap:(e,t,i)=>[e.getTrackId(),t.label,i]}),mo=class i extends Pt{_isUplinkMirrorEnabled(){return this._videoMirrorMode===Qe.VIDEO_MIRROR_MODE_ENABLED}_getPublishTrack(){var e,t;return null!==(e=null===(t=this._ensureUplinkMirror())||void 0===t?void 0:t.outputTrack)&&void 0!==e?e:this._mediaStreamTrack}get videoHeight(){if(c()){const e=this._mediaStreamTrack.getSettings().height;return this._videoHeight=e,this._videoHeight}return this._videoHeight}get videoWidth(){if(c()){const e=this._mediaStreamTrack.getSettings().width;return this._videoWidth=e,this._videoWidth}return this._videoWidth}get isPlaying(){return!(!this._player||this._player.videoElementStatus!==kt.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,o,s,n){if(super(e,s),Ct(this,"trackMediaType",ht.VIDEO),Ct(this,"_player",void 0),Ct(this,"isUseScaleResolutionDownBy",!1),Ct(this,"_videoVisibleTimer",null),Ct(this,"_previousVideoVisibleStatus",void 0),Ct(this,"_clearPreviousVideoVisibleStatus",(()=>this._previousVideoVisibleStatus=void 0)),Ct(this,"_encoderConfig",void 0),Ct(this,"_scalabilityMode",{numSpatialLayers:1,numTemporalLayers:1}),Ct(this,"_videoMirrorMode",Qe.VIDEO_MIRROR_MODE_DISABLED),Ct(this,"_uplinkMirror",void 0),Ct(this,"_uplinkMirrorUnavailable",!1),Ct(this,"_onWorkingTrackUpdated",(e=>{this._uplinkMirror&&e&&e!==this._uplinkMirror.outputTrack&&this._uplinkMirror.setInputTrack(e)})),Ct(this,"_optimizationMode",void 0),Ct(this,"_saveEncodeBitrateRatio",1),Ct(this,"_videoHeight",void 0),Ct(this,"_videoWidth",void 0),Ct(this,"_forceBitrateLimit",void 0),Ct(this,"_enabled",!0),Ct(this,"_processorDestination",void 0),Ct(this,"_processorContext",void 0),this.on(ct.TRACK_UPDATED,this._onWorkingTrackUpdated),c()){const t=e.getSettings(),i=t.width,r=t.height;this._videoWidth=i,this._videoHeight=r}else this.updateMediaStreamTrackResolution();if(this._scalabilityMode=r,this._optimizationMode=o,this._hints=n||[],i&&-1!==this._hints.indexOf(rt.CUSTOM_TRACK)?this._encoderConfig=ae(i):this._encoderConfig=i,this._videoMirrorMode=(null==i?void 0:i.mirrorMode)===Qe.VIDEO_MIRROR_MODE_ENABLED?Qe.VIDEO_MIRROR_MODE_ENABLED:Qe.VIDEO_MIRROR_MODE_DISABLED,-1===this._hints.indexOf(rt.SCREEN_TRACK))this.updateBitrateFromProfile();else if(ce(t.CHROME,115)&&de()){const t=Zi(e);t&&(me.info("local screen video track begin to inject frame"),this._mediaStreamTrack=t)}i&&-1!==this._hints.indexOf(rt.CUSTOM_TRACK)&&this.setEncoderConfiguration(i),this._processorContext=new yi(this.getTrackId(),"local"),this._processorDestination=new Ei(this.processorContext),this.bindProcessorDestinationEvents()}_ensureUplinkMirror(){if(!this._uplinkMirror&&!this._uplinkMirrorUnavailable){const i=e();if(i.name===t.FIREFOX&&72===Number(i.version))return void(this._uplinkMirrorUnavailable=!0);try{this._uplinkMirror=new Ur(this._mediaStreamTrack)}catch(e){this._uplinkMirrorUnavailable=!0,me.warning("[".concat(this.getTrackId(),"] can not create video mirror, publish without mirror"),e.toString())}}return this._uplinkMirror}_setVideoMirrorMode(e){var t;return(e=e===Qe.VIDEO_MIRROR_MODE_ENABLED?Qe.VIDEO_MIRROR_MODE_ENABLED:Qe.VIDEO_MIRROR_MODE_DISABLED)===this._videoMirrorMode?(null===(t=this._uplinkMirror)||void 0===t||t.setInputTrack(this._mediaStreamTrack),!1):(this._videoMirrorMode=e,e===Qe.VIDEO_MIRROR_MODE_ENABLED&&this._ensureUplinkMirror(),!!this._uplinkMirror)}_disposeUplinkMirrorIfDisabled(){this._videoMirrorMode===Qe.VIDEO_MIRROR_MODE_DISABLED&&this._uplinkMirror&&(this._uplinkMirror.close(),this._uplinkMirror=void 0)}async _replaceSenderIfMirrorSwitched(e,t){if(e){try{await N(this,it.NEED_REPLACE_TRACK,this)}catch(e){throw this._videoMirrorMode=t,this._disposeUplinkMirrorIfDisabled(),e}this._disposeUplinkMirrorIfDisabled()}}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:(me.warning("[".concat(this.getTrackId(),'] can not find "#').concat(e,'" element, use document.body')),e=document.body)}me.debug("[".concat(this.getTrackId(),"] start video playback in ").concat(e instanceof HTMLVideoElement?"HTMLVideoElement":"HTMLElement"),JSON.stringify(t));const i=Nt(Nt(Nt({},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 Vr(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(dt.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,me.debug("[".concat(this.getTrackId(),"] stop video playback")))}async setEnabled(e,t){if(!t){if(e===this._enabled)return;this.stateCheck("enabled",e)}if(me.info("[".concat(this.getTrackId(),"] start setEnabled"),e),!e){this._originMediaStreamTrack.enabled=!1;try{await N(this,it.NEED_DISABLE_TRACK,this)}catch(e){throw me.error("[".concat(this.getTrackId(),"] setEnabled to false error"),e.toString()),e}return t||(this._enabled=!1),void me.info("[".concat(this.getTrackId(),"] setEnabled to false success"))}this._originMediaStreamTrack.enabled=!0;try{await N(this,it.NEED_ENABLE_TRACK,this)}catch(e){throw me.error("[".concat(this.getTrackId(),"] setEnabled to true error"),e.toString()),e}me.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,me.debug("[".concat(this.getTrackId(),"] start set muted: ").concat(e)),e?await N(this,it.NEED_MUTE_TRACK,this):await N(this,it.NEED_UNMUTE_TRACK,this))}async setSaveEncodeBitrateRatio(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._saveEncodeBitrateRatio;if(1!==this._saveEncodeBitrateRatio&&this._encoderConfig&&this._encoderConfig.bitrateMax&&this._encoderConfig.bitrateMin){this._encoderConfig.bitrateMin=Math.floor(this._encoderConfig.bitrateMin*e),this._encoderConfig.bitrateMax=Math.floor(this._encoderConfig.bitrateMax*e),me.debug("[".concat(this.getTrackId(),"] set save encode bitrate ratio, ").concat(e)),this._saveEncodeBitrateRatio=1;try{await N(this,it.NEED_UPDATE_VIDEO_ENCODER,this)}catch(e){return e.throw(me)}}}async setEncoderConfiguration(e,t){var i;if(!this._enabled)throw new b(k.TRACK_IS_DISABLED,"can not set encoder configuration when track is disabled");const r=null!==(i=(e=Be(e)).mirrorMode)&&void 0!==i?i:this._videoMirrorMode;if(u("USE_STANDARD_BITRATE_DEFAULT")&&(delete e.bitrateMax,delete e.bitrateMin),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=Ri({encoderConfig:e});(c()||L()||P())&&(t.deviceId=void 0),me.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 b(k.UNEXPECTED_ERROR,e.toString());throw me.error("[".concat(this.getTrackId(),"] applyConstraints error"),t.toString()),t}}const o=this._videoMirrorMode,s=this._setVideoMirrorMode(r);await this._replaceSenderIfMirrorSwitched(s,o),this._encoderConfig=Nt(Nt({},e),{},{mirrorMode:this._videoMirrorMode}),-1===this._hints.indexOf(rt.SCREEN_TRACK)&&this.updateBitrateFromProfile();try{await N(this,it.NEED_UPDATE_VIDEO_ENCODER,this)}catch(e){return e.throw(me)}}getStats(){w((()=>{me.warning("[deprecated] LocalVideoTrack.getStats will be removed in the future, use AgoraRTCClient.getLocalVideoStats instead")}),"localVideoTrackGetStatsWarning");const e=ee(this,it.GET_STATS);return e||Nt({},gt)}async setBeautyEffect(e){me.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 Ui(e)}async findClosestProfile(){const e=this.getMediaStreamTrackSettings(),t=e.width,i=e.height,r=e.frameRate,o=this._encoderConfig||{},s=o.width,n=o.height,a=o.frameRate,c=Q(this._videoWidth||t||s||0),d=Q(this._videoHeight||i||n||0),u=Oi(c,d,Q(r||a||15));if(u)return me.debug("[".concat(this.getTrackId(),"] find closest profile, ").concat(c,"x").concat(d," => ").concat(JSON.stringify(u))),this.setEncoderConfiguration(u)}async setBitrateLimit(e){me.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))}async setOptimizationMode(e){if("motion"!==e&&"detail"!==e&&"balanced"!==e)return void me.error(k.INVALID_PARAMS,"optimization mode must be motion, detail or balanced");const t=this._optimizationMode;try{this._optimizationMode=e,await N(this,it.NEED_UPDATE_VIDEO_SEND_PARAMETERS,this)}catch(e){throw this._optimizationMode=t,me.error("[".concat(this.getTrackId(),"] set optimization mode failed"),e.toString()),e}me.info("[".concat(this.getTrackId(),"] set optimization mode success (").concat(e,")"))}setScalabiltyMode(e){if(1===e.numSpatialLayers&&1!==e.numTemporalLayers)return me.error(k.INVALID_PARAMS,"scalability mode currently not supported, no SVC."),void(this._scalabilityMode={numSpatialLayers:1,numTemporalLayers:1});this._scalabilityMode=e,me.info("[".concat(this.getTrackId(),"] set scalability mode success (").concat(e,")"))}updateMediaStreamTrackResolution(){Ai(this._originMediaStreamTrack).then((e=>{let t=Ot(e,2),i=t[0],r=t[1];this._videoHeight=r,this._videoWidth=i})).catch(z)}_updatePlayerSource(){this._player&&this._player.updateVideoTrack(this._mediaStreamTrack)}_getDefaultPlayerConfig(){return{fit:"contain"}}async setSenderConfiguration(e){if(!this._enabled)throw new b(k.TRACK_IS_DISABLED,"can not set encoder configuration when track is disabled");me.debug("[".concat(this.getTrackId(),"] setSenderConfiguration applyConstraints"),JSON.stringify(e)),e=Be(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=Nt(Nt({},e),{},{mirrorMode:this._videoMirrorMode}),-1===this._hints.indexOf(rt.SCREEN_TRACK)&&this.updateBitrateFromProfile();try{await N(this,it.NEED_UPDATE_VIDEO_ENCODER,this)}catch(e){return e.throw(me)}}updateBitrateFromProfile(){if(!this._encoderConfig)return;const e=this.getMediaStreamTrackSettings(),t=e.width,i=e.height,r=e.frameRate;if(!t||!i||!r)return;const o=this._encoderConfig,s=o.bitrateMax,n=o.bitrateMin;if(null==n||null==s){const e=Li(t,i,r,n,s),o=e.max,a=e.min;if(this._encoderConfig.bitrateMin=a,this._encoderConfig.bitrateMax=o,u("VIDEO_STANDARD_BITRATE_VERSION")&&null==n&&null==s){const e=Ot(Ni(t,i,r),2),o=e[0],s=e[1];this._encoderConfig.bitrateMax=o,this._encoderConfig.bitrateMin=a?Math.min(a,o):o,this._saveEncodeBitrateRatio=s,me.debug("[".concat(this.getTrackId(),"] update new bitrate from profile, [w: ").concat(t,", h: ").concat(i,", fps: ").concat(r,"] => [brMax: ").concat(this._encoderConfig.bitrateMax,", brMin: ").concat(this._encoderConfig.bitrateMin,", save_bitrate_ratio: ").concat(this._saveEncodeBitrateRatio,"]"))}else me.debug("[".concat(this.getTrackId(),"] update bitrate from profile, [w: ").concat(t,", h: ").concat(i,", fps: ").concat(r,"] => [brMax: ").concat(o,", brMin: ").concat(a,"]")),this._saveEncodeBitrateRatio=1}}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},o=r.element,s=r.slot;if(this.isPlaying&&o instanceof HTMLVideoElement&&s instanceof HTMLElement){const e=ue.checkOneElementVisible(o),t=Object.assign({},e);if(t.visible!==this._previousVideoVisibleStatus){this._previousVideoVisibleStatus=t.visible;const e=ge.reportApiInvoke(null,{tag:C.TRACER,name:D.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 b(k.GET_VIDEO_ELEMENT_VISIBLE_ERROR,e.message)}}async renewMediaStreamTrack(e){}pipe(e){if(this.processor===e)return e;if(e._source)throw new b(k.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(){var e;this.off(ct.TRACK_UPDATED,this._onWorkingTrackUpdated),this._videoMirrorMode=Qe.VIDEO_MIRROR_MODE_DISABLED,null===(e=this._uplinkMirror)||void 0===e||e.close(),this._uplinkMirror=void 0,super.close(),this.unbindProcessorDestinationEvents(),this.unbindProcessorContextEvents(),this.unpipe(),this.processorDestination._source&&this.processorDestination._source.unpipe()}clone(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=this._encoderConfig;e&&(r=Nt(Nt({},r),Be(e))),r=he(r);const o=R(8,"track-video-cloned-"),s=new i(t?this._mediaStreamTrack.clone():this._mediaStreamTrack,r,he(this._scalabilityMode),this._optimizationMode,o,he(this._hints));return e&&r&&s.setEncoderConfiguration(r),me.debug("clone video track from ".concat(this.getTrackId()," to ").concat(o,", clone ").concat(t)),s}async replaceTrack(e,t){var i;if(!(e instanceof MediaStreamTrack))throw new b(k.INVALID_PARAMS,"track should be an instance of MediaStreamTrack");if("video"!==e.kind)throw new b(k.INVALID_PARAMS,"track should be a video MediaStreamTrack");e!==(null===(i=this._uplinkMirror)||void 0===i?void 0:i.outputTrack)&&(await this._updateOriginMediaStreamTrack(e,t,!0),this.updateMediaStreamTrackResolution())}sendSeiData(e){if(w((()=>{ge.reportApiInvoke(null,{name:D.LOCAL_VIDEO_SEND_SEI_DATA,options:[],tag:C.TRACER}).onSuccess("")}),this._mediaStreamTrack.id||this.getTrackId()),!u("ENABLE_VIDEO_SEI")||!u("ENABLE_ENCODED_TRANSFORM"))return void me.warning('To send/receive SEI, please call AgoraRTC.setParameter("ENABLE_VIDEO_SEI", true) before instantiate IAgoraRtcClient');if(e instanceof Uint8Array==!1)return new b(k.INVALID_PARAMS,"Invalid argument type, ILocalVideoTrack.sendSeiData() only accept Uint8Array argument.").throw();const t=this.getRTCRtpTransceiver();if(!t)return void me.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||"video/h265"===r?this.safeEmit("sei-to-send",e):me.warning("SEI is not supported by ".concat(r))}bindProcessorDestinationEvents(){this.processorDestination.on(Tt.ON_TRACK,(async e=>{e?e!==this._mediaStreamTrack&&(this._mediaStreamTrack=e,this._updatePlayerSource(),await N(this,it.NEED_REPLACE_TRACK,this)):this._mediaStreamTrack!==this._originMediaStreamTrack&&(this._mediaStreamTrack=this._originMediaStreamTrack,this._updatePlayerSource(),await N(this,it.NEED_REPLACE_TRACK,this))}))}unbindProcessorDestinationEvents(){this.processorDestination.removeAllListeners(Tt.ON_TRACK)}unbindProcessorContextEvents(){this.processorContext.removeAllListeners(Et.REQUEST_UPDATE_CONSTRAINTS),this.processorContext.removeAllListeners(Et.REQUEST_CONSTRAINTS)}},wt(mo.prototype,"play",[Wr,Zr],Object.getOwnPropertyDescriptor(mo.prototype,"play"),mo.prototype),wt(mo.prototype,"stop",[Br],Object.getOwnPropertyDescriptor(mo.prototype,"stop"),mo.prototype),wt(mo.prototype,"setEnabled",[Fr,Gr,Kr],Object.getOwnPropertyDescriptor(mo.prototype,"setEnabled"),mo.prototype),wt(mo.prototype,"setMuted",[Hr,Yr,Xr],Object.getOwnPropertyDescriptor(mo.prototype,"setMuted"),mo.prototype),wt(mo.prototype,"setSaveEncodeBitrateRatio",[zr,jr],Object.getOwnPropertyDescriptor(mo.prototype,"setSaveEncodeBitrateRatio"),mo.prototype),wt(mo.prototype,"setEncoderConfiguration",[Qr,Jr],Object.getOwnPropertyDescriptor(mo.prototype,"setEncoderConfiguration"),mo.prototype),wt(mo.prototype,"getStats",[qr],Object.getOwnPropertyDescriptor(mo.prototype,"getStats"),mo.prototype),wt(mo.prototype,"setBeautyEffect",[$r,eo],Object.getOwnPropertyDescriptor(mo.prototype,"setBeautyEffect"),mo.prototype),wt(mo.prototype,"getCurrentFrameData",[to],Object.getOwnPropertyDescriptor(mo.prototype,"getCurrentFrameData"),mo.prototype),wt(mo.prototype,"getCurrentFrameImage",[io],Object.getOwnPropertyDescriptor(mo.prototype,"getCurrentFrameImage"),mo.prototype),wt(mo.prototype,"findClosestProfile",[ro,oo],Object.getOwnPropertyDescriptor(mo.prototype,"findClosestProfile"),mo.prototype),wt(mo.prototype,"setBitrateLimit",[so],Object.getOwnPropertyDescriptor(mo.prototype,"setBitrateLimit"),mo.prototype),wt(mo.prototype,"setOptimizationMode",[no],Object.getOwnPropertyDescriptor(mo.prototype,"setOptimizationMode"),mo.prototype),wt(mo.prototype,"setScalabiltyMode",[ao],Object.getOwnPropertyDescriptor(mo.prototype,"setScalabiltyMode"),mo.prototype),wt(mo.prototype,"updateMediaStreamTrackResolution",[co],Object.getOwnPropertyDescriptor(mo.prototype,"updateMediaStreamTrackResolution"),mo.prototype),wt(mo.prototype,"pipe",[uo],Object.getOwnPropertyDescriptor(mo.prototype,"pipe"),mo.prototype),wt(mo.prototype,"unpipe",[ho],Object.getOwnPropertyDescriptor(mo.prototype,"unpipe"),mo.prototype),wt(mo.prototype,"close",[lo],Object.getOwnPropertyDescriptor(mo.prototype,"close"),mo.prototype),wt(mo.prototype,"replaceTrack",[po],Object.getOwnPropertyDescriptor(mo.prototype,"replaceTrack"),mo.prototype),mo),Io=(go=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),_o=Ti(),fo=$("CameraVideoTrack","_enabledMutex"),vo=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),To=Ti(),Eo=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),yo=Ti(),So=fe({argsMap:e=>[e.getTrackId()]}),bo=class e extends ko{get __className__(){return"CameraVideoTrack"}constructor(e,t,i,r,o,s){super(e,Be(t.encoderConfig),r,o,s),Ct(this,"_config",void 0),Ct(this,"_originalConstraints",void 0),Ct(this,"_constraints",void 0),Ct(this,"_enabled",!0),Ct(this,"_deviceName","default"),Ct(this,"tryResumeVideoForIOS15_16WeChat",(async()=>{(Y()||te())&&!le()&&pe()&&this._enabled&&!this._isClosed&&(me.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=Be(this._config.encoderConfig),Wt.on(Oe.IOS_15_16_INTERRUPTION_END,this.tryResumeVideoForIOS15_16WeChat),Wt.on(Oe.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(me.info("[".concat(this.getTrackId(),"] set device to ").concat(e)),this._enabled)try{const t=await li.getDeviceById(e),i={};i.video=Nt({},this._constraints),i.video.deviceId={exact:e},i.video.facingMode=void 0,this._originMediaStreamTrack.stop();let r=null;try{r=await ai(i,this.getTrackId())}catch(e){throw me.error("[".concat(this.getTrackId(),"] setDevice failed"),e.toString()),r=await ai({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 me.error("[".concat(this.getTrackId(),"] setDevice error"),e.toString()),e}else try{const t=await li.getDeviceById(e);this._deviceName=t.label,this._config.cameraId=e,this._constraints.deviceId={exact:e}}catch(e){throw me.error("[".concat(this.getTrackId(),"] setDevice error"),e.toString()),e}me.info("[".concat(this.getTrackId(),"] setDevice success"))}async _setDeviceByFacingModel(e){me.info("[".concat(this.getTrackId(),"] set facingMode ").concat(e));const t={video:Nt(Nt({},this._constraints),{},{deviceId:void 0,facingMode:{exact:e}})};if(this._enabled){this._originMediaStreamTrack.stop();let e=null;try{e=await ai(t,this.getTrackId())}catch(t){throw me.error("[".concat(this.getTrackId(),"] setDeviceByFacingModel failed"),t.toString()),e=await ai({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=Nt({},t.video),me.info("[".concat(this.getTrackId(),"] setDeviceByFacingModel success"))}async setEnabled(e,t){if(!t){if(e===this._enabled)return;this.stateCheck("enabled",e)}if(me.info("[".concat(this.getTrackId(),"] start setEnabled"),e),e){try{if(this.isExternalTrack)this._originMediaStreamTrack.enabled=!0;else{const e=await ai({video:this._constraints},this.getTrackId());await this._updateOriginMediaStreamTrack(e.getVideoTracks()[0],!1)}await N(this,it.NEED_ENABLE_TRACK,this)}catch(e){throw me.error("[".concat(this.getTrackId(),"] setEnabled true error"),e.toString()),e}this.updateMediaStreamTrackResolution(),me.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 N(this,it.NEED_DISABLE_TRACK,this)}catch(e){throw me.error("[".concat(this.getTrackId(),"] setEnabled to false error"),e.toString()),e}me.info("[".concat(this.getTrackId(),"] setEnabled to false success"))}}async setEncoderConfiguration(e,t){var i;if(!this._enabled)throw new b(k.TRACK_IS_DISABLED,"can not set encoder configuration when track is disabled");const r=null!==(i=(e=Be(e)).mirrorMode)&&void 0!==i?i:this._videoMirrorMode;u("USE_STANDARD_BITRATE_DEFAULT")&&(delete e.bitrateMax,delete e.bitrateMin),this._forceBitrateLimit&&(e.bitrateMax=this._forceBitrateLimit.max_bitrate||e.bitrateMax,e.bitrateMin=this._forceBitrateLimit.min_bitrate||e.bitrateMin);const o=ae(this._config);o.encoderConfig=e;const s=Ri(o);(c()||L()||P())&&(s.deviceId=void 0),me.debug("[".concat(this.getTrackId(),"] setEncoderConfiguration applyConstraints"),JSON.stringify(e),JSON.stringify(s));try{await this._originMediaStreamTrack.applyConstraints(s),this.updateMediaStreamTrackResolution()}catch(e){const t=new b(k.UNEXPECTED_ERROR,e.toString());throw me.error("[".concat(this.getTrackId(),"] applyConstraints error"),t.toString()),t}const n=this._videoMirrorMode,a=this._setVideoMirrorMode(r);await this._replaceSenderIfMirrorSwitched(a,n),this._config=o,this._constraints=s,this._originalConstraints=s,this._encoderConfig=Nt(Nt({},e),{},{mirrorMode:this._videoMirrorMode}),-1===this._hints.indexOf(rt.SCREEN_TRACK)&&this.updateBitrateFromProfile();try{await N(this,it.NEED_UPDATE_VIDEO_ENCODER,this)}catch(e){return e.throw(me)}}_getDefaultPlayerConfig(){return{mirror:!0,fit:"cover"}}onTrackEnded(){if((L()||P())&&this._enabled&&!this._isClosed&&Wt.duringInterruption){const e=async()=>{Wt.off(Oe.IOS_INTERRUPTION_END,e),this._enabled&&!this._isClosed&&(me.debug("[".concat(this.getTrackId(),"] try capture camera media device for interrupted iOS device.")),await this.setEnabled(!1),await this.setEnabled(!0))};Wt.on(Oe.IOS_INTERRUPTION_END,e)}else me.debug("[".concat(this.getTrackId(),"] track ended")),this.safeEmit(dt.TRACK_ENDED)}async renewMediaStreamTrack(e){const t=e||this._constraints,i=li.searchDeviceIdByName(this._deviceName);if(i&&!t.deviceId&&(t.deviceId={exact:i}),this._enabled){const e=await ai({video:t},this.getTrackId());this._constraints=t,await this._updateOriginMediaStreamTrack(e.getVideoTracks()[0],!0),this.updateMediaStreamTrackResolution()}}close(){super.close(),Wt.off(Oe.IOS_15_16_INTERRUPTION_END,this.tryResumeVideoForIOS15_16WeChat),Wt.off(Oe.IOS_INTERRUPTION_END,this.tryResumeVideoForIOS15_16WeChat)}clone(t){let i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=this._encoderConfig;t&&(r=Nt(Nt({},r),Be(t))),r=he(r);const o=R(8,"track-cam-cloned-"),s=new e(i?this._mediaStreamTrack.clone():this._mediaStreamTrack,he(Nt(Nt({},this._config),{},{encoderConfig:r})),he(this._constraints),he(this._scalabilityMode),this._optimizationMode,o);return t&&r&&s.setEncoderConfiguration(r),me.debug("clone track from ".concat(this.getTrackId()," to ").concat(o,", clone ").concat(i)),s}bindProcessorContextEvents(){this.processorContext.on(Et.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(Et.REQUEST_CONSTRAINTS,(async e=>{e(this._originMediaStreamTrack.getSettings())}))}},wt(bo.prototype,"setDevice",[go,_o],Object.getOwnPropertyDescriptor(bo.prototype,"setDevice"),bo.prototype),wt(bo.prototype,"setEnabled",[fo,vo,To],Object.getOwnPropertyDescriptor(bo.prototype,"setEnabled"),bo.prototype),wt(bo.prototype,"setEncoderConfiguration",[Eo,yo],Object.getOwnPropertyDescriptor(bo.prototype,"setEncoderConfiguration"),bo.prototype),wt(bo.prototype,"close",[So],Object.getOwnPropertyDescriptor(bo.prototype,"close"),bo.prototype),bo);function Ao(e){return e instanceof ko&&e._isUplinkMirrorEnabled()?e._getPublishTrack():e._mediaStreamTrack}function Ro(e){const t=R(8,"track-cus-"),i=ge.reportApiInvoke(null,{id:t,tag:C.TRACER,name:D.CREATE_CUSTOM_AUDIO_TRACK,options:[e]}),r=new Rr(e.mediaStreamTrack,e.encoderConfig?He(e.encoderConfig):{},t,!1);return me.info("create custom audio track success with config",e,"trackId",r.getTrackId()),i.onSuccess(r.getTrackId()),r}async function wo(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=R(8,"track-mic-"),i=ge.reportApiInvoke(null,{id:t,tag:C.TRACER,name:D.CREATE_MIC_AUDIO_TRACK,options:[e]}),r=Mi(e);let o=null;me.info("start create microphone audio track with config",JSON.stringify(e),"trackId",t);try{o=(await ai({audio:r},t)).getAudioTracks()[0]||null}catch(e){throw i.onError(e),e}if(!o){const e=new b(k.UNEXPECTED_ERROR,"can not find track in media stream");return i.onError(e),e.throw(me)}const s=new wr(o,e,r,t);return i.onSuccess(s.getTrackId()),me.info("create microphone audio track success, trackId:",t),s}async function Do(e){var t;const i=e.cacheOnlineFile,r=e.encoderConfig;let o=e.source;const s={source:o instanceof AudioBuffer?"AudioBuffer":o instanceof File?null!==(t=File.name)&&void 0!==t?t:"File":o,cacheOnlineFile:i,encoderConfig:r},n=R(8,"track-buf-"),a=ge.reportApiInvoke(null,{id:n,tag:C.TRACER,name:D.CREATE_BUFFER_AUDIO_TRACK,options:[s]});if(u("DISABLE_WEBAUDIO"))throw new b(k.NOT_SUPPORTED,"can not create BufferSourceAudioTrack when WebAudio disabled");me.info("start create buffer source audio track with config",JSON.stringify(s),"trackId",n);const c=o;if(!(o instanceof AudioBuffer))try{o=await async function(e,t){let i=null;if("string"==typeof e){const t=Nr.get(e);if(t)return me.debug("use cached audio resource: ",e),t;try{i=(await ie((()=>ve.get(e,{responseType:"arraybuffer"})),void 0,void 0,{maxRetryCount:3})).data}catch(e){throw new b(k.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 b(k.READ_LOCAL_AUDIO_FILE_ERROR))},r.onerror=()=>{i(new b(k.READ_LOCAL_AUDIO_FILE_ERROR))},r.readAsArrayBuffer(e)}));i=await t}const r=await Ht(i);return"string"==typeof e&&t&&Nr.set(e,r),r}(o,i)}catch(e){return a.onError(e),e.throw(me)}const d=new Mr(o),h=new Dr(c,d,r?He(r):{},n);return me.info("create buffer source audio track success, trackId:",n),a.onSuccess(h.getTrackId()),h}function Co(e){const t=new Cr;return e.forEach((e=>t.addAudioTrack(e))),t}function Mo(e){const t=R(8,"track-cus-"),i=ge.reportApiInvoke(null,{id:t,tag:C.TRACER,name:D.CREATE_CUSTOM_VIDEO_TRACK,options:[e]});u("USE_STANDARD_BITRATE_DEFAULT")&&(delete e.bitrateMax,delete e.bitrateMin);const r=new ko(e.mediaStreamTrack,{width:e.width,height:e.height,frameRate:e.frameRate,bitrateMax:e.bitrateMax,bitrateMin:e.bitrateMin,mirrorMode:e.mirrorMode},e.scalabiltyMode?Ge(e.scalabiltyMode):{numSpatialLayers:1,numTemporalLayers:1},e.optimizationMode,t,[rt.CUSTOM_TRACK]);return i.onSuccess(r.getTrackId()),me.info("create custom video track success with config",e,"trackId",r.getTrackId()),r}async function No(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=u("CAMERA_CAPTURE_CONFIG"),i=R(8,"track-cam-"),r=ge.reportApiInvoke(null,{id:i,tag:C.TRACER,name:D.CREATE_CAM_VIDEO_TRACK,options:[Nt({},e),t]});t&&(e.encoderConfig=t);const o=Ri(e);let s=null;me.info("start create camera video track with config",JSON.stringify(e),"trackId",i);try{s=(await ai({video:o},i)).getVideoTracks()[0]||null}catch(e){throw r.onError(e),e}if(!s){const e=new b(k.UNEXPECTED_ERROR,"can not find track in media stream");return r.onError(e),e.throw(me)}if(e.optimizationMode&&Po(i,s,e,Be(e.encoderConfig)),u("USE_STANDARD_BITRATE_DEFAULT")){const t=Be(e.encoderConfig);e.encoderConfig=t,delete t.bitrateMax,delete t.bitrateMin}const n=new Io(s,e,o,e.scalabiltyMode?Ge(e.scalabiltyMode):{numSpatialLayers:1,numTemporalLayers:1},e.optimizationMode,i);return r.onSuccess(n.getTrackId()),me.info("create camera video success, trackId:",i),n}async function Oo(){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=R(8,"track-mic-"),o=R(8,"track-cam-"),s=ge.reportApiInvoke(null,{id:"".concat(r,"-").concat(o),tag:C.TRACER,name:D.CREATE_MIC_AND_CAM_TRACKS,options:[e,t,i]});i&&(t.encoderConfig=i);const n=Ri(t),a=Mi(e);let c=null,d=null;me.info("start create camera video track(".concat(o,") and microphone audio track(").concat(r,") with config, audio: ").concat(JSON.stringify(e),", video: ").concat(JSON.stringify(t)));try{const e=await ai({audio:a,video:n},"".concat(r,"-").concat(o));c=e.getAudioTracks()[0],d=e.getVideoTracks()[0]}catch(e){throw s.onError(e),e}if(!c||!d){const e=new b(k.UNEXPECTED_ERROR,"can not find tracks in media stream");return s.onError(e),e.throw(me)}if(t.optimizationMode&&Po(o,d,t,Be(t.encoderConfig)),u("USE_STANDARD_BITRATE_DEFAULT")){const e=Be(t.encoderConfig);t.encoderConfig=e,delete e.bitrateMax,delete e.bitrateMin}const h=new wr(c,e,a,r),l=new Io(d,t,n,t.scalabiltyMode?Ge(t.scalabiltyMode):{numSpatialLayers:1,numTemporalLayers:1},t.optimizationMode,o);return s.onSuccess([h.getTrackId(),l.getTrackId()]),me.info("create camera video track(".concat(o,") and microphone audio track(").concat(r,") success")),[h,l]}async function Lo(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"disable";const i="object"==typeof t?Ci(t):void 0;i&&(t="auto");const r=R(8,"track-scr-v-"),o=ge.reportApiInvoke(null,{id:r,tag:C.TRACER,name:D.CREATE_SCREEN_VIDEO_TRACK,options:[Nt({},e),t]});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=wi(e);let n=null,a=null;const c=ye();if(!c.supportShareAudio&&"enable"===t){const e=new b(k.NOT_SUPPORTED,"your browser or platform is not support share-screen with audio");return o.onError(e),e.throw(me)}me.info("start create screen video track with config",e,"withAudio",t,"trackId",r);const d=c.supportShareAudio&&"disable"!==t;try{const e=await ai({screen:s,screenAudio:d?i||!0:void 0},r);n=e.getVideoTracks()[0]||null,a=e.getAudioTracks()[0]||null}catch(e){throw o.onError(e),e}if(!n){const e=new b(k.UNEXPECTED_ERROR,"can not find track in media stream");return o.onError(e),e.throw(me)}if(!a&&"enable"===t){n&&n.stop();const e=new b(k.SHARE_AUDIO_NOT_ALLOWED);return o.onError(e),e.throw(me)}if(e.optimizationMode||(e.optimizationMode="detail"),e.optimizationMode){Po(r,n,e,e.encoderConfig&&Fe(e.encoderConfig)||void 0),e.encoderConfig&&"string"!=typeof e.encoderConfig&&(e.encoderConfig.bitrateMin=e.encoderConfig.bitrateMax)}const u=new ko(n,e.encoderConfig?Fe(e.encoderConfig):{},e.scalabiltyMode?Ge(e.scalabiltyMode):{numSpatialLayers:1,numTemporalLayers:1},e.optimizationMode,r,[rt.SCREEN_TRACK]);if(!a)return o.onSuccess(u.getTrackId()),me.info("create screen video track success","video:",u.getTrackId()),u;const h=new Rr(a,void 0,R(8,"track-scr-a-"),!1);return o.onSuccess([u.getTrackId(),h.getTrackId()]),me.info("create screen video track success","video:",u.getTrackId(),"audio:",h.getTrackId()),[u,h]}function Po(e,t,i,r){i.optimizationMode&&(r&&r.width&&r.height?(i.encoderConfig=Nt(Nt({},r),{},{bitrateMin:r.bitrateMin,bitrateMax:r.bitrateMax}),"motion"!==i.optimizationMode&&"detail"!==i.optimizationMode||(t.contentHint=i.optimizationMode,t.contentHint===i.optimizationMode?me.debug("[".concat(e,"] set content hint to"),i.optimizationMode):me.debug("[".concat(e,"] set content hint failed")))):me.warning("[".concat(e,"] can not apply optimization mode bitrate config, no encoderConfig")))}var Vo,xo,Uo,Wo,Zo,Bo,Fo,Go,Ko,Ho,Yo,Xo,zo;class jo extends Lt{getUserId(){return this._userId}constructor(e,t,i,r){super(e,"track-".concat(e.kind,"-").concat(t,"-").concat(r.clientId,"_").concat(R(5,""))),Ct(this,"_userId",void 0),Ct(this,"_uintId",void 0),Ct(this,"_isDestroyed",!1),Ct(this,"store",void 0),Ct(this,"processor",void 0),Ct(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,me.info("[".concat(this.getTrackId(),"] is destroyed")),this.stop(),super.close()}getProcessorStats(){return this.processorContext.gatherStats()}getProcessorUsage(){return this.processorContext.gatherUsage()}}let Qo=(Vo=fe({argsMap:(e,t,i)=>[e.getTrackId(),"string"==typeof t?t:t instanceof HTMLVideoElement?"HTMLVideoElement":"HTMLElement",i]}),xo=fe({argsMap:e=>[e.getTrackId()]}),Uo=fe({argsMap:(e,t)=>[e.getTrackId(),t.name]}),Wo=fe({argsMap:e=>[e.getTrackId()]}),wt((Zo=class extends jo{get isPlaying(){return!(!this._player||this._player.videoElementStatus!==kt.PLAYING)}get __className__(){return"RemoteVideoTrack"}constructor(e,t,i,r,o){super(e,t,i,r),Ct(this,"_videoVisibleTimer",null),Ct(this,"_previousVideoVisibleStatus",void 0),Ct(this,"_clearPreviousVideoVisibleStatus",(()=>this._previousVideoVisibleStatus=void 0)),Ct(this,"trackMediaType",ht.VIDEO),Ct(this,"_videoWidth",void 0),Ct(this,"_videoHeight",void 0),Ct(this,"_player",void 0),Ct(this,"_prePlayer",void 0),Ct(this,"processorDestination",void 0),Ct(this,"processorContext",void 0),this._prePlayer=o,this.updateMediaStreamTrackResolution(),this.processorContext=new yi(this.getTrackId(),"remote"),this.processorDestination=new Ei(this.processorContext),this.bindProcessorDestinationEvents()}getStats(){w((()=>{me.warning("[deprecated] RemoteVideoTrack.getStats will be removed in the future, use AgoraRTCClient.getRemoteVideoStats instead")}),"remoteVideoTrackGetStatsWarning");return ee(this,it.GET_STATS)||Nt({},vt)}play(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.safeEmit(ut.PLAY_START),"string"==typeof e){const t=document.getElementById(e);t?e=t:(me.warning("[".concat(this.getTrackId(),'] can not find "#').concat(e,'" element, use document.body')),e=document.body)}me.debug("[".concat(this.getTrackId(),"] start video playback in ").concat(e instanceof HTMLVideoElement?"HTMLVideoElement":"HTMLElement"),JSON.stringify(t));const i=Nt(Nt({fit:"cover"},t),{},{trackId:this.getTrackId(),element:e});if(this._player)this._player.updateConfig(i);else{let t=!1,r=!1;const o=this._prePlayer&&!this._prePlayer.isDestroyed&&e===this._prePlayer.config.element;this._prePlayer&&!o&&(this._prePlayer.destroy(),r=!0),o?(this._player=this._prePlayer,t=this._player.videoState>0,this._player.updateConfig(i)):this._player=e instanceof HTMLVideoElement?new Lr(i):new Vr(i),this._prePlayer=void 0,this._player.updateVideoTrack(this._mediaStreamTrack),this._player.onFirstVideoFrameDecoded=()=>{this.store.subscribe(this.getUserId(),"video",void 0,void 0,Date.now()),this.safeEmit(ut.FIRST_FRAME_DECODED),r&&this.safeEmit(ut.FIRST_FRAME_RENDER)},this._player.onVideoStateChanged=e=>{this.safeEmit(ut.VIDEO_STATE_CHANGED,e)},t&&(this._player.onFirstVideoFrameDecoded(),this._player.onVideoStateChanged(this._player.videoState))}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(ut.VIDEO_ELEMENT_VISIBLE_STATUS,e)}catch(e){}}),u("CHECK_VIDEO_VISIBLE_INTERVAL")),this.safeEmit(ut.PLAY_END)}stop(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this._player&&(this._videoVisibleTimer&&(window.clearInterval(this._videoVisibleTimer),this._videoVisibleTimer=null),this._clearPreviousVideoVisibleStatus(),this._player.destroy(e),this._player=void 0,me.debug("[".concat(this.getTrackId(),"] stop video playback")))}getCurrentFrameData(){return this._player?this._player.getCurrentFrame():new ImageData(2,2)}updateMediaStreamTrackResolution(){Ai(this._originMediaStreamTrack).then((e=>{let t=Ot(e,2),i=t[0],r=t[1];this._videoHeight=r,this._videoWidth=i})).catch(z)}_updatePlayerSource(){me.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},o=r.element,s=r.slot;if(this.isPlaying&&o instanceof HTMLVideoElement&&s instanceof HTMLElement){const e=ue.checkOneElementVisible(o),t=Object.assign({},e);if(t.visible!==this._previousVideoVisibleStatus){this._previousVideoVisibleStatus=t.visible;const e=ge.reportApiInvoke(null,{tag:C.TRACER,name:D.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 b(k.GET_VIDEO_ELEMENT_VISIBLE_ERROR,e.message)}}pipe(e){if(this.processor===e)return e;if(e._source)throw new b(k.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(Tt.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(Tt.ON_TRACK)}_destroy(){this._prePlayer&&(this._prePlayer.destroy(),this._prePlayer=void 0),super._destroy(),this.unbindProcessorDestinationEvents()}_onSei(e){this.emit(ct.SEI_RECEIVED,e)}}).prototype,"play",[Vo],Object.getOwnPropertyDescriptor(Zo.prototype,"play"),Zo.prototype),wt(Zo.prototype,"stop",[xo],Object.getOwnPropertyDescriptor(Zo.prototype,"stop"),Zo.prototype),wt(Zo.prototype,"pipe",[Uo],Object.getOwnPropertyDescriptor(Zo.prototype,"pipe"),Zo.prototype),wt(Zo.prototype,"unpipe",[Wo],Object.getOwnPropertyDescriptor(Zo.prototype,"unpipe"),Zo.prototype),Zo),Jo=(Bo=fe({argsMap:(e,t)=>[e.getTrackId(),t],throttleTime:300}),Fo=fe({argsMap:(e,t)=>[e.getTrackId(),t],throttleTime:300}),Go=fe({argsMap:(e,t)=>[e.getTrackId(),t]}),Ko=fe({argsMap:e=>[e.getTrackId()]}),Ho=fe({argsMap:e=>[e.getTrackId()]}),Yo=fe({argsMap:(e,t)=>[e.getTrackId(),t.name]}),Xo=fe({argsMap:e=>[e.getTrackId()]}),wt((zo=class extends jo{get isPlaying(){return this._useAudioElement?vi.isPlaying(this.getTrackId()):this._source.isPlayed}get __className__(){return"RemoteAudioTrack"}constructor(e,t,i,r){super(e,t,i,r),Ct(this,"trackMediaType",ht.AUDIO),Ct(this,"_source",void 0),Ct(this,"_useAudioElement",!0),Ct(this,"_volume",100),Ct(this,"processorContext",void 0),Ct(this,"processorDestination",void 0),Ct(this,"_played",!1),Ct(this,"_bypassWebAudio",!1),u("DISABLE_WEBAUDIO")?(this._source=new ki,this._bypassWebAudio=!0,this._useAudioElement=!0):(this._source=new ei(e,!0),u("REMOTE_AUDIO_TRACK_USES_WEB_AUDIO")&&(this._useAudioElement=!1)),this._source.once(lt.RECEIVE_TRACK_BUFFER,(()=>{this.safeEmit(ut.FIRST_FRAME_DECODED)})),this.processorContext=new bi(this._source.context,this.getTrackId(),"remote"),this.processorDestination=new Si(this.processorContext),this.bindProcessorDestinationEvents(),this._source.on(lt.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(lt.ON_AUDIO_BUFFER),void this._source.stopGetAudioBuffer();this._source.startGetAudioBuffer(t),this._source.removeAllListeners(lt.ON_AUDIO_BUFFER),this._source.on(lt.ON_AUDIO_BUFFER,(t=>e(t)))}setVolume(e){this._volume=e,this._useAudioElement?vi.setVolume(this.getTrackId(),e):this._source.setVolume(e/100)}setAmplifiedVolume(e){this._useAudioElement&&this._played&&(vi.stop(this.getTrackId()),this._source.play()),this._useAudioElement=!1,e=Math.min(e,u("MAX_WEBAUDIO_VOLUME")),this._volume=e,this._source.setVolume(e/100)}async setPlaybackDevice(e){if(!this._useAudioElement||!Se())throw new b(k.NOT_SUPPORTED,"your browser does not support setting the audio output device");await vi.setSinkID(this.getTrackId(),e)}getVolumeLevel(){return this._source.getAccurateVolumeLevel()}getVolume(){return this._useAudioElement?vi.getVolume(this.getTrackId()):this._source instanceof ei?this._source.getAudioVolume():0}getStats(){w((()=>{me.warning("[deprecated] RemoteAudioTrack.getStats will be removed in the future, use AgoraRTCClient.getRemoteAudioStats instead")}),"remoteAudioTrackGetStatsWarning");return ee(this,it.GET_STATS)||Nt({},_t)}play(){me.debug("[".concat(this.getTrackId(),"] start audio playback")),this._played=!0,this._useAudioElement?(me.debug("[".concat(this.getTrackId(),"] use audio element to play")),vi.play(this._mediaStreamTrack,this.getTrackId(),this._volume,this.store.sessionId||void 0)):(me.debug("[".concat(this.getTrackId(),"] use audio context to play")),this._source.play())}stop(){me.debug("[".concat(this.getTrackId(),"] stop audio playback")),this._played=!1,this._useAudioElement?vi.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];me.debug("[".concat(this.getTrackId(),"] update player source track")),e&&this._source.updateTrack(this._mediaStreamTrack),this._useAudioElement&&vi.updateTrack(this.getTrackId(),this._mediaStreamTrack)}pipe(e){if(this._bypassWebAudio)throw new b(k.NOT_SUPPORTED,"can not pipe extension when WebAudio disabled");if(this.processor===e)return e;if(e._source)throw new b(k.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 b(k.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(Tt.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(Tt.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(Tt.ON_TRACK),this.processorDestination.removeAllListeners(Tt.ON_NODE)}}).prototype,"setVolume",[Bo],Object.getOwnPropertyDescriptor(zo.prototype,"setVolume"),zo.prototype),wt(zo.prototype,"setAmplifiedVolume",[Fo],Object.getOwnPropertyDescriptor(zo.prototype,"setAmplifiedVolume"),zo.prototype),wt(zo.prototype,"setPlaybackDevice",[Go],Object.getOwnPropertyDescriptor(zo.prototype,"setPlaybackDevice"),zo.prototype),wt(zo.prototype,"play",[Ko],Object.getOwnPropertyDescriptor(zo.prototype,"play"),zo.prototype),wt(zo.prototype,"stop",[Ho],Object.getOwnPropertyDescriptor(zo.prototype,"stop"),zo.prototype),wt(zo.prototype,"pipe",[Yo],Object.getOwnPropertyDescriptor(zo.prototype,"pipe"),zo.prototype),wt(zo.prototype,"unpipe",[Xo],Object.getOwnPropertyDescriptor(zo.prototype,"unpipe"),zo.prototype),zo);const qo=new class extends A{get visibility(){return document.visibilityState}get lastHiddenTime(){return this._lastHiddenTime}get lastVisibleTime(){return this._lastVisibleTime}constructor(){super(),Ct(this,"_lastHiddenTime",0),Ct(this,"_lastVisibleTime",0),Ct(this,"needUploadStats",[]),Ct(this,"isCollectingStats",!1),document.addEventListener("visibilitychange",(()=>{"hidden"===document.visibilityState?this._lastHiddenTime=performance.now():this._lastVisibleTime=performance.now(),this.isCollectingStats&&this.needUploadStats.push("visible"===document.visibilityState?1:0),me.debug("current web page is ".concat(document.visibilityState)),this.emit("VISIBILITY_CHANGE",document.visibilityState)}))}startCollectStats(){this.isCollectingStats=!0,this.needUploadStats.push("visible"===this.visibility?1:0)}stopCollectStats(){this.isCollectingStats=!1,this.needUploadStats.length=0}};class $o extends A{constructor(e,t){super(),Ct(this,"trackMediaType",ht.DATA),Ct(this,"_version",1),Ct(this,"_type",3),Ct(this,"_config",void 0),Ct(this,"_originDataChannel",void 0),Ct(this,"_dataStreamPacketHeader",new ArrayBuffer(4)),Ct(this,"_dataStreamPacketHandler",{serialize:e=>e,deserialize:e=>e}),Ct(this,"_datachannelEventMap",new Map),this._config=e,t&&(this._originDataChannel=t,this._bandDataChannelEvents(t)),this._initPacketHeader()}useDataStream(e){this._dataStreamPacketHandler=e}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 b(k.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 b(k.DATACHANNEL_CONNECTION_TIMEOUT)}}else t(new b(k.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),[Rt.OPEN,Rt.CLOSE,Rt.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=Ot(t,2),r=i[0],o=i[1];e.removeEventListener(r,o)})),this._datachannelEventMap.clear()}}class es extends $o{constructor(e){super(e),Ct(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")&&me.debug("invalid datachannel id: ".concat(i," !== ").concat(this.id)));let r=e.data.slice(this._dataStreamPacketHeader.byteLength);r=this._dataStreamPacketHandler.deserialize(r),this.emit(Rt.MESSAGE,r)}}_updateDataChannelConfig(e){this._config=e}_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 ts extends $o{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 is(){const e=new Blob([atob("ZnVuY3Rpb24gdCh0LGUsbil7cmV0dXJuKGU9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9dHlwZW9mIHR8fCF0KXJldHVybiB0O3ZhciBuPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1uKXt2YXIgcj1uLmNhbGwodCxlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWU/U3RyaW5nOk51bWJlcikodCl9KHQsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgZT9lOmUrIiJ9KGUpKWluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09bix0fWZ1bmN0aW9uIGUodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWNvbnN0IG49InZpZGVvL2gyNjQiLHI9InZpZGVvL2gyNjUiO2Z1bmN0aW9uIGEodCxlLG4pe2xldCByPW5ldyBVaW50OEFycmF5KHQsZSxuKSxhPVtdLG89MDtmb3IoO2EubGVuZ3RoPG47KW8rMzxuJiYwPT09cltvXSYmMD09PXJbbysxXSYmMz09PXJbbysyXSYmKDA9PT1yW28rM118fDE9PT1yW28rM118fDI9PT1yW28rM118fDM9PT1yW28rM10pPyhhLnB1c2gocltvXSxyW28rMV0scltvKzNdKSxvKz00KTooYS5wdXNoKHJbb10pLG8rKyk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGEpfWZ1bmN0aW9uIG8odCxlKXtzd2l0Y2goZSl7Y2FzZSBuOnJldHVybiBmdW5jdGlvbih0KXtjb25zdCBlPW5ldyBEYXRhVmlldyh0LmRhdGEpO2xldCBuPTA7Zm9yKDtuKzQ8dC5kYXRhLmJ5dGVMZW5ndGg7KXtpZigwPT09ZS5nZXRVaW50OChuKzApJiYwPT09ZS5nZXRVaW50OChuKzEpJiYwPT09ZS5nZXRVaW50OChuKzIpJiYxPT09ZS5nZXRVaW50OChuKzMpJiY2PT09ZS5nZXRVaW50OChuKzQpKXtsZXQgcj1uKzYsbz0wLGk9MDtmb3IoOzI1NT09PShpPWUuZ2V0VWludDgocisrKSk7KW8rPTI1NTtvKz1pO2NvbnN0IHM9YSh0LmRhdGEscixvKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkocyl9bisrfXJldHVybiBudWxsfSh0KTtjYXNlIHI6cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0IGU9bmV3IERhdGFWaWV3KHQuZGF0YSk7bGV0IG49MDtmb3IoO24rNTx0LmRhdGEuYnl0ZUxlbmd0aDspe2lmKDA9PT1lLmdldFVpbnQ4KG4rMCkmJjA9PT1lLmdldFVpbnQ4KG4rMSkmJjA9PT1lLmdldFVpbnQ4KG4rMikmJjE9PT1lLmdldFVpbnQ4KG4rMykmJjc4PT09ZS5nZXRVaW50OChuKzQpJiYxPT09ZS5nZXRVaW50OChuKzUpJiYxMDE9PT1lLmdldFVpbnQ4KG4rNikpe2xldCByPW4rNyxvPTAsaT0wO2Zvcig7MjU1PT09KGk9ZS5nZXRVaW50OChyKyspKTspbys9MjU1O28rPWk7Y29uc3Qgcz1hKHQuZGF0YSxyLG8pO3JldHVybiBuZXcgVWludDhBcnJheShzKX1uKyt9cmV0dXJuIG51bGx9KHQpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGkodCl7Y29uc3QgZT10Lmxlbmd0aDtsZXQgbj1bXSxyPTA7Zm9yKDtyPGU7KXIrMjxlJiYwPT09dFtyXSYmMD09PXRbcisxXSYmKDA9PT10W3IrMl18fDE9PT10W3IrMl18fDI9PT10W3IrMl18fDM9PT10W3IrMl0pPyhuLnB1c2godFtyXSx0W3IrMV0sMyx0W3IrMl0pLHIrPTMpOihuLnB1c2godFtyXSkscisrKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkobil9ZnVuY3Rpb24gcyh0LGUsYSl7c3dpdGNoKGEpe2Nhc2UgbjpyZXR1cm4gZnVuY3Rpb24odCxlKXtjb25zdCBuPWkoZSkscj1uLmxlbmd0aCxhPU1hdGguZmxvb3Ioci8yNTUpLG89ciUyNTUscz1uZXcgVWludDhBcnJheSg2K2ErMStyK3QuYnl0ZUxlbmd0aCk7c1swXT0wLHNbMV09MCxzWzJdPTAsc1szXT0xLHNbNF09NixzWzVdPTEwMTtsZXQgZj0wO2Zvcig7ZjxhOylzWzYrZl09MjU1LGYrKztyZXR1cm4gc1s2K2ZdPW8sZisrLHMuc2V0KG4sNitmKSxzLnNldChuZXcgVWludDhBcnJheSh0KSw2K2Yrcikscy5idWZmZXJ9KHQsZSk7Y2FzZSByOnJldHVybiBmdW5jdGlvbih0LGUpe2NvbnN0IG49aShlKSxyPW4ubGVuZ3RoLGE9TWF0aC5mbG9vcihyLzI1NSksbz1yJTI1NSxzPW5ldyBVaW50OEFycmF5KDcrYSsxK3IrMSt0LmJ5dGVMZW5ndGgpO3NbMF09MCxzWzFdPTAsc1syXT0wLHNbM109MSxzWzRdPTc4LHNbNV09MSxzWzZdPTEwMTtsZXQgZj0wO2Zvcig7ZjxhOylzWzcrZl09MjU1LGYrKztyZXR1cm4gc1s3K2ZdPW8sZisrLHMuc2V0KG4sNytmKSxmKz1yLHNbNytmXT0xMjgsZisrLHMuc2V0KG5ldyBVaW50OEFycmF5KHQpLDcrZikscy5idWZmZXJ9KHQsZSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gZih0KXtpZih0Lmxlbmd0aDw1KXJldHVybiIiO2xldCBlPS0xO2ZvcihsZXQgbj0wO248dC5sZW5ndGgtMztuKyspe2lmKDA9PT10W25dJiYwPT09dFtuKzFdJiYxPT09dFtuKzJdKXtlPW47YnJlYWt9aWYobjx0Lmxlbmd0aC00JiYwPT09dFtuXSYmMD09PXRbbisxXSYmMD09PXRbbisyXSYmMT09PXRbbiszXSl7ZT1uO2JyZWFrfX1pZigtMT09PWUpcmV0dXJuIiI7Y29uc3QgYT1lKygwPT09dFtlKzJdPzQ6Myk7aWYoYT49dC5sZW5ndGgpcmV0dXJuIiI7Y29uc3Qgbz10W2FdO2lmKDEyOCZvKXJldHVybiIiO2lmKChvPj4xJjYzKT49MzIpcmV0dXJuIHI7aWYoYSsxPHQubGVuZ3RoKXtpZigwPT0oMjQ4JnRbYSsxXSkpcmV0dXJuIHJ9cmV0dXJuKDMxJm8pPD0zMT9uOiIifWNvbnN0IGw9NzEsdT0xLGM9MixnPTEscD0yO3ZhciBkPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuQVVESU9fTEVWRUw9MV09IkFVRElPX0xFVkVMIix0W3QuTUVUQURBVEE9Ml09Ik1FVEFEQVRBIix0W3QuQVVESU9fNjRfQklUX1BUUz0zXT0iQVVESU9fNjRfQklUX1BUUyIsdH0oZHx8e30pO2Z1bmN0aW9uIGgodCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBuPXQuZ2V0VWludDgoMCk7aWYobiE9PWwpcmV0dXJuO2NvbnN0IHI9dC5nZXRVaW50MTYoMSksYT11K2MrcixvPW5ldyBVaW50OEFycmF5KHQuYnl0ZUxlbmd0aC1hKTtvLnNldChuZXcgVWludDhBcnJheSh0LmJ1ZmZlcixhLHQuYnl0ZUxlbmd0aC1hKSk7Y29uc3QgaT17bTpuLHRsdkxlbjpyLHRsdjpbXSxmcmFtZTpvfTtsZXQgcz11K2M7Zm9yKDtzPGE7KXtjb25zdCBuPXQuZ2V0VWludDgocykscj10LmdldFVpbnQxNihzK2cpLGE9ZytwO2lmKG49PT1kLkFVRElPX0xFVkVMKXtsZXQgbz10LmdldFVpbnQ4KHMrYSk7Zm9yKGxldCBlPTE7ZTxyO2UrKylvPW88PDh8dC5nZXRVaW50OChzK2ErZSk7aS50bHYucHVzaCh7dGFnOm4sbGVuZ3RoOnIsdmFsdWU6ZT8xMjdebz4+MToxMjcmb30pfWVsc2UgaWYobj09PWQuTUVUQURBVEF8fG49PT1kLkFVRElPXzY0X0JJVF9QVFMpe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkocik7Zm9yKGxldCBuPTA7bjxyO24rKyllW25dPXQuZ2V0VWludDgocythK24pO2kudGx2LnB1c2goe3RhZzpuLGxlbmd0aDpyLHZhbHVlOmV9KX1zKz1hK3J9cmV0dXJuIGl9c2VsZi5vbnJ0Y3RyYW5zZm9ybT1uPT57Y29uc3Qgcj1uLnRyYW5zZm9ybWVyLGE9W10saT1bXTtsZXQgeT1udWxsO3Iub3B0aW9ucy5wb3J0Lm9ubWVzc2FnZT10PT57dC5kYXRhLnNlaSYmYS5wdXNoKHQuZGF0YS5zZWkpLHQuZGF0YS5tZXRhZGF0YSYmaS5wdXNoKHQuZGF0YS5tZXRhZGF0YSl9LHNlbGYucG9zdE1lc3NhZ2UoInN0YXJ0ZWQiKTtjb25zdCBVPXIucmVhZGFibGUuZ2V0UmVhZGVyKCksYj1yLndyaXRhYmxlLmdldFdyaXRlcigpOyJzZWktcngiPT09ci5vcHRpb25zLm5hbWU/ZnVuY3Rpb24gbihyKXtVLnJlYWQoKS50aGVuKChhPT57aWYoIWEuZG9uZSl7aWYoYS52YWx1ZSBpbnN0YW5jZW9mIFJUQ0VuY29kZWRWaWRlb0ZyYW1lKXtjb25zdCBuPWYobmV3IFVpbnQ4QXJyYXkoYS52YWx1ZS5kYXRhKSksaT1vKGEudmFsdWUsbik7aWYoaSYmci5vcHRpb25zLnBvcnQucG9zdE1lc3NhZ2Uoe3NlaTppfSksIXkpe2NvbnN0IG49YS52YWx1ZS5nZXRNZXRhZGF0YSgpfHx7fTt5PWZ1bmN0aW9uKG4pe2Zvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3ZhciBhPW51bGwhPWFyZ3VtZW50c1tyXT9hcmd1bWVudHNbcl06e307ciUyP2UoT2JqZWN0KGEpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0KG4sZSxhW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGEpKTplKE9iamVjdChhKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsdCkpfSkpfXJldHVybiBufSh7dHlwZTphLnZhbHVlLnR5cGUscnRwVGltZXN0YW1wOmEudmFsdWUudGltZXN0YW1wLHBheWxvYWRUeXBlOm4ucGF5bG9hZFR5cGV8fDAsc3NyYzpuLnN5bmNocm9uaXphdGlvblNvdXJjZXx8MCxsZW5ndGg6YS52YWx1ZS5kYXRhLmJ5dGVMZW5ndGh9LCJtaW1lVHlwZSJpbiBuP3ttaW1lVHlwZTpuLm1pbWVUeXBlfTp7fSksci5vcHRpb25zLnBvcnQucG9zdE1lc3NhZ2Uoe2ZpcnN0RnJhbWVJbmZvOnl9KX19Yi53cml0ZShhLnZhbHVlKSxyLm9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZSh7dHJhbnNmb3JtZWQ6ITB9KSxuKHIpfX0pKX0ocik6InNlaS10eCI9PT1yLm9wdGlvbnMubmFtZT9mdW5jdGlvbiB0KGUpe1UucmVhZCgpLnRoZW4oKG49PntpZighbi5kb25lKXtpZihuLnZhbHVlIGluc3RhbmNlb2YgUlRDRW5jb2RlZFZpZGVvRnJhbWUpe2NvbnN0IHQ9ZihuZXcgVWludDhBcnJheShuLnZhbHVlLmRhdGEpKSxlPWEuc2hpZnQoKTtpZihlKXtjb25zdCByPXMobi52YWx1ZS5kYXRhLGUsdCk7ciYmKG4udmFsdWUuZGF0YT1yKX19Yi53cml0ZShuLnZhbHVlKSxlLm9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZSh7dHJhbnNmb3JtZWQ6ITB9KSx0KGUpfX0pKX0ocik6ImF1ZGlvLW1ldGFkYXRhLXJ4Ij09PXIub3B0aW9ucy5uYW1lP2Z1bmN0aW9uIHQoZSl7VS5yZWFkKCkudGhlbigobj0+e2lmKCFuLmRvbmUpe2lmKG4udmFsdWUgaW5zdGFuY2VvZiBSVENFbmNvZGVkQXVkaW9GcmFtZSl7Y29uc3QgdD1uZXcgRGF0YVZpZXcobi52YWx1ZS5kYXRhKSxyPXQuZ2V0VWludDgoMCk7bGV0IGE7aWYoMCE9KDEyOCZyKSYmNzEhPT1yKXtjb25zdCBlPWZ1bmN0aW9uKHQpe2lmKHQuYnl0ZUxlbmd0aDw9MClyZXR1cm5bXTtjb25zdCBlPVtdO2xldCBuPTA7Zm9yKDtuPHQuYnl0ZUxlbmd0aDspe2NvbnN0IHI9KDEyOCZ0LmdldFVpbnQ4KG4pKT4+NyxhPTEyNyZ0LmdldFVpbnQ4KG4pO2lmKCEociYmbis0PD10LmJ5dGVMZW5ndGgpKXtuKys7YnJlYWt9e2NvbnN0IHI9dC5nZXRVaW50MzIobiwhMSksbz0oMTY3NzYxOTImcik+PjEwLGk9MTAyMyZyO2UucHVzaCh7cHQ6YSx0c19vZmZzZXQ6byxsZW5ndGg6aSxkYXRhOm5ldyBVaW50OEFycmF5fSksbis9NH19bGV0IHI9dC5ieXRlTGVuZ3RoLW47Zm9yKGNvbnN0IGEgb2YgZSl7aWYoYS5sZW5ndGg+cilyZXR1cm4gY29uc29sZS53YXJuKCJCcm9rZW4gcmVkIHBheWxvYWQiKSxbXTthLmxlbmd0aD4wJiYoYS5kYXRhPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtuLGEubGVuZ3RoKSxuKz1hLmxlbmd0aCxyLT1hLmxlbmd0aCl9aWYocj4wKXtjb25zdCBhPXtwdDplLmxlbmd0aD4wP2VbZS5sZW5ndGgtMV0ucHQ6MCx0c19vZmZzZXQ6MCxsZW5ndGg6cixkYXRhOm5ldyBVaW50OEFycmF5KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtuLHIpfTtlLnB1c2goYSl9cmV0dXJuIGV9KHQpO2lmKGUubGVuZ3RoPjApe2NvbnN0IHQ9ZnVuY3Rpb24odCl7bGV0IGU9MDtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyllKz1uPHQubGVuZ3RoLTE/NDoxLGUrPXRbbl0ubGVuZ3RoO2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoZSk7bGV0IHI9MDtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZihlPHQubGVuZ3RoLTEpe2NvbnN0IGE9KDIxNDc0ODM2NDh8KDEyNyZ0W2VdLnB0KTw8MjR8KDI2MjE0MyZ0W2VdLnRzX29mZnNldCk8PDEwfDEwMjMmdFtlXS5sZW5ndGgpPj4+MDtuW3IrK109YT4+MjQmMjU1LG5bcisrXT1hPj4xNiYyNTUsbltyKytdPWE+PjgmMjU1LG5bcisrXT0yNTUmYX1lbHNlIG5bcisrXT0xMjcmdFtlXS5wdDtmb3IoY29uc3QgZSBvZiB0KW4uc2V0KGUuZGF0YSxyKSxyKz1lLmxlbmd0aDtyZXR1cm4gbn0oZS5tYXAoKHQ9Pntjb25zdCBlPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtlLnNldCh0LmRhdGEpO2NvbnN0IG49aChuZXcgRGF0YVZpZXcoZS5idWZmZXIpKTtyZXR1cm4gbnVsbCE9biYmbi5mcmFtZSYmKHQuZGF0YT1udWxsPT1uP3ZvaWQgMDpuLmZyYW1lKSxhPW4sdH0pKSk7bi52YWx1ZS5kYXRhPXQuYnVmZmVyfX1lbHNlIGE9aCh0KSxhJiYobi52YWx1ZS5kYXRhPWEuZnJhbWUuYnVmZmVyKTtpZihhKXtsZXQgdD1hLnRsdi5maW5kKCh0PT50LnRhZz09PWQuTUVUQURBVEEpKTtpZih0JiZ0LnZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSYmZS5vcHRpb25zLnBvcnQucG9zdE1lc3NhZ2Uoe21ldGFkYXRhOnQudmFsdWV9KSx0PWEudGx2LmZpbmQoKHQ9PnQudGFnPT09ZC5BVURJT182NF9CSVRfUFRTKSksdCYmdC52YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJjg9PXQudmFsdWUubGVuZ3RoKXtjb25zdCBuPW5ldyBEYXRhVmlldyh0LnZhbHVlLmJ1ZmZlcikuZ2V0QmlnVWludDY0KDAsITApO3QmJnQudmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5JiZlLm9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZSh7cHRzOm59KX19fWIud3JpdGUobi52YWx1ZSksZS5vcHRpb25zLnBvcnQucG9zdE1lc3NhZ2Uoe3RyYW5zZm9ybWVkOiEwfSksdChlKX19KSl9KHIpOiJhdWRpby1tZXRhZGF0YS10eCI9PT1yLm9wdGlvbnMubmFtZSYmZnVuY3Rpb24gdChlKXtVLnJlYWQoKS50aGVuKChuPT57aWYoIW4uZG9uZSl7aWYoZS5vcHRpb25zLnBvcnQucG9zdE1lc3NhZ2Uoe2dldE1ldGFkYXRhOiEwfSksbi52YWx1ZSBpbnN0YW5jZW9mIFJUQ0VuY29kZWRBdWRpb0ZyYW1lKXtjb25zdCB0PWkuc2hpZnQoKTt0JiYobi52YWx1ZS5kYXRhPWZ1bmN0aW9uKHQsZSxuKXtjb25zdCByPW4uYnl0ZUxlbmd0aCxhPXIrZytwLG89dStjK2EsaT1uZXcgQXJyYXlCdWZmZXIodC5ieXRlTGVuZ3RoK28pLHM9bmV3IERhdGFWaWV3KGkpO3Muc2V0VWludDgoMCxsKSxzLnNldFVpbnQxNigxLGEpLHMuc2V0VWludDgoMyxlKSxzLnNldFVpbnQxNig0LHIpO2ZvcihsZXQgdD0wO3Q8cjt0Kyspcy5zZXRVaW50OCg2K3Qsblt0XSk7Y29uc3QgZj1uZXcgVWludDhBcnJheShzLmJ1ZmZlcik7cmV0dXJuIGYuc2V0KG5ldyBVaW50OEFycmF5KHQpLG8pLGYuYnVmZmVyfShuLnZhbHVlLmRhdGEsZC5BVURJT182NF9CSVRfUFRTLHQpKX1iLndyaXRlKG4udmFsdWUpLGUub3B0aW9ucy5wb3J0LnBvc3RNZXNzYWdlKHt0cmFuc2Zvcm1lZDohMH0pLHQoZSl9fSkpfShyKX0sc2VsZi5wb3N0TWVzc2FnZSgicmVnaXN0ZXJlZCIpOwo=")],{type:"text/javascript"});return setTimeout((()=>URL.revokeObjectURL(e)),0),new Worker(URL.createObjectURL(e))}const rs=71,os=1,ss=2,ns=1,as=2;var cs=function(e){return e[e.AUDIO_LEVEL=1]="AUDIO_LEVEL",e[e.METADATA=2]="METADATA",e[e.AUDIO_64_BIT_PTS=3]="AUDIO_64_BIT_PTS",e}(cs||{});function ds(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=e.getUint8(0);if(i!==rs)return;const r=e.getUint16(1),o=os+ss+r,s=new Uint8Array(e.byteLength-o);s.set(new Uint8Array(e.buffer,o,e.byteLength-o));const n={m:i,tlvLen:r,tlv:[],frame:s};let a=os+ss;for(;a<o;){const i=e.getUint8(a),r=e.getUint16(a+ns),o=ns+as;if(i===cs.AUDIO_LEVEL){let s=e.getUint8(a+o);for(let t=1;t<r;t++)s=s<<8|e.getUint8(a+o+t);n.tlv.push({tag:i,length:r,value:t?127^s>>1:127&s})}else if(i===cs.METADATA||i===cs.AUDIO_64_BIT_PTS){const t=new Uint8Array(r);for(let i=0;i<r;i++)t[i]=e.getUint8(a+o+i);n.tlv.push({tag:i,length:r,value:t})}a+=o+r}return n}const us=new Map;function hs(e,t){const i=t.chunk,r=t.controller,o=cs.METADATA;i.data=function(e,t,i){const r=i.byteLength,o=r+ns+as,s=os+ss+o,n=new ArrayBuffer(e.byteLength+s),a=new DataView(n);a.setUint8(0,rs),a.setUint16(1,o),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),s),c.buffer}(i.data,o,e),r.enqueue(i)}async function ls(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!ye().supportWebRTCEncodedTransform)return void me.warning("browser not support audio encoded transform");if(us.has(e))return;if(!e.track)return;const i={track:e.track};if(p()){if(!e.createEncodedStreams)return void me.warning("browser not support createEncodedStreams() API");let o=null;try{o=e.createEncodedStreams()}catch(e){return void me.error("create audio-encoded-streams error",e&&e.message)}const s=new TransformStream({transform(o,s){i.controller||(i.controller=s),e.track&&e.track.id!==i.track.id&&(me.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?hs(n,{sender:e,chunk:o,controller:s}):s.enqueue(o)}});o.readable.pipeThrough(s).pipeTo(o.writable)}else if(c()){if("undefined"==typeof RTCRtpScriptTransform)return void me.warning("browser not support RTCRtpScriptTransform");const o=is(),s=new MessageChannel;await new Promise((e=>o.onmessage=t=>{"registered"===t.data&&e(void 0)}));const n=new RTCRtpScriptTransform(o,{name:"audio-metadata-tx",port:s.port2},[s.port2]);e.transform=n,await new Promise((e=>o.onmessage=t=>{"started"===t.data&&e(void 0)})),s.port1.onmessage=o=>{var n;if(o.data.transformed&&e.track&&(null===(n=e.track)||void 0===n?void 0:n.id)!==i.track.id)me.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);else if(o.data.getMetadata){const e=t.metadata&&t.metadata();e&&s.port1.postMessage({metadata:e})}},i.worker=o}function r(){if(e.track){if(this.id!==e.track.id)return;e.track.removeEventListener("ended",r)}const t=us.get(e);if(t){us.delete(e);try{var i,o;null===(i=t.controller)||void 0===i||i.terminate(),null===(o=t.worker)||void 0===o||o.terminate()}catch(e){me.warning(e&&e.message)}}}us.set(e,i),e.track.addEventListener("ended",r)}const ps=127,ms=1e-10,gs=139/13;const _s=new Map;function fs(e,t,i){const r="".concat(e,"-").concat(t,"-").concat(i);let o=0;if(_s.has(r))o=_s.get(r);else{const s=.5;o=Math.log(function(e,t){const i=e-t;t<i&&(t=i);let r=1;for(let i=e,o=1;i>t;i--,o++)r=r*i/o;return r}(t,e))+e*Math.log(s)+(t-e)*Math.log(1-s)-Math.log(i)+i*e,_s.set(r,o)}return o<ms&&(o=ms),o}function vs(e,t,i){const r=t.length,o=e.length/r;let s=!1;for(let n=0,a=0;n<r;n++){let r=0;for(let t=a+o;a<t;a++)e[a]>i&&r++;t[n]!==r&&(t[n]=r,s=!0)}return s}window.cache=_s;let Ts=0;class Es{constructor(e){Ct(this,"id",void 0),Ct(this,"immediates",[]),Ct(this,"lastNonSilence",-1),Ct(this,"immediateSpeechActivityScore",ms),Ct(this,"lastLevelChangedTime",Date.now()),Ct(this,"levels",[]),Ct(this,"longs",[]),Ct(this,"longSpeechActivityScore",ms),Ct(this,"mediums",[]),Ct(this,"mediumSpeechActivityScore",ms),Ct(this,"minLevel",0),Ct(this,"nextMinLevel",0),Ct(this,"nextMinLevelWindowLength",0),Ct(this,"energyScore",0),this.id=e||"".concat(Ts++),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+gs;let r=!1;for(let o=0;o<e.length;++o){let s=t[o];s<i&&(s=0);const n=Math.floor(s/gs);e[o]!==n&&(e[o]=n,r=!0)}return r}computeLongs(){return vs(this.mediums,this.longs,4)}computeMediums(){return vs(this.immediates,this.mediums,7)}evaluateImmediateSpeechActivityScore(){this.immediateSpeechActivityScore=fs(this.immediates[0],13,.78)}evaluateLongSpeechActivityScore(e){this.longSpeechActivityScore=fs(this.longs[0],10,47),this.longSpeechActivityScore>ms&&(this.lastNonSilence=e)}evaluateMediumSpeechActivityScore(){this.mediumSpeechActivityScore=fs(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>ps&&(i=ps),this.levels.unshift(i),this.levels.length>this.immediates.length&&this.levels.pop(),this.updateMinLevel(i),i>=this.minLevel+gs?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>ps&&(e=ps),this.minLevel=e,this.nextMinLevel=0,this.nextMinLevelWindowLength=0}}}}class ys{constructor(e){Ct(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 Ss{constructor(e,t,i){Ct(this,"isDominant",void 0),Ct(this,"energyRanking",void 0),Ct(this,"energyScore",void 0),this.isDominant=e,this.energyRanking=t,this.energyScore=i}}class bs extends A{constructor(e){super(),Ct(this,"dominantId",null),Ct(this,"lastDecisionTime",0),Ct(this,"lastLevelChangedTime",0),Ct(this,"lastLevelIdleTime",0),Ct(this,"relativeSpeechActivities",[]),Ct(this,"speakers",new Map),Ct(this,"enableSilence",!1),Ct(this,"timeoutToSilenceInterval",0),Ct(this,"decisionMaker",null),Ct(this,"loudest",[]),Ct(this,"numLoudestToTrack",3),Ct(this,"energyExpireTimeMs",250),Ct(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 o=r.levelChanged(t,i);return this.updateLoudestList(r,o,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 Es(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 Ss(r,t,e.energyScore)}if(e.energyScore=Math.floor((this.energyAlphaPct*t+(100-this.energyAlphaPct)*e.energyScore+50)/100),0===this.numLoudestToTrack)return new Ss(r,0,e.energyScore);const o=i-this.energyExpireTimeMs;let s=0;for(;s<this.loudest.length;){const t=this.loudest[s];if(t.getLastLevelChangedTime()<o&&this.loudest.length>=this.numLoudestToTrack)this.loudest.splice(s,1);else if(t.id!==e.id)++s;else if(this.loudest.splice(s,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 Ss(r,n,e.energyScore)}maybeStartDecisionMaker(){!this.decisionMaker&&this.speakers.size>0&&(this.decisionMaker=new ys(this),this.decisionMaker.execute())}makeDecision(e){let t=null,i=null;const r=this.speakers.size;let o=null;if(0===r)o=null;else if(1===r){const t=this.speakers.values().next().value;if(this.enableSilence&&t){o=t.id,t.evaluateSpeechActivityScores(e);e-t.lastNonSilence>this.timeoutToSilenceInterval&&(o=null)}}else{let t=null==this.dominantId?null:this.speakers.get(this.dominantId);if(null==t){const e=this.speakers.entries().next();e.value&&(o=e.value[0],t=e.value[1])}else o=t.id;null!=t&&t.evaluateSpeechActivityScores(e);const i=this.relativeSpeechActivities;let r=2;for(const s of this.speakers.entries()){const n=Ot(s,2),a=n[0],c=n[1];if(c===t)continue;c.evaluateSpeechActivityScores(e);for(let e=0;e<i.length;++e){const r=null==t?ms:t.getSpeechActivityScore(e);i[e]=Math.log(c.getSpeechActivityScore(e)/r)}const d=i[0],u=i[1],h=i[2];d>3&&u>2&&h>0&&u>r&&(r=u,o=a)}if(this.enableSilence&&null!=t&&o===t.id){e-t.lastNonSilence>this.timeoutToSilenceInterval&&(o=null)}}null==o&&!this.enableSilence||o===this.dominantId||(t=this.dominantId,this.dominantId=o,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 ks=new Map;let Is=null,As=null;const Rs=3;let ws=[];function Ds(e,t){let i=ks.get(e);if(i||(i=function(e){const t=new Es;return ks.set(e,t),Is||(Is=new bs(u("TOPN_SILENCE_THRESHOLD")||500),Is.on("ActiveSpeakerChanged",(e=>{null!=e&&(As=e)}))),Is.addSpeakers([t]),t}(e)),ks.size<=Rs)return{selected:!0,speaker:i};if(!Is)throw new Error("no active speaker detector");Is.levelChanged(i.id,t),ws=Is.loudest.map((e=>e.id)),As&&!ws.includes(As)&&ws.length>=Rs&&ws.pop();return{selected:ws.includes(i.id)||i.id===As,speaker:i}}const Cs=1e3,Ms=40,Ns=new Map,Os=new Map;class Ls{get samples(){return this.actives+this.inactives}get activeRate(){return this.actives/this.samples}constructor(e,t){Ct(this,"id",void 0),Ct(this,"track",void 0),Ct(this,"score",0),Ct(this,"active",!0),Ct(this,"muted",!1),Ct(this,"timer",0),Ct(this,"actives",0),Ct(this,"inactives",0),this.id=e,this.track=t,this.setActive(Ns.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 t=function(){const e=[],t=[];return Array.from(Ns.values()).forEach((i=>{i.active?e.push(i):t.push(i)})),{actives:e,inactives:t}}(),i=t.actives,r=t.inactives;if(i.length>3){let e;i.forEach((t=>{(!e||e.score>t.score)&&(e=t)})),e&&e.setActive(!1)}if(i.length<3&&r.length>0){let t;r.forEach((e=>{(!t||t.score<e.score)&&e.id!==this.id&&(t=e)})),t&&e&&!this.active&&(t.samples>Ms&&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(Ns.values()).forEach((i=>{!i.active||i.id===e||i.samples<Ms||(!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(Ns.values()).forEach((i=>{i.active||i.id===e||i.samples<Ms||(!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()}),Cs)}clearTimer(){this.timer&&(clearTimeout(this.timer),this.timer=0)}}let Ps;function Vs(e,t,i){const r=Ns.get(e)||new Ls(e,t);return r.score=i,Ns.set(e,r),function(e){if(Os.set(e,!0),!Ps)return void(Ps=Date.now());const t=Date.now();t-Ps>1e3&&(Os.get(e)?Os.set(e,!1):(xs(e),Os.delete(e)),Ps=t)}(e),r}function xs(e){const t=Ns.get(e);t&&(Ns.delete(e),t.clearTimer())}const Us=new Map,Ws=new Map;function Zs(e,t,i,r){const o=new DataView(e.data),s=o.getUint8(0);let n;if(0!=(128&s)&&71!==s){const t=function(e){if(e.byteLength<=0)return[];const t=[];let i=0;for(;i<e.byteLength;){const r=(128&e.getUint8(i))>>7,o=127&e.getUint8(i);if(!(r&&i+4<=e.byteLength)){i++;break}{const r=e.getUint32(i,!1),s=(16776192&r)>>10,n=1023&r;t.push({pt:o,ts_offset:s,length:n,data:new Uint8Array}),i+=4}}let r=e.byteLength-i;for(const o of t){if(o.length>r)return console.warn("Broken red payload"),[];o.length>0&&(o.data=new Uint8Array(e.buffer,e.byteOffset+i,o.length),i+=o.length,r-=o.length)}if(r>0){const o={pt:t.length>0?t[t.length-1].pt:0,ts_offset:0,length:r,data:new Uint8Array(e.buffer,e.byteOffset+i,r)};t.push(o)}return t}(o);if(t.length>0){const i=function(e){let t=0;for(let i=0;i<e.length;i++)t+=i<e.length-1?4:1,t+=e[i].length;const i=new Uint8Array(t);let r=0;for(let t=0;t<e.length;t++)if(t<e.length-1){const o=(2147483648|(127&e[t].pt)<<24|(262143&e[t].ts_offset)<<10|1023&e[t].length)>>>0;i[r++]=o>>24&255,i[r++]=o>>16&255,i[r++]=o>>8&255,i[r++]=255&o}else i[r++]=127&e[t].pt;for(const t of e)i.set(t.data,r),r+=t.length;return i}(t.map((e=>{const t=new Uint8Array(e.length);t.set(e.data);const i=ds(new DataView(t.buffer));return null!=i&&i.frame&&(e.data=null==i?void 0:i.frame),n=i,e})));e.data=i.buffer}}else n=ds(o),n&&(e.data=n.frame.buffer);if(t.enqueue(e),!n)return;const a=n.tlv.find((e=>e.tag===cs.METADATA));a&&i&&a.value instanceof Uint8Array&&i(a.value);const c=n.tlv.find((e=>e.tag===cs.AUDIO_64_BIT_PTS));if(c&&r&&c.value instanceof Uint8Array&&8==c.value.length){r(new DataView(c.value.buffer).getBigUint64(0,!0))}}async function Bs(e){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!ye().supportWebRTCEncodedTransform)return void me.warning("browser not support audio encoded transform");if(Us.has(e))return;const r={track:e.track,onMetadata:i.onMetadata,onPts:i.onPts};if(p()&&!L()){if(!e.createEncodedStreams)return void me.warning("browser not support createEncodedStreams() API");ce(t.CHROME,87,116)||(i.enableTopn=!1);let s=null;try{s=e.createEncodedStreams()}catch(e){return void me.error("create audio-encoded-streams error",e&&e.message)}const n=new TransformStream({transform(t,s){r.controller||(r.controller=s),e.track&&e.track.id!==r.track.id&&(me.debug("audio track changed: ".concat(r.track.id," => ").concat(e.track.id)),r.track.removeEventListener("ended",o),r.track=e.track,r.track.addEventListener("ended",o)),i.enableTopn?function(e,t,i){var r;const o=ds(new DataView(t.data));if(!o)return i.enqueue(t);const s=e.track.id;Ws.set(s,e.track);const n=null===(r=o.tlv.find((e=>e.tag===cs.AUDIO_LEVEL)))||void 0===r?void 0:r.value;let a=0;"number"==typeof n&&(a=127-n);const c=Ds(e,Math.round(Math.pow(10,a/60)-1)),d=c.selected,u=c.speaker,h=Vs(s,e.track,u.energyScore);h.addSample(d),h.active&&(t.data=o.frame.buffer,i.enqueue(t))}(e,t,s):i.enableMetadata||i.enablePts?Zs(t,s,i.onMetadata,i.onPts):s.enqueue(t)}});s.readable.pipeThrough(n).pipeTo(s.writable)}else{if("undefined"==typeof RTCRtpScriptTransform)return void me.warning("browser not support RTCRtpScriptTransform");const t=is(),i=new MessageChannel;await new Promise((e=>t.onmessage=t=>{"registered"===t.data&&e(void 0)}));const s=new RTCRtpScriptTransform(t,{name:"audio-metadata-rx",port:i.port2},[i.port2]);e.transform=s,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?(me.debug("audio track changed: ".concat(r.track.id," => ").concat(e.track.id)),r.track.removeEventListener("ended",o),r.track=e.track,r.track.addEventListener("ended",o)):t.data.metadata&&r.onMetadata?r.onMetadata(t.data.metadata):t.data.pts&&r.onPts&&r.onPts(t.data.pts)},r.worker=t}function o(){e.track.removeEventListener("ended",o),function(e){const t=Us.get(e);if(t){!function(e){const t=ks.get(e);t&&(ks.delete(e),Is&&(Is.removeSpeakers([t]),0===ks.size&&(Is.destroy(),Is=null)))}(e),xs(e.track.id),Us.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){me.warning(e&&e.message)}}}(e)}Us.set(e,r),e.track.addEventListener("ended",o)}const Fs="video/h264",Gs="video/h265";function Ks(e,t,i){let r=new Uint8Array(e,t,i),o=[],s=0;for(;o.length<i;)s+3<i&&0===r[s]&&0===r[s+1]&&3===r[s+2]&&(0===r[s+3]||1===r[s+3]||2===r[s+3]||3===r[s+3])?(o.push(r[s],r[s+1],r[s+3]),s+=4):(o.push(r[s]),s++);return new Uint8Array(o)}function Hs(e,t){switch(t){case Fs:return function(e){const t=new DataView(e.data);let i=0;for(;i+4<e.data.byteLength;){if(0===t.getUint8(i+0)&&0===t.getUint8(i+1)&&0===t.getUint8(i+2)&&1===t.getUint8(i+3)&&6===t.getUint8(i+4)){let r=i+6,o=0,s=0;for(;255===(s=t.getUint8(r++));)o+=255;o+=s;const n=Ks(e.data,r,o);return new Uint8Array(n)}i++}return null}(e);case Gs:return function(e){const t=new DataView(e.data);let i=0;for(;i+5<e.data.byteLength;){if(0===t.getUint8(i+0)&&0===t.getUint8(i+1)&&0===t.getUint8(i+2)&&1===t.getUint8(i+3)&&78===t.getUint8(i+4)&&1===t.getUint8(i+5)&&101===t.getUint8(i+6)){let r=i+7,o=0,s=0;for(;255===(s=t.getUint8(r++));)o+=255;o+=s;const n=Ks(e.data,r,o);return new Uint8Array(n)}i++}return null}(e);default:return null}}function Ys(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)}function Xs(e,t,i){switch(i){case Fs:return function(e,t){const i=Ys(t),r=i.length,o=Math.floor(r/255),s=r%255,n=new Uint8Array(6+o+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<o;)n[6+a]=255,a++;return n[6+a]=s,a++,n.set(i,6+a),n.set(new Uint8Array(e),6+a+r),n.buffer}(e,t);case Gs:return function(e,t){const i=Ys(t),r=i.length,o=Math.floor(r/255),s=r%255,n=new Uint8Array(7+o+1+r+1+e.byteLength);n[0]=0,n[1]=0,n[2]=0,n[3]=1,n[4]=78,n[5]=1,n[6]=101;let a=0;for(;a<o;)n[7+a]=255,a++;return n[7+a]=s,a++,n.set(i,7+a),a+=r,n[7+a]=128,a++,n.set(new Uint8Array(e),7+a),n.buffer}(e,t);default:return null}}function zs(e){if(e.length<5)return"";let t=-1;for(let i=0;i<e.length-3;i++){if(0===e[i]&&0===e[i+1]&&1===e[i+2]){t=i;break}if(i<e.length-4&&0===e[i]&&0===e[i+1]&&0===e[i+2]&&1===e[i+3]){t=i;break}}if(-1===t)return"";const i=t+(0===e[t+2]?4:3);if(i>=e.length)return"";const r=e[i];if(128&r)return"";if((r>>1&63)>=32)return Gs;if(i+1<e.length){if(0==(248&e[i+1]))return Gs}return(31&r)<=31?Fs:""}const js=new Map;async function Qs(e,t){if(!ye().supportWebRTCEncodedTransform)return void me.warning("browser not support video encoded transform");if(js.has(e))return;if(!e.track)return;const i={track:e.track};if(p()){if(!e.createEncodedStreams)return void me.warning("browser not support createEncodedStreams() API");let o=null;try{o=e.createEncodedStreams()}catch(e){return void me.error("create video-encoded-streams error",e&&e.message)}const s=[];t.on("sei-to-send",(e=>{s.push(e)}));const n=new TransformStream({transform(t,o){i.controller||(i.controller=o),e.track&&e.track.id!==i.track.id&&(me.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=zs(new Uint8Array(t.data)),a=s.shift();if(a){const e=Xs(t.data,a,n);e&&(t.data=e)}o.enqueue(t)}});o.readable.pipeThrough(n).pipeTo(o.writable)}else{if(!c())return;{if("undefined"==typeof RTCRtpScriptTransform)return void me.warning("browser not support RTCRtpScriptTransform");const o=is(),s=new MessageChannel;await new Promise((e=>o.onmessage=t=>{"registered"===t.data&&e(void 0)}));const n=new RTCRtpScriptTransform(o,{name:"sei-tx",port:s.port2},[s.port2]);e.transform=n,await new Promise((e=>o.onmessage=t=>{"started"===t.data&&e(void 0)})),t.on("sei-to-send",(e=>{s.port1.postMessage({sei:e})})),s.port1.onmessage=t=>{var o;t.data.transformed&&e.track&&(null===(o=e.track)||void 0===o?void 0:o.id)!==i.track.id&&(me.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=o}}function r(){if(e.track){if(this.id!==e.track.id)return;e.track.removeEventListener("ended",r)}const t=js.get(e);if(t){js.delete(e);try{var i,o;null===(i=t.controller)||void 0===i||i.terminate(),null===(o=t.worker)||void 0===o||o.terminate()}catch(e){me.warning(e&&e.message)}}}js.set(e,i),e.track.addEventListener("ended",r)}const Js=new Map;async function qs(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!ye().supportWebRTCEncodedTransform)return void me.warning("browser not support video encoded transform");if(!e.track)return;if(Js.has(e)){const i=Js.get(e);return void(i&&(i.onSei=t.onSei))}const i={track:e.track,onSei:t.onSei};if(p()){if(!e.createEncodedStreams)return void me.warning("browser not support createEncodedStreams() API");let o=null;try{o=e.createEncodedStreams()}catch(e){return void me.error("create video-encoded-streams error",e&&e.message)}const s=new TransformStream({transform(o,s){if(i.controller||(i.controller=s),!i.firstFrameInfo){var n;const e=o.getMetadata()||{};i.firstFrameInfo=Nt({type:o.type,rtpTimestamp:o.timestamp,payloadType:e.payloadType||0,ssrc:e.synchronizationSource||0,length:o.data.byteLength},"mimeType"in e?{mimeType:e.mimeType}:{}),null===(n=t.onFirstFrame)||void 0===n||n.call(t,i.firstFrameInfo)}e.track&&e.track.id!==i.track.id&&(me.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 a=Hs(o,zs(new Uint8Array(o.data)));a&&i.onSei&&i.onSei(a),s.enqueue(o)}});o.readable.pipeThrough(s).pipeTo(o.writable)}else if(c()){if("undefined"==typeof RTCRtpScriptTransform)return void me.warning("browser not support RTCRtpScriptTransform");const o=is(),s=new MessageChannel;await new Promise((e=>o.onmessage=t=>{"registered"===t.data&&e(void 0)}));const n=new RTCRtpScriptTransform(o,{name:"sei-rx",port:s.port2},[s.port2]);e.transform=n,await new Promise((e=>o.onmessage=t=>{"started"===t.data&&e(void 0)})),s.port1.onmessage=o=>{var s;if(o.data.transformed&&e.track&&(null===(s=e.track)||void 0===s?void 0:s.id)!==i.track.id)me.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);else if(o.data.sei&&i.onSei)i.onSei(o.data.sei);else if(o.data.firstFrameInfo&&t.onFirstFrame){var n;null===(n=t.onFirstFrame)||void 0===n||n.call(t,o.data.firstFrameInfo)}},i.worker=o}function r(){if(e.track){if(this.id!==e.track.id)return;e.track.removeEventListener("ended",r)}!function(e){const t=Js.get(e);if(t){Js.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){me.warning(e&&e.message)}}}(e)}Js.set(e,i),e.track.addEventListener("ended",r)}Ee();export{Oe as AUDIO_CONTEXT_EVENT,Ke as AUDIO_ENCODER_CONFIG_SETTINGS,pt as AUDIO_TRACK_EVENT,Vr as AgoraRTCPlayer,bi as AudioProcessorContext,Si as AudioProcessorDestination,lt as AudioSourceEvents,Dr as BufferSourceAudioTrack,Io as CameraVideoTrack,mt as DEFAULT_LOCAL_AUDIO_TRACK_STATS,gt as DEFAULT_LOCAL_VIDEO_TRACK_STATS,ft as DEFAULT_NETWORK_QUALITY_STATS,_t as DEFAULT_REMOTE_AUDIO_TRACK_STATS,vt as DEFAULT_REMOTE_VIDEO_TRACK_STATS,$o as DataChannel,Rt as DataChannelEvents,hi as DeviceManager,St as DeviceManagerEvent,yt as DeviceManagerState,si as HAS_GUM_AUDIO,ni as HAS_GUM_VIDEO,Rr as LocalAudioTrack,ts as LocalDataChannel,Pt as LocalTrack,dt as LocalTrackEvents,ko as LocalVideoTrack,At as MediaElementNumStatus,kt as MediaElementStatus,wr as MicrophoneAudioTrack,Cr as MixingAudioTrack,Et as PROCESSOR_CONTEXT_EVENTS,Tt as PROCESSOR_DESTINATION_EVENTS,Jo as RemoteAudioTrack,es as RemoteDataChannel,at as RemoteStreamFallbackType,nt as RemoteStreamType,jo as RemoteTrack,ut as RemoteTrackEvents,Qo as RemoteVideoTrack,oi as SAFARI_GLOBAL_GUM_LOCK,We as SUPPORT_SCREEN_ENCODER_CONFIG_LIST,Ze as SUPPORT_SVC_CONFIG_LIST,Ue as SUPPORT_VIDEO_ENCODER_CONFIG_LIST,st as StreamType,Lt as Track,ct as TrackEvents,rt as TrackHint,it as TrackInternalEvent,ht as TrackMediaType,Qe as VideoMirrorModeType,Lr as VideoPlayer,yi as VideoProcessorContext,Ei as VideoProcessorDestination,It as VideoState,Ye as __TRACK_LIST__,Xe as addTrack,Wt as audioContextState,vi as audioElementPlayCenter,Xt as audioTimerLoop,mi as autoPlayGestureEventEmitter,Wi as blob2Uint8Array,Ai as checkMediaStreamTrackResolution,Ti as checkTrackState,Do as createBufferSourceAudioTrack,No as createCameraVideoTrack,Ro as createCustomAudioTrack,Mo as createCustomVideoTrack,Oo as createMicrophoneAndCameraTracks,wo as createMicrophoneAudioTrack,Co as createMixingAudioTrack,Lo as createScreenVideoTrack,Ht as decodeAudioData,Se as detectSupportAudioElementSetSinkId,we as detectSupportAutCC,De as detectSupportAutCCFeedback,Re as detectSupportInstantVideo,Ae as detectSupportPrePc,Ie as detectSupportPreSub,Ne as detectSupportRestrictOwnAudio,ke as detectSupportSDPEndpoint,Me as detectSupportSuppressLocalAudioPlayback,li as deviceManager,Ui as emptyImage2TypedArray,xi as frameData2CryptoBuffer,Ft as getAudioContext,He as getAudioEncoderConfiguration,Li as getBitrateConstrainRange,Pi as getBitrateFromResAndFps,ye as getCompatibility,Di as getConstraintsFromAudioConfig,Ri as getConstraintsFromCameraConfig,Mi as getConstraintsFromMicrophoneConfig,Ci as getConstraintsFromScreenAudioConfig,wi as getConstraintsFromScreenConfig,ri as getElectronScreenSources,ti as getElectronScreenStream,ii as getElectronScreenStreamByUserSelect,ai as getLocalStream,Ao as getMediaStreamTrackForSender,Oi as getNewNearestVideoProfile,Ni as getNewVideoBitrate,Vi as getOriginSenderConfig,Ge as getScalabilityConfiguration,Fe as getScreenEncoderConfiguration,jt as getSilenceAudioTrack,Jt as getSilenceSamplesDuration,Zi as getStaticTrackStream,Be as getVideoEncoderConfiguration,di as handleGetUserMediaError,Gt as hasAudioContext,je as hasMicrophoneTrack,ls as interceptLocalAudioFrame,Qs as interceptLocalVideoFrame,Bs as interceptRemoteAudioFrame,qs as interceptRemoteVideoFrame,qe as isAudioEncoderConfiguration,et as isAudioEncoderConfigurationOrPreset,bt as isBeautyEffectOptions,ot as isLowStreamParameter,be as isPlanB,tt as isScreenSourceType,Je as isVideoEncoderConfiguration,$e as isVideoEncoderConfigurationOrPreset,Kt as polyfillAudioNode,ze as removeTrack,gi as requestAutoplayGesture,Bt as restartBackgroundTag,Qt as silenceScriptProcessHandler,Ee as updateAgoraRTCCompatibility,qo as visibilityWatcher};
|