yjz-web-sdk 1.0.8-beta.6 → 1.0.8-beta.8

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.
@@ -13,6 +13,7 @@ export declare class WebRTCSdk extends EventEmitter {
13
13
  isConnecting: boolean;
14
14
  private connectCount;
15
15
  private MAX_COUNT;
16
+ private timeout;
16
17
  constructor(options: WebRTCConfigOptions);
17
18
  initConfig(): Promise<void>;
18
19
  /** 开始连接 signal 服务 */
@@ -20,6 +21,7 @@ export declare class WebRTCSdk extends EventEmitter {
20
21
  private prepareConnection;
21
22
  reconnect(): Promise<void>;
22
23
  initConnectConfig(): void;
24
+ initSignalingClient(): void;
23
25
  switchControl(isControl: boolean): void;
24
26
  resetConfig(): void;
25
27
  /** 停止连接,并发送退出信令 */
@@ -35,6 +37,7 @@ export declare class WebRTCSdk extends EventEmitter {
35
37
  * @param message 信令消息
36
38
  */
37
39
  private handleSignaling;
40
+ clearTimer: () => void;
38
41
  /** 发送 Offer 信令 */
39
42
  sendOffer: (offerSdp: string) => void;
40
43
  /** 发送 Answer 信令 */
@@ -24,6 +24,8 @@ export interface WebRTCConfigOptions {
24
24
  spareTurn?: Array<string>;
25
25
  maxRecount?: number;
26
26
  isCalculate?: boolean;
27
+ traceId?: string;
28
+ signAgain?: boolean;
27
29
  }
28
30
  export declare class WebRTCConfig {
29
31
  signalServerUrl: string;
@@ -43,5 +45,6 @@ export declare class WebRTCConfig {
43
45
  token: string;
44
46
  isGroup: boolean;
45
47
  turnKey: Array<string>;
48
+ traceId: string;
46
49
  constructor(options: WebRTCConfigOptions);
47
50
  }
@@ -9,6 +9,8 @@ export declare class SignalingClient extends EventEmitter {
9
9
  * 启动 WebSocket 连接,并注册各事件处理
10
10
  */
11
11
  start(): void;
12
+ timeStart(): void;
13
+ clearTime(): void;
12
14
  /**
13
15
  * 关闭 WebSocket 连接,并通知外部
14
16
  */
@@ -353,13 +353,9 @@ class SignalingClient extends EventEmitter {
353
353
  start() {
354
354
  this.webSocket = new WebSocket(this.config.signalServerUrl);
355
355
  this.webSocket.onopen = () => {
356
+ this.config.traceId = generateRandomString(16);
356
357
  this.sendSignInMessage();
357
- if (this.timeout === null) {
358
- this.timeout = setTimeout(() => {
359
- this.emit(EmitType.webrtcError, createWebRtcError(FailCode.STATE_ERR, ""));
360
- this.timeout = null;
361
- }, 6e3);
362
- }
358
+ this.timeStart();
363
359
  };
364
360
  this.webSocket.onclose = () => {
365
361
  this.webSocket = null;
@@ -370,14 +366,26 @@ class SignalingClient extends EventEmitter {
370
366
  this.webSocket.onmessage = (event) => {
371
367
  const message = JSON.parse(event.data);
372
368
  if (message.type === MessageType.Offer) {
373
- if (this.timeout) {
374
- clearTimeout(this.timeout);
375
- this.timeout = null;
376
- }
369
+ this.clearTime();
377
370
  }
378
371
  this.emit(EmitType.signalMessage, message);
379
372
  };
380
373
  }
374
+ timeStart() {
375
+ this.clearTime();
376
+ if (this.timeout === null) {
377
+ this.timeout = setTimeout(() => {
378
+ this.emit(EmitType.webrtcError, createWebRtcError(FailCode.STATE_ERR, ""));
379
+ this.timeout = null;
380
+ }, 6e3);
381
+ }
382
+ }
383
+ clearTime() {
384
+ if (this.timeout) {
385
+ clearTimeout(this.timeout);
386
+ this.timeout = null;
387
+ }
388
+ }
381
389
  /**
382
390
  * 关闭 WebSocket 连接,并通知外部
383
391
  */
@@ -405,6 +413,7 @@ class SignalingClient extends EventEmitter {
405
413
  }
406
414
  sendSignInMessage() {
407
415
  const message = {
416
+ traceId: this.config.traceId,
408
417
  type: SendType.SignIn,
409
418
  identity: SendType.Identity,
410
419
  turnServerUri: this.config.turnServerUri,
@@ -449,6 +458,16 @@ class SignalingClient extends EventEmitter {
449
458
  this.sendMessage(jsonMessage);
450
459
  }
451
460
  }
461
+ function generateRandomString(length) {
462
+ const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
463
+ let result = "";
464
+ const charsLength = chars.length;
465
+ for (let i = 0; i < length; i++) {
466
+ const randomIndex = Math.floor(Math.random() * charsLength);
467
+ result += chars[randomIndex];
468
+ }
469
+ return result;
470
+ }
452
471
  let logDisabled_ = true;
453
472
  let deprecationWarnings_ = true;
454
473
  function extractVersion(uastring, expr, pos) {
@@ -3058,6 +3077,7 @@ class WebRTCConfig {
3058
3077
  __publicField(this, "token");
3059
3078
  __publicField(this, "isGroup");
3060
3079
  __publicField(this, "turnKey");
3080
+ __publicField(this, "traceId", "");
3061
3081
  this.signalServerUrl = options.signalServerUrl || "";
3062
3082
  this.myId = options.myId || "";
3063
3083
  this.roomId = options.roomId || "";
@@ -3075,6 +3095,7 @@ class WebRTCConfig {
3075
3095
  this.screenshotQuality = options.screenshotQuality || 20;
3076
3096
  this.token = options.token;
3077
3097
  this.isGroup = options.isGroup;
3098
+ this.traceId = options.traceId || "";
3078
3099
  }
3079
3100
  }
3080
3101
  const setRemoteDescriptionWithHandleOffer = (peerConnection, sdp2, sendAnswer, onError) => {
@@ -3762,12 +3783,13 @@ class WebRTCSdk extends EventEmitter {
3762
3783
  __publicField(this, "isConnecting", false);
3763
3784
  __publicField(this, "connectCount", 0);
3764
3785
  __publicField(this, "MAX_COUNT", 1);
3786
+ __publicField(this, "timeout", null);
3765
3787
  /**
3766
3788
  * 处理 signal 消息,根据不同消息类型分发到 webRTCClient 或直接触发 SDK 事件
3767
3789
  * @param message 信令消息
3768
3790
  */
3769
3791
  __publicField(this, "handleSignaling", (message) => {
3770
- var _a, _b, _c, _d, _e;
3792
+ var _a, _b, _c, _d, _e, _f;
3771
3793
  console.log("handleSignaling===>", message);
3772
3794
  if (!this.config) return;
3773
3795
  switch (message.type) {
@@ -3797,6 +3819,7 @@ class WebRTCSdk extends EventEmitter {
3797
3819
  }
3798
3820
  break;
3799
3821
  case MessageType.SignOut:
3822
+ console.log("SignOutSignOutSignOutSignOutSignOutSignOutSignOutSignOut");
3800
3823
  if (message.myId === this.config.myId) {
3801
3824
  (_d = this.webRTCClient) == null ? void 0 : _d.closeConnection();
3802
3825
  (_e = this.signalingClient) == null ? void 0 : _e.close();
@@ -3814,17 +3837,36 @@ class WebRTCSdk extends EventEmitter {
3814
3837
  this.emit(EmitType.screenshot, { "room_id": this.config.roomId, "base64": base64Str });
3815
3838
  break;
3816
3839
  case MessageType.KickOut:
3840
+ console.log("KickOuKickOutKickOutKickOutKickOutKickOutKickOutKickOutKickOutKickOutKickOutt");
3817
3841
  this.emit(EmitType.webrtcError, createWebRtcError(FailCode.KICK_OUT_ERR, ""));
3818
3842
  break;
3819
3843
  case MessageType.Error:
3820
3844
  if (message.error.includes("云手机没有就绪")) {
3821
- this.emit(EmitType.webrtcError, createWebRtcError(FailCode.NOT_AVAILABLE, ""));
3845
+ if (this.options.signAgain) {
3846
+ (_f = this.signalingClient) == null ? void 0 : _f.close();
3847
+ this.signalingClient = null;
3848
+ this.initSignalingClient();
3849
+ this.clearTimer();
3850
+ this.timeout = setTimeout(() => {
3851
+ var _a2;
3852
+ (_a2 = this.signalingClient) == null ? void 0 : _a2.start();
3853
+ }, 3e3);
3854
+ this.options.signAgain = false;
3855
+ } else {
3856
+ this.emit(EmitType.webrtcError, createWebRtcError(FailCode.NOT_AVAILABLE, ""));
3857
+ }
3822
3858
  } else if (message.error.includes("token 验证失败")) {
3823
3859
  this.emit(EmitType.webrtcError, createWebRtcError(FailCode.AUTH_FAILED, ""));
3824
3860
  }
3825
3861
  break;
3826
3862
  }
3827
3863
  });
3864
+ __publicField(this, "clearTimer", () => {
3865
+ if (this.timeout) {
3866
+ clearTimeout(this.timeout);
3867
+ this.timeout = null;
3868
+ }
3869
+ });
3828
3870
  /** 发送 Offer 信令 */
3829
3871
  __publicField(this, "sendOffer", (offerSdp) => {
3830
3872
  var _a;
@@ -3847,6 +3889,7 @@ class WebRTCSdk extends EventEmitter {
3847
3889
  if (!this.config) return;
3848
3890
  if (answerSdp && answerSdp.length > 0) {
3849
3891
  const message = {
3892
+ traceId: this.config.traceId,
3850
3893
  type: SendType.Answer,
3851
3894
  identity: SendType.Identity,
3852
3895
  roomId: this.config.roomId,
@@ -3863,6 +3906,7 @@ class WebRTCSdk extends EventEmitter {
3863
3906
  if (!this.config) return;
3864
3907
  if (ice && ice.length > 0) {
3865
3908
  const message = {
3909
+ traceId: this.config.traceId,
3866
3910
  type: SendType.IceCandidates,
3867
3911
  identity: SendType.Identity,
3868
3912
  roomId: this.config.roomId,
@@ -3946,6 +3990,7 @@ class WebRTCSdk extends EventEmitter {
3946
3990
  await this.initConfig();
3947
3991
  }
3948
3992
  this.initConnectConfig();
3993
+ this.initSignalingClient();
3949
3994
  (_a = this.signalingClient) == null ? void 0 : _a.start();
3950
3995
  } catch (e) {
3951
3996
  this.isConnected = false;
@@ -3964,12 +4009,7 @@ class WebRTCSdk extends EventEmitter {
3964
4009
  }
3965
4010
  initConnectConfig() {
3966
4011
  this.config = new WebRTCConfig(this.options);
3967
- this.signalingClient = new SignalingClient(this.config);
3968
4012
  this.webRTCClient = new WebRTCClient(this.config);
3969
- this.signalingClient.on(EmitType.signalMessage, (message) => this.handleSignaling(message));
3970
- this.signalingClient.on(EmitType.webrtcError, (err) => {
3971
- this.emit(EmitType.webrtcError, err);
3972
- });
3973
4013
  this.webRTCClient.on(EmitType.sendOffer, (sdp2) => this.sendOffer(sdp2));
3974
4014
  this.webRTCClient.on(EmitType.sendAnswer, (sdp2) => this.sendAnswer(sdp2));
3975
4015
  this.webRTCClient.on(EmitType.sendICEMessage, (candidate) => this.sendICEMessage(candidate));
@@ -3997,6 +4037,15 @@ class WebRTCSdk extends EventEmitter {
3997
4037
  this.emit(EmitType.statisticInfo, info);
3998
4038
  });
3999
4039
  }
4040
+ initSignalingClient() {
4041
+ if (this.config) {
4042
+ this.signalingClient = new SignalingClient(this.config);
4043
+ this.signalingClient.on(EmitType.signalMessage, (message) => this.handleSignaling(message));
4044
+ this.signalingClient.on(EmitType.webrtcError, (err) => {
4045
+ this.emit(EmitType.webrtcError, err);
4046
+ });
4047
+ }
4048
+ }
4000
4049
  switchControl(isControl) {
4001
4050
  var _a;
4002
4051
  (_a = this.signalingClient) == null ? void 0 : _a.sendSwitchControlMessage(isControl);
@@ -7,22 +7,22 @@ r(this,"config"),
7
7
  r(this,"webSocket",null),r(this,"timeout",null),this.config=e}
8
8
  /**
9
9
  * 启动 WebSocket 连接,并注册各事件处理
10
- */start(){this.webSocket=new WebSocket(this.config.signalServerUrl),this.webSocket.onopen=()=>{this.sendSignInMessage(),null===this.timeout&&(this.timeout=setTimeout(()=>{this.emit(m.webrtcError,f(p.STATE_ERR,"")),this.timeout=null},6e3))},this.webSocket.onclose=()=>{this.webSocket=null},this.webSocket.onerror=e=>{this.emit(m.webrtcError,f(p.SOCKET,e))},this.webSocket.onmessage=e=>{const t=JSON.parse(e.data);t.type===l.Offer&&this.timeout&&(clearTimeout(this.timeout),this.timeout=null),this.emit(m.signalMessage,t)}}
10
+ */start(){this.webSocket=new WebSocket(this.config.signalServerUrl),this.webSocket.onopen=()=>{this.config.traceId=function(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";let n="";const r=t.length;for(let i=0;i<e;i++){n+=t[Math.floor(Math.random()*r)]}return n}(16),this.sendSignInMessage(),this.timeStart()},this.webSocket.onclose=()=>{this.webSocket=null},this.webSocket.onerror=e=>{this.emit(m.webrtcError,f(p.SOCKET,e))},this.webSocket.onmessage=e=>{const t=JSON.parse(e.data);t.type===l.Offer&&this.clearTime(),this.emit(m.signalMessage,t)}}timeStart(){this.clearTime(),null===this.timeout&&(this.timeout=setTimeout(()=>{this.emit(m.webrtcError,f(p.STATE_ERR,"")),this.timeout=null},6e3))}clearTime(){this.timeout&&(clearTimeout(this.timeout),this.timeout=null)}
11
11
  /**
12
12
  * 关闭 WebSocket 连接,并通知外部
13
13
  */close(){this.webSocket&&(this.webSocket.onopen=null,this.webSocket.onmessage=null,this.webSocket.onerror=null,this.webSocket.onclose=null,this.webSocket.readyState!==WebSocket.OPEN&&this.webSocket.readyState!==WebSocket.CONNECTING||this.webSocket.close(1e3,"Normal Closure"),this.webSocket=null),this.removeAllListeners()}
14
14
  /**
15
15
  * 发送消息到服务端
16
16
  * @param message - 消息字符串
17
- */sendMessage(e){this.webSocket&&this.webSocket.readyState===WebSocket.OPEN&&this.webSocket.send(e)}sendSignInMessage(){const e={type:h.SignIn,identity:h.Identity,turnServerUri:this.config.turnServerUri,roomId:this.config.roomId,isControl:this.config.isControl?"true":"false",screenshotWidth:this.config.screenshotWidth,screenshotHeight:this.config.screenshotHeight,screenshotQuality:this.config.screenshotQuality,token:this.config.token,isGroup:this.config.isGroup,turnKey:this.config.turnKey},t=JSON.stringify(e);this.sendMessage(t)}sendSwitchControlMessage(e){this.config.isControl=e;const t={type:h.SwitchControl,identity:h.Identity,isControl:this.config.isControl?"true":"false",roomId:this.config.roomId,screenshotWidth:this.config.screenshotWidth,screenshotHeight:this.config.screenshotHeight,screenshotQuality:this.config.screenshotQuality},n=JSON.stringify(t);this.sendMessage(n)}
17
+ */sendMessage(e){this.webSocket&&this.webSocket.readyState===WebSocket.OPEN&&this.webSocket.send(e)}sendSignInMessage(){const e={traceId:this.config.traceId,type:h.SignIn,identity:h.Identity,turnServerUri:this.config.turnServerUri,roomId:this.config.roomId,isControl:this.config.isControl?"true":"false",screenshotWidth:this.config.screenshotWidth,screenshotHeight:this.config.screenshotHeight,screenshotQuality:this.config.screenshotQuality,token:this.config.token,isGroup:this.config.isGroup,turnKey:this.config.turnKey},t=JSON.stringify(e);this.sendMessage(t)}sendSwitchControlMessage(e){this.config.isControl=e;const t={type:h.SwitchControl,identity:h.Identity,isControl:this.config.isControl?"true":"false",roomId:this.config.roomId,screenshotWidth:this.config.screenshotWidth,screenshotHeight:this.config.screenshotHeight,screenshotQuality:this.config.screenshotQuality},n=JSON.stringify(t);this.sendMessage(n)}
18
18
  /**
19
19
  * 用于从控请求当前截屏
20
20
  * @param visible 当前从控page控件是否可见
21
- */sendRequestScreenshot(e){const t={type:h.RequestScreenshot,visible:e,roomId:this.config.roomId},n=JSON.stringify(t);this.sendMessage(n)}}let g=!0,y=!0;function v(e,t,n){const r=e.match(t);return r&&r.length>=n&&parseFloat(r[n],10)}function T(e,t,n){if(!e.RTCPeerConnection)return;const r=e.RTCPeerConnection.prototype,i=r.addEventListener;r.addEventListener=function(e,r){if(e!==t)return i.apply(this,arguments);const o=e=>{const t=n(e);t&&(r.handleEvent?r.handleEvent(t):r(t))};return this._eventMap=this._eventMap||{},this._eventMap[t]||(this._eventMap[t]=new Map),this._eventMap[t].set(r,o),i.apply(this,[e,o])};const o=r.removeEventListener;r.removeEventListener=function(e,n){if(e!==t||!this._eventMap||!this._eventMap[t])return o.apply(this,arguments);if(!this._eventMap[t].has(n))return o.apply(this,arguments);const r=this._eventMap[t].get(n);return this._eventMap[t].delete(n),0===this._eventMap[t].size&&delete this._eventMap[t],0===Object.keys(this._eventMap).length&&delete this._eventMap,o.apply(this,[e,r])},Object.defineProperty(r,"on"+t,{get(){return this["_on"+t]},set(e){this["_on"+t]&&(this.removeEventListener(t,this["_on"+t]),delete this["_on"+t]),e&&this.addEventListener(t,this["_on"+t]=e)},enumerable:!0,configurable:!0})}function S(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(g=e,e?"adapter.js logging disabled":"adapter.js logging enabled")}function R(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(y=!e,"adapter.js deprecation warnings "+(e?"disabled":"enabled"))}function b(){if("object"==typeof window){if(g)return;"undefined"!=typeof console&&console.log}}function w(e,t){}function E(e){return"[object Object]"===Object.prototype.toString.call(e)}function P(e){return E(e)?Object.keys(e).reduce(function(t,n){const r=E(e[n]),i=r?P(e[n]):e[n],o=r&&!Object.keys(i).length;return void 0===i||o?t:Object.assign(t,{[n]:i})},{}):e}function k(e,t,n){t&&!n.has(t.id)&&(n.set(t.id,t),Object.keys(t).forEach(r=>{r.endsWith("Id")?k(e,e.get(t[r]),n):r.endsWith("Ids")&&t[r].forEach(t=>{k(e,e.get(t),n)})}))}function _(e,t,n){const r=n?"outbound-rtp":"inbound-rtp",i=new Map;if(null===t)return i;const o=[];return e.forEach(e=>{"track"===e.type&&e.trackIdentifier===t.id&&o.push(e)}),o.forEach(t=>{e.forEach(n=>{n.type===r&&n.trackId===t.id&&k(e,n,i)})}),i}const O=b;function A(e,t){const n=e&&e.navigator;if(!n.mediaDevices)return;const r=function(e){if("object"!=typeof e||e.mandatory||e.optional)return e;const t={};return Object.keys(e).forEach(n=>{if("require"===n||"advanced"===n||"mediaSource"===n)return;const r="object"==typeof e[n]?e[n]:{ideal:e[n]};void 0!==r.exact&&"number"==typeof r.exact&&(r.min=r.max=r.exact);const i=function(e,t){return e?e+t.charAt(0).toUpperCase()+t.slice(1):"deviceId"===t?"sourceId":t};if(void 0!==r.ideal){t.optional=t.optional||[];let e={};"number"==typeof r.ideal?(e[i("min",n)]=r.ideal,t.optional.push(e),e={},e[i("max",n)]=r.ideal,t.optional.push(e)):(e[i("",n)]=r.ideal,t.optional.push(e))}void 0!==r.exact&&"number"!=typeof r.exact?(t.mandatory=t.mandatory||{},t.mandatory[i("",n)]=r.exact):["min","max"].forEach(e=>{void 0!==r[e]&&(t.mandatory=t.mandatory||{},t.mandatory[i(e,n)]=r[e])})}),e.advanced&&(t.optional=(t.optional||[]).concat(e.advanced)),t},i=function(e,i){if(t.version>=61)return i(e);if((e=JSON.parse(JSON.stringify(e)))&&"object"==typeof e.audio){const t=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])};t((e=JSON.parse(JSON.stringify(e))).audio,"autoGainControl","googAutoGainControl"),t(e.audio,"noiseSuppression","googNoiseSuppression"),e.audio=r(e.audio)}if(e&&"object"==typeof e.video){let o=e.video.facingMode;o=o&&("object"==typeof o?o:{ideal:o});const s=t.version<66;if(o&&("user"===o.exact||"environment"===o.exact||"user"===o.ideal||"environment"===o.ideal)&&(!n.mediaDevices.getSupportedConstraints||!n.mediaDevices.getSupportedConstraints().facingMode||s)){let t;if(delete e.video.facingMode,"environment"===o.exact||"environment"===o.ideal?t=["back","rear"]:"user"!==o.exact&&"user"!==o.ideal||(t=["front"]),t)return n.mediaDevices.enumerateDevices().then(n=>{let s=(n=n.filter(e=>"videoinput"===e.kind)).find(e=>t.some(t=>e.label.toLowerCase().includes(t)));return!s&&n.length&&t.includes("back")&&(s=n[n.length-1]),s&&(e.video.deviceId=o.exact?{exact:s.deviceId}:{ideal:s.deviceId}),e.video=r(e.video),O("chrome: "+JSON.stringify(e)),i(e)})}e.video=r(e.video)}return O("chrome: "+JSON.stringify(e)),i(e)},o=function(e){return t.version>=64?e:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}};if(n.getUserMedia=function(e,t,r){i(e,e=>{n.webkitGetUserMedia(e,t,e=>{r&&r(o(e))})})}.bind(n),n.mediaDevices.getUserMedia){const e=n.mediaDevices.getUserMedia.bind(n.mediaDevices);n.mediaDevices.getUserMedia=function(t){return i(t,t=>e(t).then(e=>{if(t.audio&&!e.getAudioTracks().length||t.video&&!e.getVideoTracks().length)throw e.getTracks().forEach(e=>{e.stop()}),new DOMException("","NotFoundError");return e},e=>Promise.reject(o(e))))}}}function I(e){e.MediaStream=e.MediaStream||e.webkitMediaStream}function D(e){if("object"==typeof e&&e.RTCPeerConnection&&!("ontrack"in e.RTCPeerConnection.prototype)){Object.defineProperty(e.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(e){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=e)},enumerable:!0,configurable:!0});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=t=>{t.stream.addEventListener("addtrack",n=>{let r;r=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(e=>e.track&&e.track.id===n.track.id):{track:n.track};const i=new Event("track");i.track=n.track,i.receiver=r,i.transceiver={receiver:r},i.streams=[t.stream],this.dispatchEvent(i)}),t.stream.getTracks().forEach(n=>{let r;r=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(e=>e.track&&e.track.id===n.id):{track:n};const i=new Event("track");i.track=n,i.receiver=r,i.transceiver={receiver:r},i.streams=[t.stream],this.dispatchEvent(i)})},this.addEventListener("addstream",this._ontrackpoly)),t.apply(this,arguments)}}else T(e,"track",e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e))}function M(e){if("object"==typeof e&&e.RTCPeerConnection&&!("getSenders"in e.RTCPeerConnection.prototype)&&"createDTMFSender"in e.RTCPeerConnection.prototype){const t=function(e,t){return{track:t,get dtmf(){return void 0===this._dtmf&&("audio"===t.kind?this._dtmf=e.createDTMFSender(t):this._dtmf=null),this._dtmf},_pc:e}};if(!e.RTCPeerConnection.prototype.getSenders){e.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const n=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,r){let i=n.apply(this,arguments);return i||(i=t(this,e),this._senders.push(i)),i};const r=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){r.apply(this,arguments);const t=this._senders.indexOf(e);-1!==t&&this._senders.splice(t,1)}}const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._senders=this._senders||[],n.apply(this,[e]),e.getTracks().forEach(e=>{this._senders.push(t(this,e))})};const r=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){this._senders=this._senders||[],r.apply(this,[e]),e.getTracks().forEach(e=>{const t=this._senders.find(t=>t.track===e);t&&this._senders.splice(this._senders.indexOf(t),1)})}}else if("object"==typeof e&&e.RTCPeerConnection&&"getSenders"in e.RTCPeerConnection.prototype&&"createDTMFSender"in e.RTCPeerConnection.prototype&&e.RTCRtpSender&&!("dtmf"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e},Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function x(e){if(!("object"==typeof e&&e.RTCPeerConnection&&e.RTCRtpSender&&e.RTCRtpReceiver))return;if(!("getStats"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e});const n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){const e=this;return this._pc.getStats().then(t=>
21
+ */sendRequestScreenshot(e){const t={type:h.RequestScreenshot,visible:e,roomId:this.config.roomId},n=JSON.stringify(t);this.sendMessage(n)}}let g=!0,y=!0;function v(e,t,n){const r=e.match(t);return r&&r.length>=n&&parseFloat(r[n],10)}function T(e,t,n){if(!e.RTCPeerConnection)return;const r=e.RTCPeerConnection.prototype,i=r.addEventListener;r.addEventListener=function(e,r){if(e!==t)return i.apply(this,arguments);const o=e=>{const t=n(e);t&&(r.handleEvent?r.handleEvent(t):r(t))};return this._eventMap=this._eventMap||{},this._eventMap[t]||(this._eventMap[t]=new Map),this._eventMap[t].set(r,o),i.apply(this,[e,o])};const o=r.removeEventListener;r.removeEventListener=function(e,n){if(e!==t||!this._eventMap||!this._eventMap[t])return o.apply(this,arguments);if(!this._eventMap[t].has(n))return o.apply(this,arguments);const r=this._eventMap[t].get(n);return this._eventMap[t].delete(n),0===this._eventMap[t].size&&delete this._eventMap[t],0===Object.keys(this._eventMap).length&&delete this._eventMap,o.apply(this,[e,r])},Object.defineProperty(r,"on"+t,{get(){return this["_on"+t]},set(e){this["_on"+t]&&(this.removeEventListener(t,this["_on"+t]),delete this["_on"+t]),e&&this.addEventListener(t,this["_on"+t]=e)},enumerable:!0,configurable:!0})}function S(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(g=e,e?"adapter.js logging disabled":"adapter.js logging enabled")}function R(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(y=!e,"adapter.js deprecation warnings "+(e?"disabled":"enabled"))}function b(){if("object"==typeof window){if(g)return;"undefined"!=typeof console&&console.log}}function w(e,t){}function E(e){return"[object Object]"===Object.prototype.toString.call(e)}function P(e){return E(e)?Object.keys(e).reduce(function(t,n){const r=E(e[n]),i=r?P(e[n]):e[n],o=r&&!Object.keys(i).length;return void 0===i||o?t:Object.assign(t,{[n]:i})},{}):e}function k(e,t,n){t&&!n.has(t.id)&&(n.set(t.id,t),Object.keys(t).forEach(r=>{r.endsWith("Id")?k(e,e.get(t[r]),n):r.endsWith("Ids")&&t[r].forEach(t=>{k(e,e.get(t),n)})}))}function _(e,t,n){const r=n?"outbound-rtp":"inbound-rtp",i=new Map;if(null===t)return i;const o=[];return e.forEach(e=>{"track"===e.type&&e.trackIdentifier===t.id&&o.push(e)}),o.forEach(t=>{e.forEach(n=>{n.type===r&&n.trackId===t.id&&k(e,n,i)})}),i}const A=b;function O(e,t){const n=e&&e.navigator;if(!n.mediaDevices)return;const r=function(e){if("object"!=typeof e||e.mandatory||e.optional)return e;const t={};return Object.keys(e).forEach(n=>{if("require"===n||"advanced"===n||"mediaSource"===n)return;const r="object"==typeof e[n]?e[n]:{ideal:e[n]};void 0!==r.exact&&"number"==typeof r.exact&&(r.min=r.max=r.exact);const i=function(e,t){return e?e+t.charAt(0).toUpperCase()+t.slice(1):"deviceId"===t?"sourceId":t};if(void 0!==r.ideal){t.optional=t.optional||[];let e={};"number"==typeof r.ideal?(e[i("min",n)]=r.ideal,t.optional.push(e),e={},e[i("max",n)]=r.ideal,t.optional.push(e)):(e[i("",n)]=r.ideal,t.optional.push(e))}void 0!==r.exact&&"number"!=typeof r.exact?(t.mandatory=t.mandatory||{},t.mandatory[i("",n)]=r.exact):["min","max"].forEach(e=>{void 0!==r[e]&&(t.mandatory=t.mandatory||{},t.mandatory[i(e,n)]=r[e])})}),e.advanced&&(t.optional=(t.optional||[]).concat(e.advanced)),t},i=function(e,i){if(t.version>=61)return i(e);if((e=JSON.parse(JSON.stringify(e)))&&"object"==typeof e.audio){const t=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])};t((e=JSON.parse(JSON.stringify(e))).audio,"autoGainControl","googAutoGainControl"),t(e.audio,"noiseSuppression","googNoiseSuppression"),e.audio=r(e.audio)}if(e&&"object"==typeof e.video){let o=e.video.facingMode;o=o&&("object"==typeof o?o:{ideal:o});const s=t.version<66;if(o&&("user"===o.exact||"environment"===o.exact||"user"===o.ideal||"environment"===o.ideal)&&(!n.mediaDevices.getSupportedConstraints||!n.mediaDevices.getSupportedConstraints().facingMode||s)){let t;if(delete e.video.facingMode,"environment"===o.exact||"environment"===o.ideal?t=["back","rear"]:"user"!==o.exact&&"user"!==o.ideal||(t=["front"]),t)return n.mediaDevices.enumerateDevices().then(n=>{let s=(n=n.filter(e=>"videoinput"===e.kind)).find(e=>t.some(t=>e.label.toLowerCase().includes(t)));return!s&&n.length&&t.includes("back")&&(s=n[n.length-1]),s&&(e.video.deviceId=o.exact?{exact:s.deviceId}:{ideal:s.deviceId}),e.video=r(e.video),A("chrome: "+JSON.stringify(e)),i(e)})}e.video=r(e.video)}return A("chrome: "+JSON.stringify(e)),i(e)},o=function(e){return t.version>=64?e:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}};if(n.getUserMedia=function(e,t,r){i(e,e=>{n.webkitGetUserMedia(e,t,e=>{r&&r(o(e))})})}.bind(n),n.mediaDevices.getUserMedia){const e=n.mediaDevices.getUserMedia.bind(n.mediaDevices);n.mediaDevices.getUserMedia=function(t){return i(t,t=>e(t).then(e=>{if(t.audio&&!e.getAudioTracks().length||t.video&&!e.getVideoTracks().length)throw e.getTracks().forEach(e=>{e.stop()}),new DOMException("","NotFoundError");return e},e=>Promise.reject(o(e))))}}}function I(e){e.MediaStream=e.MediaStream||e.webkitMediaStream}function D(e){if("object"==typeof e&&e.RTCPeerConnection&&!("ontrack"in e.RTCPeerConnection.prototype)){Object.defineProperty(e.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(e){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=e)},enumerable:!0,configurable:!0});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=t=>{t.stream.addEventListener("addtrack",n=>{let r;r=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(e=>e.track&&e.track.id===n.track.id):{track:n.track};const i=new Event("track");i.track=n.track,i.receiver=r,i.transceiver={receiver:r},i.streams=[t.stream],this.dispatchEvent(i)}),t.stream.getTracks().forEach(n=>{let r;r=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(e=>e.track&&e.track.id===n.id):{track:n};const i=new Event("track");i.track=n,i.receiver=r,i.transceiver={receiver:r},i.streams=[t.stream],this.dispatchEvent(i)})},this.addEventListener("addstream",this._ontrackpoly)),t.apply(this,arguments)}}else T(e,"track",e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e))}function M(e){if("object"==typeof e&&e.RTCPeerConnection&&!("getSenders"in e.RTCPeerConnection.prototype)&&"createDTMFSender"in e.RTCPeerConnection.prototype){const t=function(e,t){return{track:t,get dtmf(){return void 0===this._dtmf&&("audio"===t.kind?this._dtmf=e.createDTMFSender(t):this._dtmf=null),this._dtmf},_pc:e}};if(!e.RTCPeerConnection.prototype.getSenders){e.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const n=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,r){let i=n.apply(this,arguments);return i||(i=t(this,e),this._senders.push(i)),i};const r=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){r.apply(this,arguments);const t=this._senders.indexOf(e);-1!==t&&this._senders.splice(t,1)}}const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._senders=this._senders||[],n.apply(this,[e]),e.getTracks().forEach(e=>{this._senders.push(t(this,e))})};const r=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){this._senders=this._senders||[],r.apply(this,[e]),e.getTracks().forEach(e=>{const t=this._senders.find(t=>t.track===e);t&&this._senders.splice(this._senders.indexOf(t),1)})}}else if("object"==typeof e&&e.RTCPeerConnection&&"getSenders"in e.RTCPeerConnection.prototype&&"createDTMFSender"in e.RTCPeerConnection.prototype&&e.RTCRtpSender&&!("dtmf"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e},Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function x(e){if(!("object"==typeof e&&e.RTCPeerConnection&&e.RTCRtpSender&&e.RTCRtpReceiver))return;if(!("getStats"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e});const n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){const e=this;return this._pc.getStats().then(t=>
22
22
  /* Note: this will include stats of all senders that
23
23
  * send a track with the same id as sender.track as
24
24
  * it is not possible to identify the RTCRtpSender.
25
- */_(t,e.track,!0))}}if(!("getStats"in e.RTCRtpReceiver.prototype)){const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e}),T(e,"track",e=>(e.receiver._pc=e.srcElement,e)),e.RTCRtpReceiver.prototype.getStats=function(){const e=this;return this._pc.getStats().then(t=>_(t,e.track,!1))}}if(!("getStats"in e.RTCRtpSender.prototype)||!("getStats"in e.RTCRtpReceiver.prototype))return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof e.MediaStreamTrack){const e=arguments[0];let t,n,r;return this.getSenders().forEach(n=>{n.track===e&&(t?r=!0:t=n)}),this.getReceivers().forEach(t=>(t.track===e&&(n?r=!0:n=t),t.track===e)),r||t&&n?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):t?t.getStats():n?n.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return t.apply(this,arguments)}}function L(e){e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(e=>this._shimmedLocalStreams[e][0])};const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,n){if(!n)return t.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const r=t.apply(this,arguments);return this._shimmedLocalStreams[n.id]?-1===this._shimmedLocalStreams[n.id].indexOf(r)&&this._shimmedLocalStreams[n.id].push(r):this._shimmedLocalStreams[n.id]=[n,r],r};const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._shimmedLocalStreams=this._shimmedLocalStreams||{},e.getTracks().forEach(e=>{if(this.getSenders().find(t=>t.track===e))throw new DOMException("Track already exists.","InvalidAccessError")});const t=this.getSenders();n.apply(this,arguments);const r=this.getSenders().filter(e=>-1===t.indexOf(e));this._shimmedLocalStreams[e.id]=[e].concat(r)};const r=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[e.id],r.apply(this,arguments)};const i=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},e&&Object.keys(this._shimmedLocalStreams).forEach(t=>{const n=this._shimmedLocalStreams[t].indexOf(e);-1!==n&&this._shimmedLocalStreams[t].splice(n,1),1===this._shimmedLocalStreams[t].length&&delete this._shimmedLocalStreams[t]}),i.apply(this,arguments)}}function N(e,t){if(!e.RTCPeerConnection)return;if(e.RTCPeerConnection.prototype.addTrack&&t.version>=65)return L(e);const n=e.RTCPeerConnection.prototype.getLocalStreams;e.RTCPeerConnection.prototype.getLocalStreams=function(){const e=n.apply(this);return this._reverseStreams=this._reverseStreams||{},e.map(e=>this._reverseStreams[e.id])};const r=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(t){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},t.getTracks().forEach(e=>{if(this.getSenders().find(t=>t.track===e))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[t.id]){const n=new e.MediaStream(t.getTracks());this._streams[t.id]=n,this._reverseStreams[n.id]=t,t=n}r.apply(this,[t])};const i=e.RTCPeerConnection.prototype.removeStream;function o(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach(t=>{const r=e._reverseStreams[t],i=e._streams[r.id];n=n.replace(new RegExp(i.id,"g"),r.id)}),new RTCSessionDescription({type:t.type,sdp:n})}e.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},i.apply(this,[this._streams[e.id]||e]),delete this._reverseStreams[this._streams[e.id]?this._streams[e.id].id:e.id],delete this._streams[e.id]},e.RTCPeerConnection.prototype.addTrack=function(t,n){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const r=[].slice.call(arguments,1);if(1!==r.length||!r[0].getTracks().find(e=>e===t))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find(e=>e.track===t))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const i=this._streams[n.id];if(i)i.addTrack(t),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const r=new e.MediaStream([t]);this._streams[n.id]=r,this._reverseStreams[r.id]=n,this.addStream(r)}return this.getSenders().find(e=>e.track===t)},["createOffer","createAnswer"].forEach(function(t){const n=e.RTCPeerConnection.prototype[t],r={[t](){const e=arguments;return arguments.length&&"function"==typeof arguments[0]?n.apply(this,[t=>{const n=o(this,t);e[0].apply(null,[n])},t=>{e[1]&&e[1].apply(null,t)},arguments[2]]):n.apply(this,arguments).then(e=>o(this,e))}};e.RTCPeerConnection.prototype[t]=r[t]});const s=e.RTCPeerConnection.prototype.setLocalDescription;e.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=function(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach(t=>{const r=e._reverseStreams[t],i=e._streams[r.id];n=n.replace(new RegExp(r.id,"g"),i.id)}),new RTCSessionDescription({type:t.type,sdp:n})}(this,arguments[0]),s.apply(this,arguments)):s.apply(this,arguments)};const a=Object.getOwnPropertyDescriptor(e.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(e.RTCPeerConnection.prototype,"localDescription",{get(){const e=a.get.apply(this);return""===e.type?e:o(this,e)}}),e.RTCPeerConnection.prototype.removeTrack=function(e){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!e._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(e._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");let t;this._streams=this._streams||{},Object.keys(this._streams).forEach(n=>{this._streams[n].getTracks().find(t=>e.track===t)&&(t=this._streams[n])}),t&&(1===t.getTracks().length?this.removeStream(this._reverseStreams[t.id]):t.removeTrack(e.track),this.dispatchEvent(new Event("negotiationneeded")))}}function j(e,t){!e.RTCPeerConnection&&e.webkitRTCPeerConnection&&(e.RTCPeerConnection=e.webkitRTCPeerConnection),e.RTCPeerConnection&&t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(t){const n=e.RTCPeerConnection.prototype[t],r={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=r[t]})}function U(e,t){T(e,"negotiationneeded",e=>{const n=e.target;if(!(t.version<72||n.getConfiguration&&"plan-b"===n.getConfiguration().sdpSemantics)||"stable"===n.signalingState)return e})}const F=Object.freeze(Object.defineProperty({__proto__:null,fixNegotiationNeeded:U,shimAddTrackRemoveTrack:N,shimAddTrackRemoveTrackWithNative:L,shimGetSendersWithDtmf:M,shimGetUserMedia:A,shimMediaStream:I,shimOnTrack:D,shimPeerConnection:j,shimSenderReceiverGetStats:x},Symbol.toStringTag,{value:"Module"}));function K(e,t){const n=e&&e.navigator,r=e&&e.MediaStreamTrack;if(n.getUserMedia=function(e,t,r){n.mediaDevices.getUserMedia(e).then(t,r)},!(t.version>55&&"autoGainControl"in n.mediaDevices.getSupportedConstraints())){const e=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])},t=n.mediaDevices.getUserMedia.bind(n.mediaDevices);if(n.mediaDevices.getUserMedia=function(n){return"object"==typeof n&&"object"==typeof n.audio&&(n=JSON.parse(JSON.stringify(n)),e(n.audio,"autoGainControl","mozAutoGainControl"),e(n.audio,"noiseSuppression","mozNoiseSuppression")),t(n)},r&&r.prototype.getSettings){const t=r.prototype.getSettings;r.prototype.getSettings=function(){const n=t.apply(this,arguments);return e(n,"mozAutoGainControl","autoGainControl"),e(n,"mozNoiseSuppression","noiseSuppression"),n}}if(r&&r.prototype.applyConstraints){const t=r.prototype.applyConstraints;r.prototype.applyConstraints=function(n){return"audio"===this.kind&&"object"==typeof n&&(n=JSON.parse(JSON.stringify(n)),e(n,"autoGainControl","mozAutoGainControl"),e(n,"noiseSuppression","mozNoiseSuppression")),t.apply(this,[n])}}}}function z(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function V(e,t){if("object"!=typeof e||!e.RTCPeerConnection&&!e.mozRTCPeerConnection)return;!e.RTCPeerConnection&&e.mozRTCPeerConnection&&(e.RTCPeerConnection=e.mozRTCPeerConnection),t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(t){const n=e.RTCPeerConnection.prototype[t],r={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=r[t]});const n={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},r=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){const[e,i,o]=arguments;return r.apply(this,[e||null]).then(e=>{if(t.version<53&&!i)try{e.forEach(e=>{e.type=n[e.type]||e.type})}catch(r){if("TypeError"!==r.name)throw r;e.forEach((t,r)=>{e.set(r,Object.assign({},t,{type:n[t.type]||t.type}))})}return e}).then(i,o)}}function W(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpSender.prototype)return;const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e});const n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function B(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpReceiver.prototype)return;const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e}),T(e,"track",e=>(e.receiver._pc=e.srcElement,e)),e.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function G(e){e.RTCPeerConnection&&!("removeStream"in e.RTCPeerConnection.prototype)&&(e.RTCPeerConnection.prototype.removeStream=function(e){this.getSenders().forEach(t=>{t.track&&e.getTracks().includes(t.track)&&this.removeTrack(t)})})}function H(e){e.DataChannel&&!e.RTCDataChannel&&(e.RTCDataChannel=e.DataChannel)}function J(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.addTransceiver;t&&(e.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let e=arguments[1]&&arguments[1].sendEncodings;void 0===e&&(e=[]),e=[...e];const n=e.length>0;n&&e.forEach(e=>{if("rid"in e){if(!/^[a-z0-9]{0,16}$/i.test(e.rid))throw new TypeError("Invalid RID value provided.")}if("scaleResolutionDownBy"in e&&!(parseFloat(e.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in e&&!(parseFloat(e.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const r=t.apply(this,arguments);if(n){const{sender:t}=r,n=t.getParameters();(!("encodings"in n)||// Avoid being fooled by patched getParameters() below.
25
+ */_(t,e.track,!0))}}if(!("getStats"in e.RTCRtpReceiver.prototype)){const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e}),T(e,"track",e=>(e.receiver._pc=e.srcElement,e)),e.RTCRtpReceiver.prototype.getStats=function(){const e=this;return this._pc.getStats().then(t=>_(t,e.track,!1))}}if(!("getStats"in e.RTCRtpSender.prototype)||!("getStats"in e.RTCRtpReceiver.prototype))return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof e.MediaStreamTrack){const e=arguments[0];let t,n,r;return this.getSenders().forEach(n=>{n.track===e&&(t?r=!0:t=n)}),this.getReceivers().forEach(t=>(t.track===e&&(n?r=!0:n=t),t.track===e)),r||t&&n?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):t?t.getStats():n?n.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return t.apply(this,arguments)}}function L(e){e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(e=>this._shimmedLocalStreams[e][0])};const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,n){if(!n)return t.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const r=t.apply(this,arguments);return this._shimmedLocalStreams[n.id]?-1===this._shimmedLocalStreams[n.id].indexOf(r)&&this._shimmedLocalStreams[n.id].push(r):this._shimmedLocalStreams[n.id]=[n,r],r};const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._shimmedLocalStreams=this._shimmedLocalStreams||{},e.getTracks().forEach(e=>{if(this.getSenders().find(t=>t.track===e))throw new DOMException("Track already exists.","InvalidAccessError")});const t=this.getSenders();n.apply(this,arguments);const r=this.getSenders().filter(e=>-1===t.indexOf(e));this._shimmedLocalStreams[e.id]=[e].concat(r)};const r=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[e.id],r.apply(this,arguments)};const i=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},e&&Object.keys(this._shimmedLocalStreams).forEach(t=>{const n=this._shimmedLocalStreams[t].indexOf(e);-1!==n&&this._shimmedLocalStreams[t].splice(n,1),1===this._shimmedLocalStreams[t].length&&delete this._shimmedLocalStreams[t]}),i.apply(this,arguments)}}function N(e,t){if(!e.RTCPeerConnection)return;if(e.RTCPeerConnection.prototype.addTrack&&t.version>=65)return L(e);const n=e.RTCPeerConnection.prototype.getLocalStreams;e.RTCPeerConnection.prototype.getLocalStreams=function(){const e=n.apply(this);return this._reverseStreams=this._reverseStreams||{},e.map(e=>this._reverseStreams[e.id])};const r=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(t){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},t.getTracks().forEach(e=>{if(this.getSenders().find(t=>t.track===e))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[t.id]){const n=new e.MediaStream(t.getTracks());this._streams[t.id]=n,this._reverseStreams[n.id]=t,t=n}r.apply(this,[t])};const i=e.RTCPeerConnection.prototype.removeStream;function o(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach(t=>{const r=e._reverseStreams[t],i=e._streams[r.id];n=n.replace(new RegExp(i.id,"g"),r.id)}),new RTCSessionDescription({type:t.type,sdp:n})}e.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},i.apply(this,[this._streams[e.id]||e]),delete this._reverseStreams[this._streams[e.id]?this._streams[e.id].id:e.id],delete this._streams[e.id]},e.RTCPeerConnection.prototype.addTrack=function(t,n){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const r=[].slice.call(arguments,1);if(1!==r.length||!r[0].getTracks().find(e=>e===t))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find(e=>e.track===t))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const i=this._streams[n.id];if(i)i.addTrack(t),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const r=new e.MediaStream([t]);this._streams[n.id]=r,this._reverseStreams[r.id]=n,this.addStream(r)}return this.getSenders().find(e=>e.track===t)},["createOffer","createAnswer"].forEach(function(t){const n=e.RTCPeerConnection.prototype[t],r={[t](){const e=arguments;return arguments.length&&"function"==typeof arguments[0]?n.apply(this,[t=>{const n=o(this,t);e[0].apply(null,[n])},t=>{e[1]&&e[1].apply(null,t)},arguments[2]]):n.apply(this,arguments).then(e=>o(this,e))}};e.RTCPeerConnection.prototype[t]=r[t]});const s=e.RTCPeerConnection.prototype.setLocalDescription;e.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=function(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach(t=>{const r=e._reverseStreams[t],i=e._streams[r.id];n=n.replace(new RegExp(r.id,"g"),i.id)}),new RTCSessionDescription({type:t.type,sdp:n})}(this,arguments[0]),s.apply(this,arguments)):s.apply(this,arguments)};const a=Object.getOwnPropertyDescriptor(e.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(e.RTCPeerConnection.prototype,"localDescription",{get(){const e=a.get.apply(this);return""===e.type?e:o(this,e)}}),e.RTCPeerConnection.prototype.removeTrack=function(e){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!e._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(e._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");let t;this._streams=this._streams||{},Object.keys(this._streams).forEach(n=>{this._streams[n].getTracks().find(t=>e.track===t)&&(t=this._streams[n])}),t&&(1===t.getTracks().length?this.removeStream(this._reverseStreams[t.id]):t.removeTrack(e.track),this.dispatchEvent(new Event("negotiationneeded")))}}function j(e,t){!e.RTCPeerConnection&&e.webkitRTCPeerConnection&&(e.RTCPeerConnection=e.webkitRTCPeerConnection),e.RTCPeerConnection&&t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(t){const n=e.RTCPeerConnection.prototype[t],r={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=r[t]})}function U(e,t){T(e,"negotiationneeded",e=>{const n=e.target;if(!(t.version<72||n.getConfiguration&&"plan-b"===n.getConfiguration().sdpSemantics)||"stable"===n.signalingState)return e})}const F=Object.freeze(Object.defineProperty({__proto__:null,fixNegotiationNeeded:U,shimAddTrackRemoveTrack:N,shimAddTrackRemoveTrackWithNative:L,shimGetSendersWithDtmf:M,shimGetUserMedia:O,shimMediaStream:I,shimOnTrack:D,shimPeerConnection:j,shimSenderReceiverGetStats:x},Symbol.toStringTag,{value:"Module"}));function K(e,t){const n=e&&e.navigator,r=e&&e.MediaStreamTrack;if(n.getUserMedia=function(e,t,r){n.mediaDevices.getUserMedia(e).then(t,r)},!(t.version>55&&"autoGainControl"in n.mediaDevices.getSupportedConstraints())){const e=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])},t=n.mediaDevices.getUserMedia.bind(n.mediaDevices);if(n.mediaDevices.getUserMedia=function(n){return"object"==typeof n&&"object"==typeof n.audio&&(n=JSON.parse(JSON.stringify(n)),e(n.audio,"autoGainControl","mozAutoGainControl"),e(n.audio,"noiseSuppression","mozNoiseSuppression")),t(n)},r&&r.prototype.getSettings){const t=r.prototype.getSettings;r.prototype.getSettings=function(){const n=t.apply(this,arguments);return e(n,"mozAutoGainControl","autoGainControl"),e(n,"mozNoiseSuppression","noiseSuppression"),n}}if(r&&r.prototype.applyConstraints){const t=r.prototype.applyConstraints;r.prototype.applyConstraints=function(n){return"audio"===this.kind&&"object"==typeof n&&(n=JSON.parse(JSON.stringify(n)),e(n,"autoGainControl","mozAutoGainControl"),e(n,"noiseSuppression","mozNoiseSuppression")),t.apply(this,[n])}}}}function z(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function V(e,t){if("object"!=typeof e||!e.RTCPeerConnection&&!e.mozRTCPeerConnection)return;!e.RTCPeerConnection&&e.mozRTCPeerConnection&&(e.RTCPeerConnection=e.mozRTCPeerConnection),t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(t){const n=e.RTCPeerConnection.prototype[t],r={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=r[t]});const n={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},r=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){const[e,i,o]=arguments;return r.apply(this,[e||null]).then(e=>{if(t.version<53&&!i)try{e.forEach(e=>{e.type=n[e.type]||e.type})}catch(r){if("TypeError"!==r.name)throw r;e.forEach((t,r)=>{e.set(r,Object.assign({},t,{type:n[t.type]||t.type}))})}return e}).then(i,o)}}function W(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpSender.prototype)return;const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e});const n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function B(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpReceiver.prototype)return;const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e}),T(e,"track",e=>(e.receiver._pc=e.srcElement,e)),e.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function G(e){e.RTCPeerConnection&&!("removeStream"in e.RTCPeerConnection.prototype)&&(e.RTCPeerConnection.prototype.removeStream=function(e){this.getSenders().forEach(t=>{t.track&&e.getTracks().includes(t.track)&&this.removeTrack(t)})})}function H(e){e.DataChannel&&!e.RTCDataChannel&&(e.RTCDataChannel=e.DataChannel)}function J(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.addTransceiver;t&&(e.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let e=arguments[1]&&arguments[1].sendEncodings;void 0===e&&(e=[]),e=[...e];const n=e.length>0;n&&e.forEach(e=>{if("rid"in e){if(!/^[a-z0-9]{0,16}$/i.test(e.rid))throw new TypeError("Invalid RID value provided.")}if("scaleResolutionDownBy"in e&&!(parseFloat(e.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in e&&!(parseFloat(e.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const r=t.apply(this,arguments);if(n){const{sender:t}=r,n=t.getParameters();(!("encodings"in n)||// Avoid being fooled by patched getParameters() below.
26
26
  1===n.encodings.length&&0===Object.keys(n.encodings[0]).length)&&(n.encodings=e,t.sendEncodings=e,this.setParametersPromises.push(t.setParameters(n).then(()=>{delete t.sendEncodings}).catch(()=>{delete t.sendEncodings})))}return r})}function q(e){if("object"!=typeof e||!e.RTCRtpSender)return;const t=e.RTCRtpSender.prototype.getParameters;t&&(e.RTCRtpSender.prototype.getParameters=function(){const e=t.apply(this,arguments);return"encodings"in e||(e.encodings=[].concat(this.sendEncodings||[{}])),e})}function Q(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>t.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):t.apply(this,arguments)}}function $(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.createAnswer;e.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>t.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):t.apply(this,arguments)}}const X=Object.freeze(Object.defineProperty({__proto__:null,shimAddTransceiver:J,shimCreateAnswer:$,shimCreateOffer:Q,shimGetDisplayMedia:function(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&(e.navigator.mediaDevices.getDisplayMedia=function(n){if(!n||!n.video){const e=new DOMException("getDisplayMedia without video constraints is undefined");return e.name="NotFoundError",e.code=8,Promise.reject(e)}return!0===n.video?n.video={mediaSource:t}:n.video.mediaSource=t,e.navigator.mediaDevices.getUserMedia(n)})},shimGetParameters:q,shimGetUserMedia:K,shimOnTrack:z,shimPeerConnection:V,shimRTCDataChannel:H,shimReceiverGetStats:B,shimRemoveStream:G,shimSenderGetStats:W},Symbol.toStringTag,{value:"Module"}));function Y(e){if("object"==typeof e&&e.RTCPeerConnection){if("getLocalStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in e.RTCPeerConnection.prototype)){const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addStream=function(e){this._localStreams||(this._localStreams=[]),this._localStreams.includes(e)||this._localStreams.push(e),e.getAudioTracks().forEach(n=>t.call(this,n,e)),e.getVideoTracks().forEach(n=>t.call(this,n,e))},e.RTCPeerConnection.prototype.addTrack=function(e,...n){return n&&n.forEach(e=>{this._localStreams?this._localStreams.includes(e)||this._localStreams.push(e):this._localStreams=[e]}),t.apply(this,arguments)}}"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(e){this._localStreams||(this._localStreams=[]);const t=this._localStreams.indexOf(e);if(-1===t)return;this._localStreams.splice(t,1);const n=e.getTracks();this.getSenders().forEach(e=>{n.includes(e.track)&&this.removeTrack(e)})})}}function Z(e){if("object"==typeof e&&e.RTCPeerConnection&&("getRemoteStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in e.RTCPeerConnection.prototype))){Object.defineProperty(e.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(e){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=e),this.addEventListener("track",this._onaddstreampoly=e=>{e.streams.forEach(e=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(e))return;this._remoteStreams.push(e);const t=new Event("addstream");t.stream=e,this.dispatchEvent(t)})})}});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){const e=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(t){t.streams.forEach(t=>{if(e._remoteStreams||(e._remoteStreams=[]),e._remoteStreams.indexOf(t)>=0)return;e._remoteStreams.push(t);const n=new Event("addstream");n.stream=t,e.dispatchEvent(n)})}),t.apply(e,arguments)}}}function ee(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype,n=t.createOffer,r=t.createAnswer,i=t.setLocalDescription,o=t.setRemoteDescription,s=t.addIceCandidate;t.createOffer=function(e,t){const r=arguments.length>=2?arguments[2]:arguments[0],i=n.apply(this,[r]);return t?(i.then(e,t),Promise.resolve()):i},t.createAnswer=function(e,t){const n=arguments.length>=2?arguments[2]:arguments[0],i=r.apply(this,[n]);return t?(i.then(e,t),Promise.resolve()):i};let a=function(e,t,n){const r=i.apply(this,[e]);return n?(r.then(t,n),Promise.resolve()):r};t.setLocalDescription=a,a=function(e,t,n){const r=o.apply(this,[e]);return n?(r.then(t,n),Promise.resolve()):r},t.setRemoteDescription=a,a=function(e,t,n){const r=s.apply(this,[e]);return n?(r.then(t,n),Promise.resolve()):r},t.addIceCandidate=a}function te(e){const t=e&&e.navigator;if(t.mediaDevices&&t.mediaDevices.getUserMedia){const e=t.mediaDevices,n=e.getUserMedia.bind(e);t.mediaDevices.getUserMedia=e=>n(ne(e))}!t.getUserMedia&&t.mediaDevices&&t.mediaDevices.getUserMedia&&(t.getUserMedia=function(e,n,r){t.mediaDevices.getUserMedia(e).then(n,r)}.bind(t))}function ne(e){return e&&void 0!==e.video?Object.assign({},e,{video:P(e.video)}):e}function re(e){if(!e.RTCPeerConnection)return;const t=e.RTCPeerConnection;e.RTCPeerConnection=function(e,n){if(e&&e.iceServers){const t=[];for(let n=0;n<e.iceServers.length;n++){let r=e.iceServers[n];void 0===r.urls&&r.url?(w(),r=JSON.parse(JSON.stringify(r)),r.urls=r.url,delete r.url,t.push(r)):t.push(e.iceServers[n])}e.iceServers=t}return new t(e,n)},e.RTCPeerConnection.prototype=t.prototype,"generateCertificate"in t&&Object.defineProperty(e.RTCPeerConnection,"generateCertificate",{get:()=>t.generateCertificate})}function ie(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function oe(e){const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(e){if(e){void 0!==e.offerToReceiveAudio&&(e.offerToReceiveAudio=!!e.offerToReceiveAudio);const t=this.getTransceivers().find(e=>"audio"===e.receiver.track.kind);!1===e.offerToReceiveAudio&&t?"sendrecv"===t.direction?t.setDirection?t.setDirection("sendonly"):t.direction="sendonly":"recvonly"===t.direction&&(t.setDirection?t.setDirection("inactive"):t.direction="inactive"):!0!==e.offerToReceiveAudio||t||this.addTransceiver("audio",{direction:"recvonly"}),void 0!==e.offerToReceiveVideo&&(e.offerToReceiveVideo=!!e.offerToReceiveVideo);const n=this.getTransceivers().find(e=>"video"===e.receiver.track.kind);!1===e.offerToReceiveVideo&&n?"sendrecv"===n.direction?n.setDirection?n.setDirection("sendonly"):n.direction="sendonly":"recvonly"===n.direction&&(n.setDirection?n.setDirection("inactive"):n.direction="inactive"):!0!==e.offerToReceiveVideo||n||this.addTransceiver("video",{direction:"recvonly"})}return t.apply(this,arguments)}}function se(e){"object"!=typeof e||e.AudioContext||(e.AudioContext=e.webkitAudioContext)}const ae=Object.freeze(Object.defineProperty({__proto__:null,shimAudioContext:se,shimCallbacksAPI:ee,shimConstraints:ne,shimCreateOfferLegacy:oe,shimGetUserMedia:te,shimLocalStreamsAPI:Y,shimRTCIceServerUrls:re,shimRemoteStreamsAPI:Z,shimTrackEventTransceiver:ie},Symbol.toStringTag,{value:"Module"}));var ce,de={exports:{}};var le=(ce||(ce=1,function(e){const t={generateIdentifier:function(){return Math.random().toString(36).substring(2,12)}};t.localCName=t.generateIdentifier(),t.splitLines=function(e){return e.trim().split("\n").map(e=>e.trim())},t.splitSections=function(e){return e.split("\nm=").map((e,t)=>(t>0?"m="+e:e).trim()+"\r\n")},t.getDescription=function(e){const n=t.splitSections(e);return n&&n[0]},t.getMediaSections=function(e){const n=t.splitSections(e);return n.shift(),n},t.matchPrefix=function(e,n){return t.splitLines(e).filter(e=>0===e.indexOf(n))},t.parseCandidate=function(e){let t;t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" ");const n={foundation:t[0],component:{1:"rtp",2:"rtcp"}[t[1]]||t[1],protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],address:t[4],
27
27
  // address is an alias for ip.
28
28
  port:parseInt(t[5],10),
@@ -31,7 +31,7 @@ type:t[7]};for(let r=8;r<t.length;r+=2)switch(t[r]){case"raddr":n.relatedAddress
31
31
  // algorithm is case-sensitive in Edge.
32
32
  value:t[1].toUpperCase()}},t.getDtlsParameters=function(e,n){return{role:"auto",fingerprints:t.matchPrefix(e+n,"a=fingerprint:").map(t.parseFingerprint)}},t.writeDtlsParameters=function(e,t){let n="a=setup:"+t+"\r\n";return e.fingerprints.forEach(e=>{n+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"}),n},t.parseCryptoLine=function(e){const t=e.substring(9).split(" ");return{tag:parseInt(t[0],10),cryptoSuite:t[1],keyParams:t[2],sessionParams:t.slice(3)}},t.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+("object"==typeof e.keyParams?t.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+"\r\n"},t.parseCryptoKeyParams=function(e){if(0!==e.indexOf("inline:"))return null;const t=e.substring(7).split("|");return{keyMethod:"inline",keySalt:t[0],lifeTime:t[1],mkiValue:t[2]?t[2].split(":")[0]:void 0,mkiLength:t[2]?t[2].split(":")[1]:void 0}},t.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")},t.getCryptoParameters=function(e,n){return t.matchPrefix(e+n,"a=crypto:").map(t.parseCryptoLine)},t.getIceParameters=function(e,n){const r=t.matchPrefix(e+n,"a=ice-ufrag:")[0],i=t.matchPrefix(e+n,"a=ice-pwd:")[0];return r&&i?{usernameFragment:r.substring(12),password:i.substring(10)}:null},t.writeIceParameters=function(e){let t="a=ice-ufrag:"+e.usernameFragment+"\r\na=ice-pwd:"+e.password+"\r\n";return e.iceLite&&(t+="a=ice-lite\r\n"),t},t.parseRtpParameters=function(e){const n={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},r=t.splitLines(e)[0].split(" ");n.profile=r[2];for(let o=3;o<r.length;o++){const i=r[o],s=t.matchPrefix(e,"a=rtpmap:"+i+" ")[0];if(s){const r=t.parseRtpMap(s),o=t.matchPrefix(e,"a=fmtp:"+i+" ");switch(r.parameters=o.length?t.parseFmtp(o[0]):{},r.rtcpFeedback=t.matchPrefix(e,"a=rtcp-fb:"+i+" ").map(t.parseRtcpFb),n.codecs.push(r),r.name.toUpperCase()){case"RED":case"ULPFEC":n.fecMechanisms.push(r.name.toUpperCase())}}}t.matchPrefix(e,"a=extmap:").forEach(e=>{n.headerExtensions.push(t.parseExtmap(e))});const i=t.matchPrefix(e,"a=rtcp-fb:* ").map(t.parseRtcpFb);return n.codecs.forEach(e=>{i.forEach(t=>{e.rtcpFeedback.find(e=>e.type===t.type&&e.parameter===t.parameter)||e.rtcpFeedback.push(t)})}),n},t.writeRtpDescription=function(e,n){let r="";r+="m="+e+" ",r+=n.codecs.length>0?"9":"0",r+=" "+(n.profile||"UDP/TLS/RTP/SAVPF")+" ",r+=n.codecs.map(e=>void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType).join(" ")+"\r\n",r+="c=IN IP4 0.0.0.0\r\n",r+="a=rtcp:9 IN IP4 0.0.0.0\r\n",n.codecs.forEach(e=>{r+=t.writeRtpMap(e),r+=t.writeFmtp(e),r+=t.writeRtcpFb(e)});let i=0;return n.codecs.forEach(e=>{e.maxptime>i&&(i=e.maxptime)}),i>0&&(r+="a=maxptime:"+i+"\r\n"),n.headerExtensions&&n.headerExtensions.forEach(e=>{r+=t.writeExtmap(e)}),r},t.parseRtpEncodingParameters=function(e){const n=[],r=t.parseRtpParameters(e),i=-1!==r.fecMechanisms.indexOf("RED"),o=-1!==r.fecMechanisms.indexOf("ULPFEC"),s=t.matchPrefix(e,"a=ssrc:").map(e=>t.parseSsrcMedia(e)).filter(e=>"cname"===e.attribute),a=s.length>0&&s[0].ssrc;let c;const d=t.matchPrefix(e,"a=ssrc-group:FID").map(e=>e.substring(17).split(" ").map(e=>parseInt(e,10)));d.length>0&&d[0].length>1&&d[0][0]===a&&(c=d[0][1]),r.codecs.forEach(e=>{if("RTX"===e.name.toUpperCase()&&e.parameters.apt){let t={ssrc:a,codecPayloadType:parseInt(e.parameters.apt,10)};a&&c&&(t.rtx={ssrc:c}),n.push(t),i&&(t=JSON.parse(JSON.stringify(t)),t.fec={ssrc:a,mechanism:o?"red+ulpfec":"red"},n.push(t))}}),0===n.length&&a&&n.push({ssrc:a});let l=t.matchPrefix(e,"b=");return l.length&&(l=0===l[0].indexOf("b=TIAS:")?parseInt(l[0].substring(7),10):0===l[0].indexOf("b=AS:")?1e3*parseInt(l[0].substring(5),10)*.95-16e3:void 0,n.forEach(e=>{e.maxBitrate=l})),n},t.parseRtcpParameters=function(e){const n={},r=t.matchPrefix(e,"a=ssrc:").map(e=>t.parseSsrcMedia(e)).filter(e=>"cname"===e.attribute)[0];r&&(n.cname=r.value,n.ssrc=r.ssrc);const i=t.matchPrefix(e,"a=rtcp-rsize");n.reducedSize=i.length>0,n.compound=0===i.length;const o=t.matchPrefix(e,"a=rtcp-mux");return n.mux=o.length>0,n},t.writeRtcpParameters=function(e){let t="";return e.reducedSize&&(t+="a=rtcp-rsize\r\n"),e.mux&&(t+="a=rtcp-mux\r\n"),void 0!==e.ssrc&&e.cname&&(t+="a=ssrc:"+e.ssrc+" cname:"+e.cname+"\r\n"),t},t.parseMsid=function(e){let n;const r=t.matchPrefix(e,"a=msid:");if(1===r.length)return n=r[0].substring(7).split(" "),{stream:n[0],track:n[1]};const i=t.matchPrefix(e,"a=ssrc:").map(e=>t.parseSsrcMedia(e)).filter(e=>"msid"===e.attribute);return i.length>0?(n=i[0].value.split(" "),{stream:n[0],track:n[1]}):void 0},t.parseSctpDescription=function(e){const n=t.parseMLine(e),r=t.matchPrefix(e,"a=max-message-size:");let i;r.length>0&&(i=parseInt(r[0].substring(19),10)),isNaN(i)&&(i=65536);const o=t.matchPrefix(e,"a=sctp-port:");if(o.length>0)return{port:parseInt(o[0].substring(12),10),protocol:n.fmt,maxMessageSize:i};const s=t.matchPrefix(e,"a=sctpmap:");if(s.length>0){const e=s[0].substring(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:i}}},t.writeSctpDescription=function(e,t){let n=[];return n="DTLS/SCTP"!==e.protocol?["m="+e.kind+" 9 "+e.protocol+" "+t.protocol+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctp-port:"+t.port+"\r\n"]:["m="+e.kind+" 9 "+e.protocol+" "+t.port+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctpmap:"+t.port+" "+t.protocol+" 65535\r\n"],void 0!==t.maxMessageSize&&n.push("a=max-message-size:"+t.maxMessageSize+"\r\n"),n.join("")},t.generateSessionId=function(){return Math.random().toString().substr(2,22)},t.writeSessionBoilerplate=function(e,n,r){let i;const o=void 0!==n?n:2;return i=e||t.generateSessionId(),"v=0\r\no="+(r||"thisisadapterortc")+" "+i+" "+o+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},t.getDirection=function(e,n){const r=t.splitLines(e);for(let t=0;t<r.length;t++)switch(r[t]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return r[t].substring(2)}return n?t.getDirection(n):"sendrecv"},t.getKind=function(e){return t.splitLines(e)[0].split(" ")[0].substring(2)},t.isRejected=function(e){return"0"===e.split(" ",2)[1]},t.parseMLine=function(e){const n=t.splitLines(e)[0].substring(2).split(" ");return{kind:n[0],port:parseInt(n[1],10),protocol:n[2],fmt:n.slice(3).join(" ")}},t.parseOLine=function(e){const n=t.matchPrefix(e,"o=")[0].substring(2).split(" ");return{username:n[0],sessionId:n[1],sessionVersion:parseInt(n[2],10),netType:n[3],addressType:n[4],address:n[5]}},t.isValidSDP=function(e){if("string"!=typeof e||0===e.length)return!1;const n=t.splitLines(e);for(let t=0;t<n.length;t++)if(n[t].length<2||"="!==n[t].charAt(1))return!1;return!0},e.exports=t}(de)),de.exports);const he=o(le),pe=i({__proto__:null,default:he},[le]);function ue(e){if(!e.RTCIceCandidate||e.RTCIceCandidate&&"foundation"in e.RTCIceCandidate.prototype)return;const t=e.RTCIceCandidate;e.RTCIceCandidate=function(e){if("object"==typeof e&&e.candidate&&0===e.candidate.indexOf("a=")&&((e=JSON.parse(JSON.stringify(e))).candidate=e.candidate.substring(2)),e.candidate&&e.candidate.length){const n=new t(e),r=he.parseCandidate(e.candidate);for(const e in r)e in n||Object.defineProperty(n,e,{value:r[e]});return n.toJSON=function(){return{candidate:n.candidate,sdpMid:n.sdpMid,sdpMLineIndex:n.sdpMLineIndex,usernameFragment:n.usernameFragment}},n}return new t(e)},e.RTCIceCandidate.prototype=t.prototype,T(e,"icecandidate",t=>(t.candidate&&Object.defineProperty(t,"candidate",{value:new e.RTCIceCandidate(t.candidate),writable:"false"}),t))}function fe(e){!e.RTCIceCandidate||e.RTCIceCandidate&&"relayProtocol"in e.RTCIceCandidate.prototype||T(e,"icecandidate",e=>{if(e.candidate){const t=he.parseCandidate(e.candidate.candidate);"relay"===t.type&&(e.candidate.relayProtocol={0:"tls",1:"tcp",2:"udp"}[t.priority>>24])}return e})}function me(e,t){if(!e.RTCPeerConnection)return;"sctp"in e.RTCPeerConnection.prototype||Object.defineProperty(e.RTCPeerConnection.prototype,"sctp",{get(){return void 0===this._sctp?null:this._sctp}});const n=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,"chrome"===t.browser&&t.version>=76){const{sdpSemantics:e}=this.getConfiguration();"plan-b"===e&&Object.defineProperty(this,"sctp",{get(){return void 0===this._sctp?null:this._sctp},enumerable:!0,configurable:!0})}if(function(e){if(!e||!e.sdp)return!1;const t=he.splitSections(e.sdp);return t.shift(),t.some(e=>{const t=he.parseMLine(e);return t&&"application"===t.kind&&-1!==t.protocol.indexOf("SCTP")})}(arguments[0])){const e=function(e){const t=e.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(null===t||t.length<2)return-1;const n=parseInt(t[1],10);return n!=n?-1:n}(arguments[0]),n=function(e){let n=65536;return"firefox"===t.browser&&(n=t.version<57?-1===e?16384:2147483637:t.version<60?57===t.version?65535:65536:2147483637),n}(e),r=function(e,n){let r=65536;"firefox"===t.browser&&57===t.version&&(r=65535);const i=he.matchPrefix(e.sdp,"a=max-message-size:");return i.length>0?r=parseInt(i[0].substring(19),10):"firefox"===t.browser&&-1!==n&&(r=2147483637),r}(arguments[0],e);let i;i=0===n&&0===r?Number.POSITIVE_INFINITY:0===n||0===r?Math.max(n,r):Math.min(n,r);const o={};Object.defineProperty(o,"maxMessageSize",{get:()=>i}),this._sctp=o}return n.apply(this,arguments)}}function Ce(e){if(!e.RTCPeerConnection||!("createDataChannel"in e.RTCPeerConnection.prototype))return;function t(e,t){const n=e.send;e.send=function(){const r=arguments[0],i=r.length||r.size||r.byteLength;if("open"===e.readyState&&t.sctp&&i>t.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+t.sctp.maxMessageSize+" bytes)");return n.apply(e,arguments)}}const n=e.RTCPeerConnection.prototype.createDataChannel;e.RTCPeerConnection.prototype.createDataChannel=function(){const e=n.apply(this,arguments);return t(e,this),e},T(e,"datachannel",e=>(t(e.channel,e.target),e))}function ge(e){if(!e.RTCPeerConnection||"connectionState"in e.RTCPeerConnection.prototype)return;const t=e.RTCPeerConnection.prototype;Object.defineProperty(t,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(t,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(e){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),e&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=e)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(e=>{const n=t[e];t[e]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=e=>{const t=e.target;if(t._lastConnectionState!==t.connectionState){t._lastConnectionState=t.connectionState;const n=new Event("connectionstatechange",e);t.dispatchEvent(n)}return e},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),n.apply(this,arguments)}})}function ye(e,t){if(!e.RTCPeerConnection)return;if("chrome"===t.browser&&t.version>=71)return;if("safari"===t.browser&&t._safariVersion>=13.1)return;const n=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(t){if(t&&t.sdp&&-1!==t.sdp.indexOf("\na=extmap-allow-mixed")){const n=t.sdp.split("\n").filter(e=>"a=extmap-allow-mixed"!==e.trim()).join("\n");e.RTCSessionDescription&&t instanceof e.RTCSessionDescription?arguments[0]=new e.RTCSessionDescription({type:t.type,sdp:n}):t.sdp=n}return n.apply(this,arguments)}}function ve(e,t){if(!e.RTCPeerConnection||!e.RTCPeerConnection.prototype)return;const n=e.RTCPeerConnection.prototype.addIceCandidate;n&&0!==n.length&&(e.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?("chrome"===t.browser&&t.version<78||"firefox"===t.browser&&t.version<68||"safari"===t.browser)&&arguments[0]&&""===arguments[0].candidate?Promise.resolve():n.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function Te(e,t){if(!e.RTCPeerConnection||!e.RTCPeerConnection.prototype)return;const n=e.RTCPeerConnection.prototype.setLocalDescription;n&&0!==n.length&&(e.RTCPeerConnection.prototype.setLocalDescription=function(){let e=arguments[0]||{};if("object"!=typeof e||e.type&&e.sdp)return n.apply(this,arguments);if(e={type:e.type,sdp:e.sdp},!e.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":e.type="offer";break;default:e.type="answer"}if(e.sdp||"offer"!==e.type&&"answer"!==e.type)return n.apply(this,[e]);return("offer"===e.type?this.createOffer:this.createAnswer).apply(this).then(e=>n.apply(this,[e]))})}const Se=Object.freeze(Object.defineProperty({__proto__:null,removeExtmapAllowMixed:ye,shimAddIceCandidateNullOrEmpty:ve,shimConnectionState:ge,shimMaxMessageSize:me,shimParameterlessSetLocalDescription:Te,shimRTCIceCandidate:ue,shimRTCIceCandidateRelayProtocol:fe,shimSendThrowTypeError:Ce},Symbol.toStringTag,{value:"Module"}));!function({window:e}={},t={shimChrome:!0,shimFirefox:!0,shimSafari:!0}){const n=b,r=function(e){const t={browser:null,version:null};if(void 0===e||!e.navigator||!e.navigator.userAgent)return t.browser="Not a browser.",t;const{navigator:n}=e;if(n.userAgentData&&n.userAgentData.brands){const e=n.userAgentData.brands.find(e=>"Chromium"===e.brand);if(e)return{browser:"chrome",version:parseInt(e.version,10)}}if(n.mozGetUserMedia)t.browser="firefox",t.version=parseInt(v(n.userAgent,/Firefox\/(\d+)\./,1));else if(n.webkitGetUserMedia||!1===e.isSecureContext&&e.webkitRTCPeerConnection)t.browser="chrome",t.version=parseInt(v(n.userAgent,/Chrom(e|ium)\/(\d+)\./,2));else{if(!e.RTCPeerConnection||!n.userAgent.match(/AppleWebKit\/(\d+)\./))return t.browser="Not a supported browser.",t;t.browser="safari",t.version=parseInt(v(n.userAgent,/AppleWebKit\/(\d+)\./,1)),t.supportsUnifiedPlan=e.RTCRtpTransceiver&&"currentDirection"in e.RTCRtpTransceiver.prototype,t._safariVersion=v(n.userAgent,/Version\/(\d+(\.?\d+))/,1)}return t}(e),i={browserDetails:r,commonShim:Se,extractVersion:v,disableLog:S,disableWarnings:R,
33
33
  // Expose sdp as a convenience. For production apps include directly.
34
- sdp:pe};switch(r.browser){case"chrome":if(!F||!j||!t.shimChrome)return n("Chrome shim is not included in this adapter release."),i;if(null===r.version)return n("Chrome shim can not determine version, not shimming."),i;n("adapter.js shimming chrome."),i.browserShim=F,ve(e,r),Te(e),A(e,r),I(e),j(e,r),D(e),N(e,r),M(e),x(e),U(e,r),ue(e),fe(e),ge(e),me(e,r),Ce(e),ye(e,r);break;case"firefox":if(!X||!V||!t.shimFirefox)return n("Firefox shim is not included in this adapter release."),i;n("adapter.js shimming firefox."),i.browserShim=X,ve(e,r),Te(e),K(e,r),V(e,r),z(e),G(e),W(e),B(e),H(e),J(e),q(e),Q(e),$(e),ue(e),ge(e),me(e,r),Ce(e);break;case"safari":if(!ae||!t.shimSafari)return n("Safari shim is not included in this adapter release."),i;n("adapter.js shimming safari."),i.browserShim=ae,ve(e,r),Te(e),re(e),oe(e),ee(e),Y(e),Z(e),ie(e),te(e),se(e),ue(e),fe(e),me(e,r),Ce(e),ye(e,r);break;default:n("Unsupported browser!")}}({window:"undefined"==typeof window?void 0:window});class Re{constructor(e){r(this,"signalServerUrl"),r(this,"myId"),r(this,"roomId"),r(this,"targetId"),r(this,"stunServerUri"),r(this,"stunServerUriAli"),r(this,"stunServerUriTel"),r(this,"turnServerUri"),r(this,"turnServerUserName"),r(this,"turnServerPassword"),r(this,"isControl"),r(this,"screenshotWidth"),r(this,"screenshotHeight"),r(this,"screenshotQuality"),r(this,"token"),r(this,"isGroup"),r(this,"turnKey"),this.signalServerUrl=e.signalServerUrl||"",this.myId=e.myId||"",this.roomId=e.roomId||"",this.targetId=e.targetId||"",this.turnKey=e.turnKey||[],this.stunServerUri=e.stunServerUri||"stun:stun.l.google.com:19302",this.stunServerUriAli=e.stunServerUriAli||"stun:stun.middle.aliyun.com:3478",this.stunServerUriTel=e.stunServerUriTel||"stun:stun.qq.com:3478",this.turnServerUri=e.turnServerUri||"turn:121.37.25.106:3478",this.turnServerUserName=e.turnServerUserName||"yangyj",this.turnServerPassword=e.turnServerPassword||"hb@2025@168",this.isControl=e.isControl??!0,this.screenshotWidth=e.screenshotWidth||144,this.screenshotHeight=e.screenshotHeight||256,this.screenshotQuality=e.screenshotQuality||20,this.token=e.token,this.isGroup=e.isGroup}}const be=(e,t,n)=>{e.createAnswer().then(r=>we(e,r,t,n)).catch(e=>null==n?void 0:n(f(p.CREATE_ANSWER,e)))},we=(e,t,n,r)=>{e.setLocalDescription(t).then(()=>{null==n||n(t.sdp??"")}).catch(e=>{null==r||r(f(p.LOCAL_DES,e))})},Ee=(e,t,n)=>{e.createOffer().then(r=>Pe(e,r,t,n)).catch(e=>null==n?void 0:n(f(p.CREATE_OFFER,e)))},Pe=(e,t,n,r)=>{e.setLocalDescription(t).then(()=>n(t.sdp??"")).catch(e=>null==r?void 0:r(f(p.LOCAL_DES,e)))};var ke=(e=>(e.ClickData="ClickData",e.ClipboardData="ClipboardData",e.ActionCommand="ActionCommand",e.ActionInput="ActionInput",e.ActionChinese="ActionChinese",e.ActionRequestCloudDeviceInfo="ActionRequestCloudDeviceInfo",e.ActionClarity="ActionClarity",e.ActionWheel="ActionWheel",e.CloudClipData="CloudClipData",e.ActionCommandEvent="ActionCommandEvent",e.ActionUpdateCloudStatus="ActionUpdateCloudStatus",e.ActionGesture="ActionGesture",e.ActionTrack="ActionTrack",e))(ke||{}),_e=(e=>(e.ENABLE="ENABLE",e.DISABLE="DISABLE",e))(_e||{}),Oe=(e=>(e.ActionBack="ActionBack",e.ActionHome="ActionHome",e.ActionRecent="ActionRecent",e.ActionSwitchNavButtons="ActionSwitchNavButtons",e.ActionSwitchNavGestural="ActionSwitchNavGestural",e))(Oe||{}),Ae=(e=>(e.ACTION_CONTROL_VIDEO_AND_AUDIO="ACTION_CONTROL_VIDEO_AND_AUDIO",e.ACTION_CONTROL_VIDEO="ACTION_CONTROL_VIDEO",e.ACTION_CONTROL_AUDIO="ACTION_CONTROL_AUDIO",e))(Ae||{});const Ie={ACTION_DOWN:0,ACTION_MOVE:2,ACTION_UP:1},De={ROTATION_0:0,ROTATION_180:2},Me={Vertical:0,Horizontal:1};class xe{constructor(e,t,n,i,o,s="adb"){r(this,"action"),r(this,"p"),r(this,"x"),r(this,"y"),r(this,"offsetTime"),r(this,"type"),this.action=e,this.p=t,this.x=n,this.y=i,this.offsetTime=o,this.type=s}}class Le{constructor(e){r(this,"axis"),this.axis=e}}class Ne{constructor(e,t){r(this,"keyCode"),r(this,"meta"),this.keyCode=e,this.meta=t}}class je{constructor(e,t=null,n=null){r(this,"type"),r(this,"data"),r(this,"myId"),this.type=e,this.data=t,this.myId=n}toString(){return JSON.stringify({type:this.type,data:this.data,myId:this.myId})}
34
+ sdp:pe};switch(r.browser){case"chrome":if(!F||!j||!t.shimChrome)return n("Chrome shim is not included in this adapter release."),i;if(null===r.version)return n("Chrome shim can not determine version, not shimming."),i;n("adapter.js shimming chrome."),i.browserShim=F,ve(e,r),Te(e),O(e,r),I(e),j(e,r),D(e),N(e,r),M(e),x(e),U(e,r),ue(e),fe(e),ge(e),me(e,r),Ce(e),ye(e,r);break;case"firefox":if(!X||!V||!t.shimFirefox)return n("Firefox shim is not included in this adapter release."),i;n("adapter.js shimming firefox."),i.browserShim=X,ve(e,r),Te(e),K(e,r),V(e,r),z(e),G(e),W(e),B(e),H(e),J(e),q(e),Q(e),$(e),ue(e),ge(e),me(e,r),Ce(e);break;case"safari":if(!ae||!t.shimSafari)return n("Safari shim is not included in this adapter release."),i;n("adapter.js shimming safari."),i.browserShim=ae,ve(e,r),Te(e),re(e),oe(e),ee(e),Y(e),Z(e),ie(e),te(e),se(e),ue(e),fe(e),me(e,r),Ce(e),ye(e,r);break;default:n("Unsupported browser!")}}({window:"undefined"==typeof window?void 0:window});class Re{constructor(e){r(this,"signalServerUrl"),r(this,"myId"),r(this,"roomId"),r(this,"targetId"),r(this,"stunServerUri"),r(this,"stunServerUriAli"),r(this,"stunServerUriTel"),r(this,"turnServerUri"),r(this,"turnServerUserName"),r(this,"turnServerPassword"),r(this,"isControl"),r(this,"screenshotWidth"),r(this,"screenshotHeight"),r(this,"screenshotQuality"),r(this,"token"),r(this,"isGroup"),r(this,"turnKey"),r(this,"traceId",""),this.signalServerUrl=e.signalServerUrl||"",this.myId=e.myId||"",this.roomId=e.roomId||"",this.targetId=e.targetId||"",this.turnKey=e.turnKey||[],this.stunServerUri=e.stunServerUri||"stun:stun.l.google.com:19302",this.stunServerUriAli=e.stunServerUriAli||"stun:stun.middle.aliyun.com:3478",this.stunServerUriTel=e.stunServerUriTel||"stun:stun.qq.com:3478",this.turnServerUri=e.turnServerUri||"turn:121.37.25.106:3478",this.turnServerUserName=e.turnServerUserName||"yangyj",this.turnServerPassword=e.turnServerPassword||"hb@2025@168",this.isControl=e.isControl??!0,this.screenshotWidth=e.screenshotWidth||144,this.screenshotHeight=e.screenshotHeight||256,this.screenshotQuality=e.screenshotQuality||20,this.token=e.token,this.isGroup=e.isGroup,this.traceId=e.traceId||""}}const be=(e,t,n)=>{e.createAnswer().then(r=>we(e,r,t,n)).catch(e=>null==n?void 0:n(f(p.CREATE_ANSWER,e)))},we=(e,t,n,r)=>{e.setLocalDescription(t).then(()=>{null==n||n(t.sdp??"")}).catch(e=>{null==r||r(f(p.LOCAL_DES,e))})},Ee=(e,t,n)=>{e.createOffer().then(r=>Pe(e,r,t,n)).catch(e=>null==n?void 0:n(f(p.CREATE_OFFER,e)))},Pe=(e,t,n,r)=>{e.setLocalDescription(t).then(()=>n(t.sdp??"")).catch(e=>null==r?void 0:r(f(p.LOCAL_DES,e)))};var ke=(e=>(e.ClickData="ClickData",e.ClipboardData="ClipboardData",e.ActionCommand="ActionCommand",e.ActionInput="ActionInput",e.ActionChinese="ActionChinese",e.ActionRequestCloudDeviceInfo="ActionRequestCloudDeviceInfo",e.ActionClarity="ActionClarity",e.ActionWheel="ActionWheel",e.CloudClipData="CloudClipData",e.ActionCommandEvent="ActionCommandEvent",e.ActionUpdateCloudStatus="ActionUpdateCloudStatus",e.ActionGesture="ActionGesture",e.ActionTrack="ActionTrack",e))(ke||{}),_e=(e=>(e.ENABLE="ENABLE",e.DISABLE="DISABLE",e))(_e||{}),Ae=(e=>(e.ActionBack="ActionBack",e.ActionHome="ActionHome",e.ActionRecent="ActionRecent",e.ActionSwitchNavButtons="ActionSwitchNavButtons",e.ActionSwitchNavGestural="ActionSwitchNavGestural",e))(Ae||{}),Oe=(e=>(e.ACTION_CONTROL_VIDEO_AND_AUDIO="ACTION_CONTROL_VIDEO_AND_AUDIO",e.ACTION_CONTROL_VIDEO="ACTION_CONTROL_VIDEO",e.ACTION_CONTROL_AUDIO="ACTION_CONTROL_AUDIO",e))(Oe||{});const Ie={ACTION_DOWN:0,ACTION_MOVE:2,ACTION_UP:1},De={ROTATION_0:0,ROTATION_180:2},Me={Vertical:0,Horizontal:1};class xe{constructor(e,t,n,i,o,s="adb"){r(this,"action"),r(this,"p"),r(this,"x"),r(this,"y"),r(this,"offsetTime"),r(this,"type"),this.action=e,this.p=t,this.x=n,this.y=i,this.offsetTime=o,this.type=s}}class Le{constructor(e){r(this,"axis"),this.axis=e}}class Ne{constructor(e,t){r(this,"keyCode"),r(this,"meta"),this.keyCode=e,this.meta=t}}class je{constructor(e,t=null,n=null){r(this,"type"),r(this,"data"),r(this,"myId"),this.type=e,this.data=t,this.myId=n}toString(){return JSON.stringify({type:this.type,data:this.data,myId:this.myId})}
35
35
  /**
36
36
  * 格式化数据
37
37
  * 如果数据已经是字符串,则直接返回;否则使用 JSON.stringify() 转换为字符串
@@ -70,19 +70,19 @@ sdp:pe};switch(r.browser){case"chrome":if(!F||!j||!t.shimChrome)return n("Chrome
70
70
  * @param data 清晰度数据
71
71
  */static clarity(e){return new je("ActionClarity",this.formatData(e))}static switchAudio(e){return new je("ActionCommandEvent",this.formatData(e))}static changeSender(e){return new je("ActionTrack",this.formatData(e))}}class Ue extends d{constructor(e){super(),r(this,"config"),r(this,"peerConnection",null),r(this,"localStream",null),r(this,"isPushingStream",!1),r(this,"dataChannel",null),r(this,"statsTimer"),r(this,"lastReportTime",0),r(this,"lastBytesReceived",0),r(this,"lastPacketsLost",0),r(this,"lastPacketsReceived",0),r(this,"lostPacketCount",0),r(this,"maxLostRate",0),r(this,"lastSecondDecodedCount",0),this.config=e}async startPush(){if(!this.isPushingStream){this.isPushingStream=!0;try{await this.readyCapture()}catch(e){this.emit(m.webrtcError,f(p.CAMERA,e))}}}handleOffer(e){this.resetPeerConnection(),((e,t,n,r)=>{const i=new RTCSessionDescription({type:"offer",sdp:t});e.setRemoteDescription(i).then(()=>be(e,n,r)).catch(e=>null==r?void 0:r(f(p.HANDLE_OFFER,e)))})(this.peerConnection,e,e=>{this.emit(m.sendAnswer,e)},e=>this.emit(m.webrtcError,e))}handleAnswer(e){((e,t,n)=>{const r=new RTCSessionDescription({type:"answer",sdp:t});e.setRemoteDescription(r).catch(e=>null==n?void 0:n(f(p.REMOTE_DES,e)))})(this.peerConnection,e??"",e=>this.emit(m.webrtcError,e))}handleIceCandidate(e){((e,t,n)=>{e.addIceCandidate(t).catch(e=>null==n?void 0:n(f(p.HANDLE_ICE,e)))})(this.peerConnection,e,e=>this.emit(m.webrtcError,e))}sendChannelData(e,t){var n;try{let r=null;switch(e){case ke.ClickData:r=je.click(t);break;case ke.ClipboardData:r=je.clipboard(t);break;case ke.ActionInput:r=je.input(t,this.config.myId);break;case ke.ActionChinese:r=je.chinese(t);break;case ke.ActionRequestCloudDeviceInfo:r=je.requestCloudDeviceInfo();break;case ke.ActionClarity:r=je.clarity(t);break;case ke.ActionWheel:r=je.wheel(t);break;case ke.ActionGesture:r=je.gesture(t);break;case ke.ActionCommand:r=je.action(t);break;case ke.ActionCommandEvent:r=je.switchAudio(t);break;case ke.ActionTrack:r=je.changeSender(t)}if(r){const e=JSON.stringify(r),t=(new TextEncoder).encode(e).buffer;null==(n=this.dataChannel)||n.send(t),r=null}}catch(r){this.emit(m.webrtcError,f(p.DATACHANNEL_ERR,r))}}closeConnection(){this.statsTimer&&(clearInterval(this.statsTimer),this.statsTimer=void 0),this.peerConnection&&("function"==typeof this.peerConnection.getSenders&&this.peerConnection.getSenders&&this.peerConnection.getSenders().forEach(e=>{var t,n;e.track&&(null==(n=(t=e.track).stop)||n.call(t))}),"function"==typeof this.peerConnection.getReceivers&&this.peerConnection.getReceivers&&this.peerConnection.getReceivers().forEach(e=>{var t,n;e.track&&(null==(n=(t=e.track).stop)||n.call(t))}),this.peerConnection.getTransceivers&&this.peerConnection.getTransceivers().forEach(e=>{var t;null==(t=e.stop)||t.call(e)}),this.removeAllListeners(),this.dataChannel=null,this.peerConnection.onicecandidate=null,this.peerConnection.ontrack=null,this.peerConnection.ondatachannel=null,this.peerConnection.onconnectionstatechange=null,this.peerConnection.oniceconnectionstatechange=null,this.peerConnection.onsignalingstatechange=null,this.peerConnection.onnegotiationneeded=null,this.peerConnection.onicegatheringstatechange=null,this.peerConnection.close(),this.peerConnection=null)}async readyCapture(){this.resetPeerConnection();try{this.localStream=await navigator.mediaDevices.getUserMedia({video:{width:640,height:480},audio:!0});const e=await this.getRotatedStream(this.localStream);e.getTracks().forEach(t=>{t.contentHint="detail",this.peerConnection.addTrack(t,e)}),this.peerConnection.getSenders().forEach(e=>this.setVideoParams(e)),Ee(this.peerConnection,e=>{this.emit(m.sendOffer,e)},e=>this.emit(m.webrtcError,e))}catch(e){throw new Error(`mediaDevices error: ${e}`)}}async getRotatedStream(e){const t=document.createElement("canvas"),n=t.getContext("2d"),r=e.getVideoTracks()[0],{width:i,height:o}=await new Promise(e=>{const t=document.createElement("video");t.srcObject=new MediaStream([r]),t.onloadedmetadata=()=>e({width:t.videoWidth,height:t.videoHeight})});t.width=640,t.height=480;const s=document.createElement("video");s.srcObject=e,await s.play();const a=()=>{n.clearRect(0,0,t.width,t.height),n.save(),n.translate(t.width/2,t.height/2),n.rotate(Math.PI/2),n.drawImage(s,-i/2,-o/2,i,o),n.restore(),requestAnimationFrame(a)};return a(),t.captureStream()}async setVideoParams(e){const t=e.getParameters();t.degradationPreference="maintain-resolution",t.encodings.forEach(e=>{e.maxBitrate=1e6,e.priority="high",e.scaleResolutionDownBy=1}),await e.setParameters(t)}stopPush(){var e;this.isPushingStream&&(this.isPushingStream=!1,null==(e=this.localStream)||e.getTracks().forEach(e=>{var t;null==(t=this.peerConnection)||t.getSenders().forEach(e=>{var t;null==(t=this.peerConnection)||t.removeTrack(e)}),e.stop()}),this.localStream=null,Ee(this.peerConnection,e=>{this.emit(m.sendOffer,e)},e=>this.emit(m.webrtcError,e)))}resetPeerConnection(){var e,t,n,r,i;this.peerConnection||(this.peerConnection=(e=>{const t=[{urls:e.stunServerUri},{urls:e.turnServerUri,username:e.turnServerUserName,credential:e.turnServerPassword}];return new RTCPeerConnection({iceServers:t,iceTransportPolicy:"relay",bundlePolicy:"max-bundle"})})(this.config),e=this.peerConnection,t=e=>{this.emit(m.sendICEMessage,e)},n=e=>{this.emit(m.streamTrack,e)},r=e=>{this.emit(m.iceConnectionState,e)},i=e=>this.emit(m.webrtcError,e),e.onicecandidate=e=>{if(!e.candidate)return;const n={sdp:e.candidate.candidate,sdpMid:e.candidate.sdpMid,sdpMLineIndex:e.candidate.sdpMLineIndex};t(JSON.stringify(n))},e.onconnectionstatechange=()=>{const t=e.iceConnectionState;t&&("failed"!==t&&"disconnected"!==t&&"closed"!==t||null==i||i(f(p.ICE_STATE,"failed")),null==r||r(t))},e.ontrack=e=>{const t=e.track;t.contentHint="motion",null==n||n(t)},this.checkStats(),this.configDataChannel())}configDataChannel(){this.peerConnection.ondatachannel=e=>{this.dataChannel=e.channel,this.dataChannel.onmessage=e=>this.handleDataChannelMessage(e),this.dataChannel.onerror=e=>this.emit(m.webrtcError,f(p.DATACHANNEL_ERR,e)),this.sendChannelData(ke.ActionRequestCloudDeviceInfo,"")}}handleDataChannelMessage(e){const t=JSON.parse(e.data);if(t.type===ke.ActionCommandEvent){const{action:e,value:n}=JSON.parse(t.data);"ACTION_CONTROL_VIDEO"===e&&("ENABLE"===n?this.startPush():this.stopPush())}else if(t.type===ke.ActionUpdateCloudStatus){const{rotation:e,screenWidth:n,screenHeight:r,gestureMode:i,level:o,isClarity:s}=JSON.parse(t.data),a={direction:[De.ROTATION_0,De.ROTATION_180].includes(e)?Me.Vertical:Me.Horizontal,screenWidth:n,screenHeight:r,gestureMode:i,clarityLevel:o,isClarity:s};this.emit(m.cloudStatusChanged,a)}else t.type===ke.CloudClipData&&this.emit(m.cloudClipData,t.data)}checkStats(){this.statsTimer=setInterval(()=>this.processStats(),1e3)}processStats(){this.peerConnection&&this.peerConnection.getStats(null).then(e=>{let t=0,n=0,r=0,i=0,o=0,s=0,a=0,c=0,d=0,l="";const h=Date.now();e.forEach(h=>{if("inbound-rtp"===h.type&&(s+=h.bytesReceived||0,i+=h.packetsLost||0,o+=h.packetsReceived||0,"video"===h.kind&&(t=h.framesPerSecond||0,n=h.totalDecodeTime||0,a=h.framesDecoded||0,d=h.framesReceived||0,c=(h.pliCount||0)+(h.firCount||0))),"candidate-pair"===h.type&&"succeeded"===h.state){r=void 0!==h.currentRoundTripTime?h.currentRoundTripTime:h.responsesReceived>0?h.totalRoundTripTime/h.responsesReceived:0;const t=e.get(h.localCandidateId),n=e.get(h.remoteCandidateId);t&&n&&(l=this.getConnectionType(t,n))}}),r=Math.floor(1e3*(r||0));const p=h-this.lastReportTime,u=s-this.lastBytesReceived,f=(p>0?1e3*u/p:0)/1024,C=f/1024;this.lastBytesReceived=s,this.lastReportTime=h;let g=0;const y=i-this.lastPacketsLost,v=o-this.lastPacketsReceived;y>0&&v>0&&(g=y/(y+v),this.maxLostRate=Math.max(this.maxLostRate||0,g),this.lostPacketCount++),this.lastPacketsLost=i,this.lastPacketsReceived=o;const T=void 0!==t?t:a-this.lastSecondDecodedCount;this.lastSecondDecodedCount=a;const S=f<1024?`${Math.floor(f)} KB/s`:`${Math.floor(C)} MB/s`,R=a>0?Math.floor(1e4*n/a):0,b={connectionType:l,framesPerSecond:T,currentRoundTripTime:r,lostRate:Math.floor(100*g),
72
72
  // percent
73
- bitrate:S,pliCount:c,averageDecodeTime:R,framesDecoded:a,framesReceived:d};this.emit(m.statisticInfo,b)}).catch(e=>{this.emit(m.webrtcError,f(p.STREAM_STATE,e))})}getConnectionType(e,t){return"host"===e.candidateType&&"host"===t.candidateType?"直连":"relay"===e.candidateType||"relay"===t.candidateType?"中继":"NAT"}}const Fe=async(e,t=600)=>{const n=e.map(e=>({urls:e,username:"yangyj",credential:"hb@2025@168"})).map(e=>((e,t=600)=>new Promise(n=>{const r=performance.now();let i=!1;const o=new RTCPeerConnection({iceServers:[e],iceTransportPolicy:"relay"});o.createDataChannel("test"),o.createOffer().then(e=>o.setLocalDescription(e)).catch(()=>{i||(i=!0,o.close(),n({...e,rtt:1/0}))}),o.onicecandidate=t=>{if(!i){if(t.candidate&&t.candidate.candidate.includes("relay")){const t=Math.trunc(performance.now()-r);i=!0,o.close(),n({...e,rtt:t})}null===t.candidate&&(i=!0,o.close(),n({...e,rtt:1/0}))}},setTimeout(()=>{i||(i=!0,o.close(),n({...e,rtt:1/0}))},t)}))(e,t).then(e=>e).catch(t=>({...e,rtt:1/0}))),r=await Promise.all(n),i=r.filter(e=>e.rtt!==1/0);if(0===i.length)throw new Error("All TURN servers are unreachable or slow (RTT = Infinity).");const o=i.sort((e,t)=>e.rtt-t.rtt)[0];return{best:o?Ke(o):void 0,all:r.map(Ke)}},Ke=e=>({urls:e.urls,rtt:e.rtt}),ze=e=>!(e.hostTurn&&0!==e.hostTurn.length||e.spareTurn&&0!==e.spareTurn.length);class Ve extends d{constructor(e){super(),r(this,"config",null),r(this,"signalingClient",null),r(this,"webRTCClient",null),r(this,"options"),r(this,"isConnected",!1),r(this,"isConnecting",!1),r(this,"connectCount",0),r(this,"MAX_COUNT",1),
73
+ bitrate:S,pliCount:c,averageDecodeTime:R,framesDecoded:a,framesReceived:d};this.emit(m.statisticInfo,b)}).catch(e=>{this.emit(m.webrtcError,f(p.STREAM_STATE,e))})}getConnectionType(e,t){return"host"===e.candidateType&&"host"===t.candidateType?"直连":"relay"===e.candidateType||"relay"===t.candidateType?"中继":"NAT"}}const Fe=async(e,t=600)=>{const n=e.map(e=>({urls:e,username:"yangyj",credential:"hb@2025@168"})).map(e=>((e,t=600)=>new Promise(n=>{const r=performance.now();let i=!1;const o=new RTCPeerConnection({iceServers:[e],iceTransportPolicy:"relay"});o.createDataChannel("test"),o.createOffer().then(e=>o.setLocalDescription(e)).catch(()=>{i||(i=!0,o.close(),n({...e,rtt:1/0}))}),o.onicecandidate=t=>{if(!i){if(t.candidate&&t.candidate.candidate.includes("relay")){const t=Math.trunc(performance.now()-r);i=!0,o.close(),n({...e,rtt:t})}null===t.candidate&&(i=!0,o.close(),n({...e,rtt:1/0}))}},setTimeout(()=>{i||(i=!0,o.close(),n({...e,rtt:1/0}))},t)}))(e,t).then(e=>e).catch(t=>({...e,rtt:1/0}))),r=await Promise.all(n),i=r.filter(e=>e.rtt!==1/0);if(0===i.length)throw new Error("All TURN servers are unreachable or slow (RTT = Infinity).");const o=i.sort((e,t)=>e.rtt-t.rtt)[0];return{best:o?Ke(o):void 0,all:r.map(Ke)}},Ke=e=>({urls:e.urls,rtt:e.rtt}),ze=e=>!(e.hostTurn&&0!==e.hostTurn.length||e.spareTurn&&0!==e.spareTurn.length);class Ve extends d{constructor(e){super(),r(this,"config",null),r(this,"signalingClient",null),r(this,"webRTCClient",null),r(this,"options"),r(this,"isConnected",!1),r(this,"isConnecting",!1),r(this,"connectCount",0),r(this,"MAX_COUNT",1),r(this,"timeout",null),
74
74
  /**
75
75
  * 处理 signal 消息,根据不同消息类型分发到 webRTCClient 或直接触发 SDK 事件
76
76
  * @param message 信令消息
77
77
  */
78
- r(this,"handleSignaling",e=>{var t,n,r,i,o;if(this.config)switch(e.type){case l.Peers:this.config.myId=e.myId;break;case l.Offer:e.senderId&&e.sdp&&(this.config.targetId=e.senderId,null==(t=this.webRTCClient)||t.handleOffer(e.sdp));break;case l.Answer:e.sdp&&(null==(n=this.webRTCClient)||n.handleAnswer(e.sdp));break;case l.IceCandidates:if(e.ice)try{const t=JSON.parse(e.ice);t.candidate=t.sdp,null==(r=this.webRTCClient)||r.handleIceCandidate(new RTCIceCandidate(t))}catch(s){this.emit("error",{type:"iceCandidate",error:s})}break;case l.SignOut:e.myId===this.config.myId&&(null==(i=this.webRTCClient)||i.closeConnection(),null==(o=this.signalingClient)||o.close(),this.removeAllListeners());break;case l.NotAvailable:this.emit(m.webrtcError,f(p.NOT_AVAILABLE,""));break;case l.Ping:this.sendPong();break;case l.SendScreenshot:const a=`data:image/png;base64,${e.screenshot}`;this.emit(m.screenshot,{room_id:this.config.roomId,base64:a});break;case l.KickOut:this.emit(m.webrtcError,f(p.KICK_OUT_ERR,""));break;case l.Error:e.error.includes("云手机没有就绪")?this.emit(m.webrtcError,f(p.NOT_AVAILABLE,"")):e.error.includes("token 验证失败")&&this.emit(m.webrtcError,f(p.AUTH_FAILED,""))}}),
78
+ r(this,"handleSignaling",e=>{var t,n,r,i,o,s;if(this.config)switch(e.type){case l.Peers:this.config.myId=e.myId;break;case l.Offer:e.senderId&&e.sdp&&(this.config.targetId=e.senderId,null==(t=this.webRTCClient)||t.handleOffer(e.sdp));break;case l.Answer:e.sdp&&(null==(n=this.webRTCClient)||n.handleAnswer(e.sdp));break;case l.IceCandidates:if(e.ice)try{const t=JSON.parse(e.ice);t.candidate=t.sdp,null==(r=this.webRTCClient)||r.handleIceCandidate(new RTCIceCandidate(t))}catch(a){this.emit("error",{type:"iceCandidate",error:a})}break;case l.SignOut:e.myId===this.config.myId&&(null==(i=this.webRTCClient)||i.closeConnection(),null==(o=this.signalingClient)||o.close(),this.removeAllListeners());break;case l.NotAvailable:this.emit(m.webrtcError,f(p.NOT_AVAILABLE,""));break;case l.Ping:this.sendPong();break;case l.SendScreenshot:const c=`data:image/png;base64,${e.screenshot}`;this.emit(m.screenshot,{room_id:this.config.roomId,base64:c});break;case l.KickOut:this.emit(m.webrtcError,f(p.KICK_OUT_ERR,""));break;case l.Error:e.error.includes("云手机没有就绪")?this.options.signAgain?(null==(s=this.signalingClient)||s.close(),this.signalingClient=null,this.initSignalingClient(),this.clearTimer(),this.timeout=setTimeout(()=>{var e;null==(e=this.signalingClient)||e.start()},3e3),this.options.signAgain=!1):this.emit(m.webrtcError,f(p.NOT_AVAILABLE,"")):e.error.includes("token 验证失败")&&this.emit(m.webrtcError,f(p.AUTH_FAILED,""))}}),r(this,"clearTimer",()=>{this.timeout&&(clearTimeout(this.timeout),this.timeout=null)}),
79
79
  /** 发送 Offer 信令 */
80
80
  r(this,"sendOffer",e=>{var t;if(this.config&&e&&e.length>0){const n={type:h.Offer,identity:h.Identity,roomId:this.config.roomId,senderId:this.config.myId,targetId:this.config.targetId,sdp:e};null==(t=this.signalingClient)||t.sendMessage(JSON.stringify(n))}}),
81
81
  /** 发送 Answer 信令 */
82
- r(this,"sendAnswer",e=>{var t;if(this.config&&e&&e.length>0){const n={type:h.Answer,identity:h.Identity,roomId:this.config.roomId,senderId:this.config.myId,targetId:this.config.targetId,sdp:e};null==(t=this.signalingClient)||t.sendMessage(JSON.stringify(n))}}),
82
+ r(this,"sendAnswer",e=>{var t;if(this.config&&e&&e.length>0){const n={traceId:this.config.traceId,type:h.Answer,identity:h.Identity,roomId:this.config.roomId,senderId:this.config.myId,targetId:this.config.targetId,sdp:e};null==(t=this.signalingClient)||t.sendMessage(JSON.stringify(n))}}),
83
83
  /** 发送 ICE 候选信息 */
84
- r(this,"sendICEMessage",e=>{var t;if(this.config&&e&&e.length>0){const n={type:h.IceCandidates,identity:h.Identity,roomId:this.config.roomId,senderId:this.config.myId,targetId:this.config.targetId,ice:e};null==(t=this.signalingClient)||t.sendMessage(JSON.stringify(n))}}),this.options=e,this.options.maxRecount&&(this.MAX_COUNT=this.options.maxRecount)}async initConfig(){var e,t;if(!this.options||0===Object.keys(this.options).length)throw f(p.OPTION_ERR,"option null");if(ze(this.options))throw f(p.OPTION_ERR,"中继配置为空");const n=async(e,t)=>{if(0===e.length)return!1;try{const n=await(async e=>{var t,n;try{const r=await Fe(e);return{url:null==(t=r.best)?void 0:t.urls,rtt:null==(n=r.best)?void 0:n.rtt}}catch(r){return{error:r.message||"未知错误"}}})(e);return!(!n.url||"number"!=typeof n.rtt)&&(!(t&&n.rtt>140)&&(this.options.turnServerUri=n.url,this.options.turnKey=[n.url],!0))}catch(n){return!1}},r=!!(null==(e=this.options.hostTurn)?void 0:e.length)&&await n(this.options.hostTurn,!0);if(!r&&(null==(t=this.options.spareTurn)?void 0:t.length)){const e=(this.options.hostTurn??[]).concat(this.options.spareTurn??[]);if(!(await n(e,!1))){if(!this.options.turnServerUri)throw f(p.OPTION_ERR,"暂无可用TURN服务器");this.options.turnKey=[this.options.turnServerUri]}}else if(!r){if(!(await n(this.options.hostTurn??[],!1))){if(!this.options.turnServerUri)throw f(p.OPTION_ERR,"暂无可用TURN服务器");this.options.turnKey=[this.options.turnServerUri]}}}
85
- /** 开始连接 signal 服务 */startConnection(){this.prepareConnection().catch(e=>{this.emit(m.webrtcError,e)})}async prepareConnection(){var e;if(!this.isConnecting){this.isConnecting=!0;try{if(ze(this.options)){if(!this.options.turnServerUri)return void this.emit(m.webrtcError,f(p.OPTION_ERR,"暂无可用TURN服务器"))}else await this.initConfig();this.initConnectConfig(),null==(e=this.signalingClient)||e.start()}catch(t){throw this.isConnected=!1,t}finally{this.isConnecting=!1}}}async reconnect(){this.resetConfig();try{await this.prepareConnection()}catch(e){this.emit(m.webrtcError,e)}}initConnectConfig(){this.config=new Re(this.options),this.signalingClient=new C(this.config),this.webRTCClient=new Ue(this.config),this.signalingClient.on(m.signalMessage,e=>this.handleSignaling(e)),this.signalingClient.on(m.webrtcError,e=>{this.emit(m.webrtcError,e)}),this.webRTCClient.on(m.sendOffer,e=>this.sendOffer(e)),this.webRTCClient.on(m.sendAnswer,e=>this.sendAnswer(e)),this.webRTCClient.on(m.sendICEMessage,e=>this.sendICEMessage(e)),this.webRTCClient.on(m.streamTrack,e=>{this.emit(m.streamTrack,e)}),this.webRTCClient.on(m.iceConnectionState,e=>{this.emit(m.iceConnectionState,e),"connected"===e&&(this.isConnected=!0)}),this.webRTCClient.on(m.cloudStatusChanged,e=>this.emit(m.cloudStatusChanged,e)),this.webRTCClient.on(m.cloudClipData,e=>this.emit(m.cloudClipData,e)),this.webRTCClient.on(m.webrtcError,e=>{this.emit(m.webrtcError,e)}),this.webRTCClient.on(m.statisticInfo,e=>{this.emit(m.statisticInfo,e)})}switchControl(e){var t;null==(t=this.signalingClient)||t.sendSwitchControlMessage(e)}resetConfig(){var e,t;this.sendSignOut(),null==(e=this.signalingClient)||e.close(),null==(t=this.webRTCClient)||t.closeConnection(),this.signalingClient=null,this.webRTCClient=null,this.config=null,this.isConnected=!1,this.isConnecting=!1}
84
+ r(this,"sendICEMessage",e=>{var t;if(this.config&&e&&e.length>0){const n={traceId:this.config.traceId,type:h.IceCandidates,identity:h.Identity,roomId:this.config.roomId,senderId:this.config.myId,targetId:this.config.targetId,ice:e};null==(t=this.signalingClient)||t.sendMessage(JSON.stringify(n))}}),this.options=e,this.options.maxRecount&&(this.MAX_COUNT=this.options.maxRecount)}async initConfig(){var e,t;if(!this.options||0===Object.keys(this.options).length)throw f(p.OPTION_ERR,"option null");if(ze(this.options))throw f(p.OPTION_ERR,"中继配置为空");const n=async(e,t)=>{if(0===e.length)return!1;try{const n=await(async e=>{var t,n;try{const r=await Fe(e);return{url:null==(t=r.best)?void 0:t.urls,rtt:null==(n=r.best)?void 0:n.rtt}}catch(r){return{error:r.message||"未知错误"}}})(e);return!(!n.url||"number"!=typeof n.rtt)&&(!(t&&n.rtt>140)&&(this.options.turnServerUri=n.url,this.options.turnKey=[n.url],!0))}catch(n){return!1}},r=!!(null==(e=this.options.hostTurn)?void 0:e.length)&&await n(this.options.hostTurn,!0);if(!r&&(null==(t=this.options.spareTurn)?void 0:t.length)){const e=(this.options.hostTurn??[]).concat(this.options.spareTurn??[]);if(!(await n(e,!1))){if(!this.options.turnServerUri)throw f(p.OPTION_ERR,"暂无可用TURN服务器");this.options.turnKey=[this.options.turnServerUri]}}else if(!r){if(!(await n(this.options.hostTurn??[],!1))){if(!this.options.turnServerUri)throw f(p.OPTION_ERR,"暂无可用TURN服务器");this.options.turnKey=[this.options.turnServerUri]}}}
85
+ /** 开始连接 signal 服务 */startConnection(){this.prepareConnection().catch(e=>{this.emit(m.webrtcError,e)})}async prepareConnection(){var e;if(!this.isConnecting){this.isConnecting=!0;try{if(ze(this.options)){if(!this.options.turnServerUri)return void this.emit(m.webrtcError,f(p.OPTION_ERR,"暂无可用TURN服务器"))}else await this.initConfig();this.initConnectConfig(),this.initSignalingClient(),null==(e=this.signalingClient)||e.start()}catch(t){throw this.isConnected=!1,t}finally{this.isConnecting=!1}}}async reconnect(){this.resetConfig();try{await this.prepareConnection()}catch(e){this.emit(m.webrtcError,e)}}initConnectConfig(){this.config=new Re(this.options),this.webRTCClient=new Ue(this.config),this.webRTCClient.on(m.sendOffer,e=>this.sendOffer(e)),this.webRTCClient.on(m.sendAnswer,e=>this.sendAnswer(e)),this.webRTCClient.on(m.sendICEMessage,e=>this.sendICEMessage(e)),this.webRTCClient.on(m.streamTrack,e=>{this.emit(m.streamTrack,e)}),this.webRTCClient.on(m.iceConnectionState,e=>{this.emit(m.iceConnectionState,e),"connected"===e&&(this.isConnected=!0)}),this.webRTCClient.on(m.cloudStatusChanged,e=>this.emit(m.cloudStatusChanged,e)),this.webRTCClient.on(m.cloudClipData,e=>this.emit(m.cloudClipData,e)),this.webRTCClient.on(m.webrtcError,e=>{this.emit(m.webrtcError,e)}),this.webRTCClient.on(m.statisticInfo,e=>{this.emit(m.statisticInfo,e)})}initSignalingClient(){this.config&&(this.signalingClient=new C(this.config),this.signalingClient.on(m.signalMessage,e=>this.handleSignaling(e)),this.signalingClient.on(m.webrtcError,e=>{this.emit(m.webrtcError,e)}))}switchControl(e){var t;null==(t=this.signalingClient)||t.sendSwitchControlMessage(e)}resetConfig(){var e,t;this.sendSignOut(),null==(e=this.signalingClient)||e.close(),null==(t=this.webRTCClient)||t.closeConnection(),this.signalingClient=null,this.webRTCClient=null,this.config=null,this.isConnected=!1,this.isConnecting=!1}
86
86
  /** 停止连接,并发送退出信令 */stop(){var e,t;this.sendSignOut(),null==(e=this.signalingClient)||e.close(),null==(t=this.webRTCClient)||t.closeConnection(),this.removeAllListeners(),this.signalingClient=null,this.webRTCClient=null,this.config=null,this.connectCount=0,this.isConnected=!1,this.isConnecting=!1}
87
87
  /** 开始推流:触发媒体采集与轨道添加 */async startPush(){}
88
88
  /** 发送信道数据 */sendChannelData(e,t){var n;null==(n=this.webRTCClient)||n.sendChannelData(e,t)}sendControlEvent(e){var t;const n=new Ne(e,0);null==(t=this.webRTCClient)||t.sendChannelData(ke.ActionInput,n)}sendRequestScreenshot(e){var t;null==(t=this.signalingClient)||t.sendRequestScreenshot(e)}sendPong(){var e;const t={type:h.Pong},n=JSON.stringify(t);null==(e=this.signalingClient)||e.sendMessage(n)}sendSignOut(){var e;if(!this.config)return;const t={type:h.SignOut,identity:h.Identity,roomId:this.config.roomId,myId:this.config.myId};null==(e=this.signalingClient)||e.sendMessage(JSON.stringify(t))}}const We={
@@ -105,7 +105,7 @@ Numpad0:7,Numpad1:8,Numpad2:9,Numpad3:10,Numpad4:11,Numpad5:12,Numpad6:13,Numpad
105
105
  // 其他特殊键
106
106
  Insert:124,Delete:112,Home:122,End:123,PageUp:92,PageDown:93,ScrollLock:116,Pause:121,ContextMenu:117},Be=e=>{const t=We[e.code]??-1,n=(e=>{let t=0;return e.shiftKey&&(t|=1),e.altKey&&(t|=2),e.ctrlKey&&(t|=4096),e.metaKey&&(t|=65536),t})(e);return{keyCode:t,meta:n}};function Ge(e,t,n,r,i,o,s,a){let c,d;-90===i?(d=t,c=n*e/r):(d=e,c=n*t/r);const l=(d-c)/2,h=d/2,p=l,u=d-l,f=h-l;if(-90===i){const e=Je(l,h,p,u,f,a);return-90===o?[s,e]:[t-e,s]}{const n=Je(l,h,p,u,f,s);if(-90===o){const[r,i]=function(e,t,n,r){const i=t/2,o=e/2,s=n-o,a=r-i;return[a+i,-s+o]}(e,t,n,a);return[r,i]}return[n,a]}}function He(e,t,n,r,i,o,s,a){let c,d;return 0===i&&0===o?(c=s/e,d=a/t):-90===i&&0===o?(c=s/t,d=a/e):-90===i&&-90===o?(c=s/e*(r/n),d=a/t*(n/r)):(c=s/t*(r/n),d=a/e*(n/r)),[c,d]}function Je(e,t,n,r,i,o){return o>=n&&o<=t-.1?(o-e)*t/i:o===t?t:o>=t+.1&&o<=r?t+(o-t)*t/i:o}class qe extends d{constructor(e){super(),r(this,"sdk"),r(this,"config"),this.config=e,this.sdk=new Ve(this.config),this.initSdk()}initSdk(){const e=this.config.roomId;this.sdk.removeAllListeners(),this.config.isControl?(this.sdk.on(m.streamTrack,e=>{const t="video"===e.kind;this.emit(m.streamTrack,t,e)}),this.sdk.on(m.cloudStatusChanged,e=>{this.emit(m.cloudStatusChanged,e)})):this.sdk.on(m.screenshot,t=>this.emit(m.screenshot,e,t)),this.sdk.on(m.iceConnectionState,t=>this.emit(m.iceConnectionState,e,t)),this.sdk.on(m.webrtcError,t=>{this.emit(m.webrtcError,e,t),this.stop()})}
107
107
  // 动态更新 isControl 值
108
- setIsControl(e){this.config.isControl!==e&&(this.config.isControl=e,this.initSdk())}start(){this.sdk.startConnection()}stop(){this.sdk.stop(),this.sdk.removeAllListeners()}switchControl(e){this.sdk.switchControl(e)}sendData(e,t){(this.config.canOperate||this.config.isControl)&&1===this.config.connectStatus&&this.sdk.sendChannelData(e,t)}sendControlData(e){(this.config.canOperate||this.config.isControl)&&1===this.config.connectStatus&&this.sdk.sendControlEvent(e)}requestScreenshot(e){this.sdk.sendRequestScreenshot(e)}}function Qe(e,n,r,i){const o=t.ref(!1),s=t.ref({}),a=t.ref({width:0,height:0}),c=t.ref(0),d=t.ref(0),l=t.ref(null),h=t.ref(0),p=t.computed(()=>r.value%180!=0),u=t.computed(()=>{let e=0,t=0;const n=p.value?a.value.height:a.value.width,r=p.value?a.value.width:a.value.height,i=s.value.width??720,o=s.value.height??1280,l=i/o,h=n/l;return h>r?(t=r,e=t*l):(e=n,t=h),c.value=i/e,d.value=o/t,{width:e,height:t}}),f=(e,t)=>{e.srcObject||(e.srcObject=new MediaStream);const n=e.srcObject;"video"===t.kind?(n.getTracks().forEach(e=>{e.id!==t.id&&(n.removeTrack(e),e.stop())}),n.getVideoTracks().some(e=>e.id===t.id)||n.addTrack(t)):n.addTrack(t),e.playsInline=!0,e.setAttribute("webkit-playsinline","true")},m=()=>{o.value=!1;const e=n.value;e&&e.srcObject&&(e.srcObject.getTracks().forEach(e=>e.stop()),e.srcObject=null,e.cancelVideoFrameCallback(h.value))},C=()=>{if("visible"===document.visibilityState){const e=n.value;e&&e.srcObject&&e.srcObject.getTracks().forEach(e=>{"audio"!==e.kind||e.enabled||(e.enabled=!0)})}else{const e=n.value;e&&e.srcObject&&e.srcObject.getTracks().forEach(e=>{"audio"===e.kind&&e.enabled&&(e.enabled=!1)})}};return t.onMounted(()=>{document.addEventListener("visibilitychange",C)}),t.onBeforeUnmount(()=>{document.removeEventListener("visibilitychange",C),l.value&&e.value&&l.value.unobserve(e.value),m()}),{videoSize:u,remoteVideo:s,dimensions:a,widthRadio:c,heightRadio:d,screenStatus:o,initVideoContainer:()=>{e.value&&(l.value=new ResizeObserver(([e])=>{const{width:t,height:n}=e.contentRect;a.value={width:t,height:n}}),l.value.observe(e.value)),(()=>{const e=n.value;if(!e)return;const r=()=>{s.value={width:e.videoWidth,height:e.videoHeight},o.value=!0,i("loadedSuccess")};e.addEventListener("loadedmetadata",r),t.onBeforeUnmount(()=>{e.removeEventListener("loadedmetadata",r)})})()},startPlay:e=>{const t=n.value;t&&f(t,e)},stopPlay:m}}const $e=((e,t)=>{const n=e.__vccOpts||e;for(const[r,i]of t)n[r]=i;return n})(t.defineComponent({__name:"index",props:{streamAngle:{default:0},videoAngle:{default:0},cursorType:{default:0},cloudDeviceSize:{default:()=>({width:0,height:0})},disabled:{type:Boolean,default:!0},bgColor:{default:"transparent"}},emits:["channelEvent","groupControlEvent","loadedSuccess"],setup(e,{expose:n,emit:r}){const i=r,o=e,{streamAngle:s,videoAngle:a,cursorType:c,cloudDeviceSize:d,disabled:l,bgColor:h}=t.toRefs(o),p=t.ref(null),u=t.ref(null),f=function(e){return t.computed(()=>{switch(e.value){case 1:return"circle-cursor";case 2:return"triangle-cursor";default:return"default-cursor"}})}(c),{videoSize:m,dimensions:C,widthRadio:g,initVideoContainer:y,startPlay:v,stopPlay:T}=Qe(p,u,a,i),{handleMouseDown:S,handleMouseMove:R,handleMouseEnter:b,handleMouseUp:w,handleMouseLeave:E,handleWheel:P}=function(e){const{remoteVideoElement:n,cloudDeviceSize:r,streamAngle:i,videoAngle:o,widthRadio:s,emit:a}=e,c=t.ref(!1),d=t.ref(0),l=t.ref(new Array(20).fill(0)),h=t.ref(new Array(10).fill(0)),p=(e,t)=>{if(!n.value)return;const s=Math.trunc(e.timeStamp-h.value[0]),c=n.value.getBoundingClientRect();let p=e.clientX-c.left,u=e.clientY-c.top;const f=r.value.width,m=r.value.height,C=Ge(c.width,c.height,f,m,o.value,i.value,p,u);if(!C||C.length<2)return;if(p=C[0],u=C[1],t===Ie.ACTION_MOVE){const e=l.value[10]-u,t=l.value[0]-p;if(Math.abs(e)<d.value&&Math.abs(t)<d.value)return}l.value[0]=p,l.value[10]=u;const g=He(c.width,c.height,f,m,o.value,i.value,p,u),y=new xe(t,0,g[0],g[1],s);a("channelEvent",ke.ClickData,y)},u=e=>{c.value&&(c.value=!1,p(e,Ie.ACTION_UP),n.value&&n.value.releasePointerCapture(e.pointerId))};return{isPointerDown:c,handleMouseDown:e=>{c.value=!0,n.value&&n.value.setPointerCapture(e.pointerId),h.value[0]=e.timeStamp,d.value=Math.trunc(6/s.value),p(e,Ie.ACTION_DOWN)},handleMouseMove:e=>{if(!c.value)return;if(p(e,Ie.ACTION_MOVE),!n.value)return;const t=n.value.getBoundingClientRect(),{clientX:r,clientY:i}=e;(r<t.left||r>t.right||i<t.top||i>t.bottom)&&u(e)},handleMouseEnter:e=>{1!==e.buttons||c.value||(c.value=!0,n.value&&n.value.setPointerCapture(e.pointerId),h.value[0]=e.timeStamp,d.value=Math.trunc(6/s.value),p(e,Ie.ACTION_DOWN))},handleMouseUp:u,handleMouseLeave:e=>{c.value&&(p(e,Ie.ACTION_UP),c.value=!1,n.value&&n.value.releasePointerCapture(e.pointerId))},handleWheel:e=>{const t=-1*Math.sign(e.deltaY),n=new Le(t);a("channelEvent",ke.ActionWheel,n)}}}({remoteVideoElement:u,cloudDeviceSize:d,streamAngle:s,videoAngle:a,widthRadio:g,emit:i}),{startListening:k,stopListening:_}=function(e,n){const r=t.ref(!1),i=e=>{const t=Be(e);n("channelEvent",ke.ActionInput,t)};return{startListening:()=>{e&&(r.value=!0,document.addEventListener("keydown",i))},stopListening:()=>{e&&(r.value=!1,document.removeEventListener("keydown",i))}}}(l,i);!function(e,n){let r=null;t.onMounted(()=>{e.value&&(r=new ResizeObserver(e=>{for(const t of e){const{width:e,height:r}=t.contentRect;n.value={width:e,height:r}}}),r.observe(e.value))}),t.onUnmounted(()=>{null==r||r.disconnect()})}(p,C);const O=()=>{var e;(null==(e=u.value)?void 0:e.srcObject)&&(u.value.muted=!1)};return t.onMounted(()=>{document.addEventListener("click",O),y()}),t.onBeforeUnmount(()=>{document.removeEventListener("click",O)}),n({startPlay:v,stopPlay:T,remoteVideoElement:u}),(e,n)=>(t.openBlock(),t.createElementBlock("div",{ref_key:"videoContainer",ref:p,class:"flex flex-1 items-center justify-center",style:{width:"100%",height:"100%",position:"relative",overflow:"hidden"}},[t.createElementVNode("div",{ref:"keyboardArea",onPointerenter:n[6]||(n[6]=//@ts-ignore
108
+ setIsControl(e){this.config.isControl!==e&&(this.config.isControl=e,this.initSdk())}start(){this.sdk.startConnection()}stop(){this.sdk.stop(),this.sdk.removeAllListeners()}switchControl(e){this.sdk.switchControl(e)}sendData(e,t){(this.config.canOperate||this.config.isControl)&&1===this.config.connectStatus&&this.sdk.sendChannelData(e,t)}sendControlData(e){(this.config.canOperate||this.config.isControl)&&1===this.config.connectStatus&&this.sdk.sendControlEvent(e)}requestScreenshot(e){this.sdk.sendRequestScreenshot(e)}}function Qe(e,n,r,i){const o=t.ref(!1),s=t.ref({}),a=t.ref({width:0,height:0}),c=t.ref(0),d=t.ref(0),l=t.ref(null),h=t.ref(0),p=t.computed(()=>r.value%180!=0),u=t.computed(()=>{let e=0,t=0;const n=p.value?a.value.height:a.value.width,r=p.value?a.value.width:a.value.height,i=s.value.width??720,o=s.value.height??1280,l=i/o,h=n/l;return h>r?(t=r,e=t*l):(e=n,t=h),c.value=i/e,d.value=o/t,{width:e,height:t}}),f=(e,t)=>{e.srcObject||(e.srcObject=new MediaStream);const n=e.srcObject;"video"===t.kind?(n.getTracks().forEach(e=>{e.id!==t.id&&(n.removeTrack(e),e.stop())}),n.getVideoTracks().some(e=>e.id===t.id)||n.addTrack(t)):n.addTrack(t),e.playsInline=!0,e.setAttribute("webkit-playsinline","true")},m=()=>{o.value=!1;const e=n.value;e&&e.srcObject&&(e.srcObject.getTracks().forEach(e=>e.stop()),e.srcObject=null,e.cancelVideoFrameCallback(h.value))},C=()=>{if("visible"===document.visibilityState){const e=n.value;e&&e.srcObject&&e.srcObject.getTracks().forEach(e=>{"audio"!==e.kind||e.enabled||(e.enabled=!0)})}else{const e=n.value;e&&e.srcObject&&e.srcObject.getTracks().forEach(e=>{"audio"===e.kind&&e.enabled&&(e.enabled=!1)})}};return t.onMounted(()=>{document.addEventListener("visibilitychange",C)}),t.onBeforeUnmount(()=>{document.removeEventListener("visibilitychange",C),l.value&&e.value&&l.value.unobserve(e.value),m()}),{videoSize:u,remoteVideo:s,dimensions:a,widthRadio:c,heightRadio:d,screenStatus:o,initVideoContainer:()=>{e.value&&(l.value=new ResizeObserver(([e])=>{const{width:t,height:n}=e.contentRect;a.value={width:t,height:n}}),l.value.observe(e.value)),(()=>{const e=n.value;if(!e)return;const r=()=>{s.value={width:e.videoWidth,height:e.videoHeight},o.value=!0,i("loadedSuccess")};e.addEventListener("loadedmetadata",r),t.onBeforeUnmount(()=>{e.removeEventListener("loadedmetadata",r)})})()},startPlay:e=>{const t=n.value;t&&f(t,e)},stopPlay:m}}const $e=((e,t)=>{const n=e.__vccOpts||e;for(const[r,i]of t)n[r]=i;return n})(t.defineComponent({__name:"index",props:{streamAngle:{default:0},videoAngle:{default:0},cursorType:{default:0},cloudDeviceSize:{default:()=>({width:0,height:0})},disabled:{type:Boolean,default:!0},bgColor:{default:"transparent"}},emits:["channelEvent","groupControlEvent","loadedSuccess"],setup(e,{expose:n,emit:r}){const i=r,o=e,{streamAngle:s,videoAngle:a,cursorType:c,cloudDeviceSize:d,disabled:l,bgColor:h}=t.toRefs(o),p=t.ref(null),u=t.ref(null),f=function(e){return t.computed(()=>{switch(e.value){case 1:return"circle-cursor";case 2:return"triangle-cursor";default:return"default-cursor"}})}(c),{videoSize:m,dimensions:C,widthRadio:g,initVideoContainer:y,startPlay:v,stopPlay:T}=Qe(p,u,a,i),{handleMouseDown:S,handleMouseMove:R,handleMouseEnter:b,handleMouseUp:w,handleMouseLeave:E,handleWheel:P}=function(e){const{remoteVideoElement:n,cloudDeviceSize:r,streamAngle:i,videoAngle:o,widthRadio:s,emit:a}=e,c=t.ref(!1),d=t.ref(0),l=t.ref(new Array(20).fill(0)),h=t.ref(new Array(10).fill(0)),p=(e,t)=>{if(!n.value)return;const s=Math.trunc(e.timeStamp-h.value[0]),c=n.value.getBoundingClientRect();let p=e.clientX-c.left,u=e.clientY-c.top;const f=r.value.width,m=r.value.height,C=Ge(c.width,c.height,f,m,o.value,i.value,p,u);if(!C||C.length<2)return;if(p=C[0],u=C[1],t===Ie.ACTION_MOVE){const e=l.value[10]-u,t=l.value[0]-p;if(Math.abs(e)<d.value&&Math.abs(t)<d.value)return}l.value[0]=p,l.value[10]=u;const g=He(c.width,c.height,f,m,o.value,i.value,p,u),y=new xe(t,0,g[0],g[1],s);a("channelEvent",ke.ClickData,y)},u=e=>{c.value&&(c.value=!1,p(e,Ie.ACTION_UP),n.value&&n.value.releasePointerCapture(e.pointerId))};return{isPointerDown:c,handleMouseDown:e=>{c.value=!0,n.value&&n.value.setPointerCapture(e.pointerId),h.value[0]=e.timeStamp,d.value=Math.trunc(6/s.value),p(e,Ie.ACTION_DOWN)},handleMouseMove:e=>{if(!c.value)return;if(p(e,Ie.ACTION_MOVE),!n.value)return;const t=n.value.getBoundingClientRect(),{clientX:r,clientY:i}=e;(r<t.left||r>t.right||i<t.top||i>t.bottom)&&u(e)},handleMouseEnter:e=>{1!==e.buttons||c.value||(c.value=!0,n.value&&n.value.setPointerCapture(e.pointerId),h.value[0]=e.timeStamp,d.value=Math.trunc(6/s.value),p(e,Ie.ACTION_DOWN))},handleMouseUp:u,handleMouseLeave:e=>{c.value&&(p(e,Ie.ACTION_UP),c.value=!1,n.value&&n.value.releasePointerCapture(e.pointerId))},handleWheel:e=>{const t=-1*Math.sign(e.deltaY),n=new Le(t);a("channelEvent",ke.ActionWheel,n)}}}({remoteVideoElement:u,cloudDeviceSize:d,streamAngle:s,videoAngle:a,widthRadio:g,emit:i}),{startListening:k,stopListening:_}=function(e,n){const r=t.ref(!1),i=e=>{const t=Be(e);n("channelEvent",ke.ActionInput,t)};return{startListening:()=>{e&&(r.value=!0,document.addEventListener("keydown",i))},stopListening:()=>{e&&(r.value=!1,document.removeEventListener("keydown",i))}}}(l,i);!function(e,n){let r=null;t.onMounted(()=>{e.value&&(r=new ResizeObserver(e=>{for(const t of e){const{width:e,height:r}=t.contentRect;n.value={width:e,height:r}}}),r.observe(e.value))}),t.onUnmounted(()=>{null==r||r.disconnect()})}(p,C);const A=()=>{var e;(null==(e=u.value)?void 0:e.srcObject)&&(u.value.muted=!1)};return t.onMounted(()=>{document.addEventListener("click",A),y()}),t.onBeforeUnmount(()=>{document.removeEventListener("click",A)}),n({startPlay:v,stopPlay:T,remoteVideoElement:u}),(e,n)=>(t.openBlock(),t.createElementBlock("div",{ref_key:"videoContainer",ref:p,class:"flex flex-1 items-center justify-center",style:{width:"100%",height:"100%",position:"relative",overflow:"hidden"}},[t.createElementVNode("div",{ref:"keyboardArea",onPointerenter:n[6]||(n[6]=//@ts-ignore
109
109
  (...e)=>t.unref(k)&&t.unref(k)(...e)),onPointerleave:n[7]||(n[7]=//@ts-ignore
110
110
  (...e)=>t.unref(_)&&t.unref(_)(...e)),class:"vContainer",style:t.normalizeStyle([{height:t.unref(m).height+"px",width:t.unref(m).width+"px",transform:`rotate(${t.unref(a)}deg)`},{position:"relative",overflow:"hidden"}])},[t.createElementVNode("video",{ref_key:"remoteVideoElement",ref:u,class:t.normalizeClass(["video-control",[t.unref(f),{"no-events":t.unref(l)}]]),onPointerenter:n[0]||(n[0]=//@ts-ignore
111
111
  (...e)=>t.unref(b)&&t.unref(b)(...e)),onPointerdown:n[1]||(n[1]=//@ts-ignore
@@ -113,7 +113,7 @@ setIsControl(e){this.config.isControl!==e&&(this.config.isControl=e,this.initSdk
113
113
  (...e)=>t.unref(R)&&t.unref(R)(...e)),onPointerup:n[3]||(n[3]=//@ts-ignore
114
114
  (...e)=>t.unref(w)&&t.unref(w)(...e)),onPointerleave:n[4]||(n[4]=//@ts-ignore
115
115
  (...e)=>t.unref(E)&&t.unref(E)(...e)),onWheel:n[5]||(n[5]=//@ts-ignore
116
- (...e)=>t.unref(P)&&t.unref(P)(...e)),style:t.normalizeStyle({backgroundColor:`${t.unref(h)}`}),autoplay:"",playsinline:"",muted:"",disablePictureInPicture:!0},null,38)],36)],512))}}),[["__scopeId","data-v-26654e99"]]);e.ActionCommandEventType=Ae,e.ActionCommandEventValue=_e,e.ActionCommandType=Oe,e.ActionType=Ie,e.ChannelDataType=ke,e.ClarityData=class{constructor(e){r(this,"level"),this.level=e}},e.ContainerDirection=Me,e.EmitType=m,e.GestureData=class{constructor(e){r(this,"mode"),this.mode=e}},e.GroupControllerManager=class extends d{constructor(){super(),r(this,"configs",new Map),r(this,"controllers",new Map)}startControl(e){if(!e.size)throw new Error("配置为空");if(1!==Array.from(e.values()).filter(e=>e.isControl).length)throw new Error("必须且仅有一个主控");this.configs=new Map(e),this.configs.forEach(e=>this.addController(e))}switchToMain(e,t){e&&t&&(this.switchControl(e,!0),this.switchControl(t,!1))}switchControl(e,t){let n=this.getController(e);null==n||n.setIsControl(t),null==n||n.switchControl(t)}
116
+ (...e)=>t.unref(P)&&t.unref(P)(...e)),style:t.normalizeStyle({backgroundColor:`${t.unref(h)}`}),autoplay:"",playsinline:"",muted:"",disablePictureInPicture:!0},null,38)],36)],512))}}),[["__scopeId","data-v-26654e99"]]);e.ActionCommandEventType=Oe,e.ActionCommandEventValue=_e,e.ActionCommandType=Ae,e.ActionType=Ie,e.ChannelDataType=ke,e.ClarityData=class{constructor(e){r(this,"level"),this.level=e}},e.ContainerDirection=Me,e.EmitType=m,e.GestureData=class{constructor(e){r(this,"mode"),this.mode=e}},e.GroupControllerManager=class extends d{constructor(){super(),r(this,"configs",new Map),r(this,"controllers",new Map)}startControl(e){if(!e.size)throw new Error("配置为空");if(1!==Array.from(e.values()).filter(e=>e.isControl).length)throw new Error("必须且仅有一个主控");this.configs=new Map(e),this.configs.forEach(e=>this.addController(e))}switchToMain(e,t){e&&t&&(this.switchControl(e,!0),this.switchControl(t,!1))}switchControl(e,t){let n=this.getController(e);null==n||n.setIsControl(t),null==n||n.switchControl(t)}
117
117
  /**
118
118
  * 找到当前主控config, 设置为从控
119
119
  */clearCurrentControl(){for(const[e,t]of this.configs.entries())if(t.isControl)return this.configs.set(e,{...t,isControl:!1}),e}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "yjz-web-sdk",
3
3
  "private": false,
4
- "version": "1.0.8-beta.6",
4
+ "version": "1.0.8-beta.8",
5
5
  "type": "module",
6
6
  "description": "针对于亚矩阵项目的云手机投屏和屏幕控制",
7
7
  "license": "Apache-2.0",