usc-rtc-client 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.es.js +28 -25
- package/dist/index.umd.js +1 -1
- package/package.json +1 -1
package/dist/index.es.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var S = /* @__PURE__ */ ((i) => (i.bye = "bye", i.stream = "stream", i.reInvite = "reInvite", i.localAudioChange = "localAudioChange", i.localVideoChange = "localVideoChange", i.localStreamChange = "localStreamChange", i))(S || {}), U = /* @__PURE__ */ ((i) => (i.connected = "connected", i.disconnected = "disconnected", i.invite = "invite", i))(U || {}), D = /* @__PURE__ */ ((i) => (i.PTTInfo = "PTTInfo", i.FPREInfo = "FPREInfo", i.IMSInfo = "IMSInfo", i.ERROR = "error", i.SPEAKER = "speaker", i.TALKING = "talking", i.ACTIVE_GROUP = "activeGroup", i.JOIN_INFO = "joinInfo", i))(D || {}),
|
|
1
|
+
var S = /* @__PURE__ */ ((i) => (i.bye = "bye", i.stream = "stream", i.reInvite = "reInvite", i.localAudioChange = "localAudioChange", i.localVideoChange = "localVideoChange", i.localStreamChange = "localStreamChange", i))(S || {}), U = /* @__PURE__ */ ((i) => (i.connected = "connected", i.disconnected = "disconnected", i.invite = "invite", i))(U || {}), D = /* @__PURE__ */ ((i) => (i.PTTInfo = "PTTInfo", i.FPREInfo = "FPREInfo", i.IMSInfo = "IMSInfo", i.ERROR = "error", i.SPEAKER = "speaker", i.TALKING = "talking", i.ACTIVE_GROUP = "activeGroup", i.JOIN_INFO = "joinInfo", i))(D || {}), b = /* @__PURE__ */ ((i) => (i.MESSAGE_TYPE_REGISTER = "REGISTER", i.MESSAGE_TYPE_INVITE = "INVITE", i.MESSAGE_TYPE_REINVITE = "reINVITE", i.MESSAGE_TYPE_ICE = "ICE", i.MESSAGE_TYPE_INFO = "INFO", i.MESSAGE_TYPE_BYE = "BYE", i))(b || {}), W = /* @__PURE__ */ ((i) => (i.FPRE = "fpre", i.IMS = "ims", i.PTT_QUERY_ONLINE_USER = "15", i.PTT_ANSWER_ONLINE_USER = "115", i.PTT_QUERY_INFO = "16", i.PTT_QUERY_INFO_CONFIRM = "116", i))(W || {});
|
|
2
2
|
let H = (i = 21) => crypto.getRandomValues(new Uint8Array(i)).reduce((e, t) => (t &= 63, t < 36 ? e += t.toString(36) : t < 62 ? e += (t - 26).toString(36).toUpperCase() : t > 62 ? e += "-" : e += "_", e), "");
|
|
3
3
|
const te = (i) => {
|
|
4
4
|
i !== void 0 && (i.pause(), i.removeAttribute("src"), i.removeAttribute("srcObject"));
|
|
@@ -352,7 +352,10 @@ class Ce extends ke {
|
|
|
352
352
|
}
|
|
353
353
|
/**生成一个peerconnection */
|
|
354
354
|
buildConnection() {
|
|
355
|
-
let e = new RTCPeerConnection(
|
|
355
|
+
let e = new RTCPeerConnection({
|
|
356
|
+
bundlePolicy: "max-bundle",
|
|
357
|
+
rtcpMuxPolicy: "require"
|
|
358
|
+
});
|
|
356
359
|
return e.addEventListener("connectionstatechange", (t) => p("connectionstatechange", t)), e.addEventListener("icecandidate", (t) => {
|
|
357
360
|
p("icecandidate", t), this.onIceCandidate(t);
|
|
358
361
|
}), e.addEventListener("datachannel", (t) => p("datachannel", t)), e.addEventListener("icecandidateerror", (t) => p("icecandidateerror", t)), e.addEventListener("iceconnectionstatechange", (t) => p("iceconnectionstatechange", t)), e.addEventListener("icegatheringstatechange", (t) => p("icegatheringstatechange", t)), e.addEventListener("negotiationneeded", (t) => p("negotiationneeded", t)), e.addEventListener("signalingstatechange", (t) => p("signalingstatechange", t)), e.addEventListener("track", (t) => this.reciveTrack(t)), e;
|
|
@@ -582,10 +585,10 @@ class ne extends Ce {
|
|
|
582
585
|
});
|
|
583
586
|
}
|
|
584
587
|
}
|
|
585
|
-
var
|
|
588
|
+
var y = /* @__PURE__ */ ((i) => (i.audio = "audio", i.video = "video", i.audioVideo = "audioVideo", i.unknown = "unknown", i))(y || {});
|
|
586
589
|
class Q extends ne {
|
|
587
590
|
constructor() {
|
|
588
|
-
super(...arguments), this.responseCallType =
|
|
591
|
+
super(...arguments), this.responseCallType = y.unknown;
|
|
589
592
|
}
|
|
590
593
|
/**
|
|
591
594
|
* 开始会话
|
|
@@ -596,7 +599,7 @@ class Q extends ne {
|
|
|
596
599
|
await this.setAnswer(r);
|
|
597
600
|
const d = r.split(`\r
|
|
598
601
|
`), h = d.find((C) => C.startsWith("m=audio")), k = d.find((C) => C.startsWith("m=video"));
|
|
599
|
-
this.responseCallType = h && k ?
|
|
602
|
+
this.responseCallType = h && k ? y.audioVideo : h ? y.audio : k ? y.video : y.unknown;
|
|
600
603
|
}
|
|
601
604
|
return n;
|
|
602
605
|
}
|
|
@@ -613,7 +616,7 @@ const x = class x {
|
|
|
613
616
|
}
|
|
614
617
|
};
|
|
615
618
|
x.random = String(Date.now());
|
|
616
|
-
let
|
|
619
|
+
let T = x;
|
|
617
620
|
var M = /* @__PURE__ */ ((i) => (i.connected = "connected", i.disconnected = "disconnected", i.message = "message", i))(M || {});
|
|
618
621
|
const re = `(function(){"use strict";let e,n=!1;const o=self,a={},r={timeout:5*1e3,timeoutObj:null,reset(){return clearInterval(this.timeoutObj),this},sendOnline(){e.readyState===1&&e.send(JSON.stringify(Object.assign(a,{seq:++a.seq})))},start(){this.timeout!==0&&(this.timeoutObj=setInterval(()=>{this.sendOnline()},this.timeout))}};self.addEventListener("message",function(s){const t=s.data;switch(t.cmd){case"config":Object.assign(a,t.heartBeat),r.timeout=t.heartTime*1e3;break;case"start":self.postMessage({type:"webWorker",data:"启动webWorker"}),i(t.url);break;case"close":n=!0,e.close(),self.postMessage({type:"webWorker",data:"停止webWorker"}),self.postMessage({type:"close",data:"close"+new Date().toTimeString()}),self.close();break;case"msg":e.readyState===1&&e.send(JSON.stringify(t.data))}},!1);const i=function(s){e||(e=new WebSocket(s),e.onerror=function(t){c(s)},e.onclose=function(t){c(s)},e.onopen=t=>{o.postMessage({type:"open",data:"start"+new Date().toTimeString()}),r.reset().start()},e.onmessage=t=>{const l=JSON.parse(t.data);o.postMessage({type:"webSocket",data:l})})};function c(s){n||(n=!0,setTimeout(function(){e=null,i(s),n=!1},2e3))}})();
|
|
619
622
|
`, z = typeof self < "u" && self.Blob && new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);", re], { type: "text/javascript;charset=utf-8" });
|
|
@@ -678,7 +681,7 @@ class Ee extends q.EventEmitter {
|
|
|
678
681
|
p("websocket send message ", e), e !== void 0 && this.ws !== void 0 && this.ws.postMessage({ cmd: "msg", data: e });
|
|
679
682
|
}
|
|
680
683
|
}
|
|
681
|
-
class
|
|
684
|
+
class be extends q.EventEmitter {
|
|
682
685
|
// constructor(server: string, localNumber: string, expireTime: number, heartTime: number) {
|
|
683
686
|
// super(server, localNumber, expireTime, heartTime)
|
|
684
687
|
// }
|
|
@@ -717,7 +720,7 @@ class Te extends q.EventEmitter {
|
|
|
717
720
|
this.activeServer = t[0];
|
|
718
721
|
let r = new Ee(
|
|
719
722
|
this.activeServer,
|
|
720
|
-
new
|
|
723
|
+
new T(b.MESSAGE_TYPE_REGISTER, this.localNumber, this.localNumber, { expire: this.expireTime }),
|
|
721
724
|
this.heartTime
|
|
722
725
|
);
|
|
723
726
|
r.on(M.connected, () => {
|
|
@@ -743,7 +746,7 @@ class Te extends q.EventEmitter {
|
|
|
743
746
|
this.socketWorker !== void 0 && (this.unRegister(), this.socketWorker.close(), this.socketWorker = void 0);
|
|
744
747
|
}
|
|
745
748
|
}
|
|
746
|
-
class
|
|
749
|
+
class ye extends be {
|
|
747
750
|
constructor() {
|
|
748
751
|
super(...arguments), this.asyncProducer = /* @__PURE__ */ new Map();
|
|
749
752
|
}
|
|
@@ -770,16 +773,16 @@ class be extends Te {
|
|
|
770
773
|
t !== void 0 ? this.getAsyncResolve(s)?.call(void 0, e) : this.processMessage(e);
|
|
771
774
|
}
|
|
772
775
|
}
|
|
773
|
-
class
|
|
776
|
+
class Te extends ye {
|
|
774
777
|
/**
|
|
775
778
|
* send register message to the server
|
|
776
779
|
*/
|
|
777
780
|
async register() {
|
|
778
|
-
let e = new
|
|
781
|
+
let e = new T(b.MESSAGE_TYPE_REGISTER, this.localNumber, this.localNumber, { expire: this.expireTime });
|
|
779
782
|
return this.sendRespondableMessage(e);
|
|
780
783
|
}
|
|
781
784
|
unRegister() {
|
|
782
|
-
let e = new
|
|
785
|
+
let e = new T(b.MESSAGE_TYPE_REGISTER, this.localNumber, this.localNumber, { expire: 0 });
|
|
783
786
|
this.sendMessage(e);
|
|
784
787
|
}
|
|
785
788
|
/**
|
|
@@ -790,7 +793,7 @@ class ye extends be {
|
|
|
790
793
|
* @returns
|
|
791
794
|
*/
|
|
792
795
|
async invite(e, t, s) {
|
|
793
|
-
return this.sendRespondableMessage(new
|
|
796
|
+
return this.sendRespondableMessage(new T(b.MESSAGE_TYPE_INVITE, this.localNumber, e, { cid: t, sdp: s }));
|
|
794
797
|
}
|
|
795
798
|
/**
|
|
796
799
|
* send a ice request to user
|
|
@@ -807,7 +810,7 @@ class ye extends be {
|
|
|
807
810
|
* @param cid session id
|
|
808
811
|
*/
|
|
809
812
|
sendBye(e, t) {
|
|
810
|
-
return this.sendMessage(new
|
|
813
|
+
return this.sendMessage(new T(b.MESSAGE_TYPE_BYE, this.localNumber, e, { cid: t }));
|
|
811
814
|
}
|
|
812
815
|
/**
|
|
813
816
|
* answer message
|
|
@@ -832,7 +835,7 @@ class ye extends be {
|
|
|
832
835
|
}
|
|
833
836
|
//发送dtmf
|
|
834
837
|
async sendDtmf(e, t, s) {
|
|
835
|
-
return this.sendMessage(new
|
|
838
|
+
return this.sendMessage(new T(b.MESSAGE_TYPE_INFO, this.localNumber, e, { cid: t, info: { msg: "dtmf", dtmf: s } }));
|
|
836
839
|
}
|
|
837
840
|
}
|
|
838
841
|
var Se;
|
|
@@ -1219,7 +1222,7 @@ class xe extends m {
|
|
|
1219
1222
|
const Ge = async (i, e = 20, t = !0) => {
|
|
1220
1223
|
let s = new xe(i, e, t);
|
|
1221
1224
|
return await s.initClient(), s;
|
|
1222
|
-
}, G = class G extends
|
|
1225
|
+
}, G = class G extends Te {
|
|
1223
1226
|
constructor(e) {
|
|
1224
1227
|
let t = e.expireTime || G.defaultExpireTime;
|
|
1225
1228
|
super(e.server, e.localNumber, t, e.heartTime || (e.localNumber ? 5 : 0)), this.enablePtt = e.enablePtt, this.pttServer = e.pttServer;
|
|
@@ -1273,10 +1276,10 @@ let j = G;
|
|
|
1273
1276
|
class Ve extends ne {
|
|
1274
1277
|
//invite seq
|
|
1275
1278
|
constructor(e, t, s, n, r) {
|
|
1276
|
-
super(e, t, s), this.callType =
|
|
1279
|
+
super(e, t, s), this.callType = y.unknown, this.inviteSeq = r, this.inviteOffer = n;
|
|
1277
1280
|
const d = n.split(`\r
|
|
1278
1281
|
`), h = d.find((C) => C.startsWith("m=audio")), k = d.find((C) => C.startsWith("m=video"));
|
|
1279
|
-
this.callType = h && k ?
|
|
1282
|
+
this.callType = h && k ? y.audioVideo : h ? y.audio : k ? y.video : y.unknown;
|
|
1280
1283
|
}
|
|
1281
1284
|
}
|
|
1282
1285
|
const ee = {
|
|
@@ -1363,15 +1366,15 @@ class ue extends j {
|
|
|
1363
1366
|
//处理一些服务端主动发送来的消息
|
|
1364
1367
|
processMessage(e) {
|
|
1365
1368
|
let { req: t } = e;
|
|
1366
|
-
if (t ===
|
|
1369
|
+
if (t === b.MESSAGE_TYPE_INVITE) {
|
|
1367
1370
|
let s = new Ve(this, e.cid, e.from, e.sdp, e.seq);
|
|
1368
1371
|
this.allSession.push(s), this.emit(U.invite, s);
|
|
1369
|
-
} else if (t ===
|
|
1372
|
+
} else if (t === b.MESSAGE_TYPE_REINVITE) {
|
|
1370
1373
|
let s = this.allSession.find((n) => n.sessionId == e.cid);
|
|
1371
1374
|
s !== void 0 && (s.inviteSeq = e.seq, s.inviteOffer = e.sdp, s.acceptCall(), s.emit(S.reInvite, s));
|
|
1372
|
-
} else if (t ===
|
|
1375
|
+
} else if (t === b.MESSAGE_TYPE_ICE)
|
|
1373
1376
|
this.allSession.find((s) => s.sessionId === e.cid)?.reciveIceRequest(e);
|
|
1374
|
-
else if (t ===
|
|
1377
|
+
else if (t === b.MESSAGE_TYPE_BYE) {
|
|
1375
1378
|
let s = this.allSession.find((n) => n.sessionId === e.cid);
|
|
1376
1379
|
s !== void 0 && (s.emit(S.bye, e), s.destroy(!1));
|
|
1377
1380
|
}
|
|
@@ -1393,11 +1396,11 @@ const je = async (i) => {
|
|
|
1393
1396
|
let e = new ue(i);
|
|
1394
1397
|
await e.reConnect(), await e.initPttClient().catch((s) => {
|
|
1395
1398
|
console.error(s);
|
|
1396
|
-
}),
|
|
1399
|
+
}), T.random = String(Date.now());
|
|
1397
1400
|
let t = await e.register();
|
|
1398
1401
|
return t.status === N.ok ? e : (e.destroy(), Promise.reject(t));
|
|
1399
1402
|
}, Ue = async (i, e, t, s) => {
|
|
1400
|
-
|
|
1403
|
+
T.random = String(Date.now());
|
|
1401
1404
|
let n = new ue({ server: i, localNumber: "anonymous", ...s });
|
|
1402
1405
|
await n.reConnect();
|
|
1403
1406
|
const r = n.playRemote(e, t, s);
|
|
@@ -1412,7 +1415,7 @@ const je = async (i) => {
|
|
|
1412
1415
|
export {
|
|
1413
1416
|
D as PTTEvent,
|
|
1414
1417
|
Ve as RtcCalledSession,
|
|
1415
|
-
|
|
1418
|
+
y as RtcCalledType,
|
|
1416
1419
|
ue as RtcClient,
|
|
1417
1420
|
U as RtcClientEvent,
|
|
1418
1421
|
N as RtcInviteStatus,
|
package/dist/index.umd.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(p,w){typeof exports=="object"&&typeof module<"u"?w(exports):typeof define=="function"&&define.amd?define(["exports"],w):(p=typeof globalThis<"u"?globalThis:p||self,w(p.UscRtc={}))})(this,(function(p){"use strict";var w=(i=>(i.bye="bye",i.stream="stream",i.reInvite="reInvite",i.localAudioChange="localAudioChange",i.localVideoChange="localVideoChange",i.localStreamChange="localStreamChange",i))(w||{}),P=(i=>(i.connected="connected",i.disconnected="disconnected",i.invite="invite",i))(P||{}),x=(i=>(i.PTTInfo="PTTInfo",i.FPREInfo="FPREInfo",i.IMSInfo="IMSInfo",i.ERROR="error",i.SPEAKER="speaker",i.TALKING="talking",i.ACTIVE_GROUP="activeGroup",i.JOIN_INFO="joinInfo",i))(x||{}),b=(i=>(i.MESSAGE_TYPE_REGISTER="REGISTER",i.MESSAGE_TYPE_INVITE="INVITE",i.MESSAGE_TYPE_REINVITE="reINVITE",i.MESSAGE_TYPE_ICE="ICE",i.MESSAGE_TYPE_INFO="INFO",i.MESSAGE_TYPE_BYE="BYE",i))(b||{}),U=(i=>(i.FPRE="fpre",i.IMS="ims",i.PTT_QUERY_ONLINE_USER="15",i.PTT_ANSWER_ONLINE_USER="115",i.PTT_QUERY_INFO="16",i.PTT_QUERY_INFO_CONFIRM="116",i))(U||{});let J=(i=21)=>crypto.getRandomValues(new Uint8Array(i)).reduce((e,t)=>(t&=63,t<36?e+=t.toString(36):t<62?e+=(t-26).toString(36).toUpperCase():t>62?e+="-":e+="_",e),"");const q=i=>{i!==void 0&&(i.pause(),i.removeAttribute("src"),i.removeAttribute("srcObject"))},F=(i,e)=>{i!==void 0&&e!==void 0&&(e.srcObject=i,e.play())},Y=i=>{i.onaddtrack=null,i.onremovetrack=null,i.getTracks().forEach(e=>{i?.removeTrack(e),e.onended=null,e.onmute=null,e.onunmute=null,e.stop()})};let G=!1;const g=(i,...e)=>{G&&console.log(`%c usc-rtc-devtools %c ${i} %c `,"background:#35495e ; padding: 1px; border-radius: 3px 0 0 3px; color: #fff","background:#41b883 ; padding: 1px; border-radius: 0 3px 3px 0; color: #fff","background:transparent",...e)},fe=(i,...e)=>{G&&console.log(`%c usc-rtc-devtools %c ${i} %c `,"background:#35495e ; padding: 1px; border-radius: 3px 0 0 3px; color: #fff","background:#ff0000 ; padding: 1px; border-radius: 0 3px 3px 0; color: #fff","background:transparent",...e)},me=()=>{G=!1},ve=()=>{G=!0};var V={exports:{}},Q;function pe(){if(Q)return V.exports;Q=1;var i=typeof Reflect=="object"?Reflect:null,e=i&&typeof i.apply=="function"?i.apply:function(o,c,u){return Function.prototype.apply.call(o,c,u)},t;i&&typeof i.ownKeys=="function"?t=i.ownKeys:Object.getOwnPropertySymbols?t=function(o){return Object.getOwnPropertyNames(o).concat(Object.getOwnPropertySymbols(o))}:t=function(o){return Object.getOwnPropertyNames(o)};function s(a){console&&console.warn&&console.warn(a)}var n=Number.isNaN||function(o){return o!==o};function r(){r.init.call(this)}V.exports=r,V.exports.once=Ue,r.EventEmitter=r,r.prototype._events=void 0,r.prototype._eventsCount=0,r.prototype._maxListeners=void 0;var d=10;function h(a){if(typeof a!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof a)}Object.defineProperty(r,"defaultMaxListeners",{enumerable:!0,get:function(){return d},set:function(a){if(typeof a!="number"||a<0||n(a))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+a+".");d=a}}),r.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},r.prototype.setMaxListeners=function(o){if(typeof o!="number"||o<0||n(o))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+o+".");return this._maxListeners=o,this};function C(a){return a._maxListeners===void 0?r.defaultMaxListeners:a._maxListeners}r.prototype.getMaxListeners=function(){return C(this)},r.prototype.emit=function(o){for(var c=[],u=1;u<arguments.length;u++)c.push(arguments[u]);var l=o==="error",v=this._events;if(v!==void 0)l=l&&v.error===void 0;else if(!l)return!1;if(l){var f;if(c.length>0&&(f=c[0]),f instanceof Error)throw f;var S=new Error("Unhandled error."+(f?" ("+f.message+")":""));throw S.context=f,S}var O=v[o];if(O===void 0)return!1;if(typeof O=="function")e(O,this,c);else for(var he=O.length,Fe=ue(O,he),u=0;u<he;++u)e(Fe[u],this,c);return!0};function E(a,o,c,u){var l,v,f;if(h(c),v=a._events,v===void 0?(v=a._events=Object.create(null),a._eventsCount=0):(v.newListener!==void 0&&(a.emit("newListener",o,c.listener?c.listener:c),v=a._events),f=v[o]),f===void 0)f=v[o]=c,++a._eventsCount;else if(typeof f=="function"?f=v[o]=u?[c,f]:[f,c]:u?f.unshift(c):f.push(c),l=C(a),l>0&&f.length>l&&!f.warned){f.warned=!0;var S=new Error("Possible EventEmitter memory leak detected. "+f.length+" "+String(o)+" listeners added. Use emitter.setMaxListeners() to increase limit");S.name="MaxListenersExceededWarning",S.emitter=a,S.type=o,S.count=f.length,s(S)}return a}r.prototype.addListener=function(o,c){return E(this,o,c,!1)},r.prototype.on=r.prototype.addListener,r.prototype.prependListener=function(o,c){return E(this,o,c,!0)};function j(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function R(a,o,c){var u={fired:!1,wrapFn:void 0,target:a,type:o,listener:c},l=j.bind(u);return l.listener=c,u.wrapFn=l,l}r.prototype.once=function(o,c){return h(c),this.on(o,R(this,o,c)),this},r.prototype.prependOnceListener=function(o,c){return h(c),this.prependListener(o,R(this,o,c)),this},r.prototype.removeListener=function(o,c){var u,l,v,f,S;if(h(c),l=this._events,l===void 0)return this;if(u=l[o],u===void 0)return this;if(u===c||u.listener===c)--this._eventsCount===0?this._events=Object.create(null):(delete l[o],l.removeListener&&this.emit("removeListener",o,u.listener||c));else if(typeof u!="function"){for(v=-1,f=u.length-1;f>=0;f--)if(u[f]===c||u[f].listener===c){S=u[f].listener,v=f;break}if(v<0)return this;v===0?u.shift():We(u,v),u.length===1&&(l[o]=u[0]),l.removeListener!==void 0&&this.emit("removeListener",o,S||c)}return this},r.prototype.off=r.prototype.removeListener,r.prototype.removeAllListeners=function(o){var c,u,l;if(u=this._events,u===void 0)return this;if(u.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):u[o]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete u[o]),this;if(arguments.length===0){var v=Object.keys(u),f;for(l=0;l<v.length;++l)f=v[l],f!=="removeListener"&&this.removeAllListeners(f);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(c=u[o],typeof c=="function")this.removeListener(o,c);else if(c!==void 0)for(l=c.length-1;l>=0;l--)this.removeListener(o,c[l]);return this};function ce(a,o,c){var u=a._events;if(u===void 0)return[];var l=u[o];return l===void 0?[]:typeof l=="function"?c?[l.listener||l]:[l]:c?je(l):ue(l,l.length)}r.prototype.listeners=function(o){return ce(this,o,!0)},r.prototype.rawListeners=function(o){return ce(this,o,!1)},r.listenerCount=function(a,o){return typeof a.listenerCount=="function"?a.listenerCount(o):de.call(a,o)},r.prototype.listenerCount=de;function de(a){var o=this._events;if(o!==void 0){var c=o[a];if(typeof c=="function")return 1;if(c!==void 0)return c.length}return 0}r.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]};function ue(a,o){for(var c=new Array(o),u=0;u<o;++u)c[u]=a[u];return c}function We(a,o){for(;o+1<a.length;o++)a[o]=a[o+1];a.pop()}function je(a){for(var o=new Array(a.length),c=0;c<o.length;++c)o[c]=a[c].listener||a[c];return o}function Ue(a,o){return new Promise(function(c,u){function l(f){a.removeListener(o,v),u(f)}function v(){typeof a.removeListener=="function"&&a.removeListener("error",l),c([].slice.call(arguments))}le(a,o,v,{once:!0}),o!=="error"&&qe(a,l,{once:!0})})}function qe(a,o,c){typeof a.on=="function"&&le(a,"error",o,c)}function le(a,o,c,u){if(typeof a.on=="function")u.once?a.once(o,c):a.on(o,c);else if(typeof a.addEventListener=="function")a.addEventListener(o,function l(v){u.once&&a.removeEventListener(o,l),c(v)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof a)}return V.exports}var K=pe();class ge extends K.EventEmitter{constructor(){super(),this.localMediaStream=new MediaStream,this.videoConstrains={width:{ideal:1920},height:{ideal:1080},frameRate:{ideal:20,max:30},aspectRatio:{ideal:16/9}},this.audioConstrants={noiseSuppression:!0,echoCancellation:!0,autoGainControl:!0},super.setMaxListeners(0)}releaseTrack(e){e!==void 0&&(this.localMediaStream?.removeTrack(e),e.stop())}addDeviceChangeListener(e){navigator.mediaDevices.addEventListener("devicechange",e)}removeDeviceChangeListener(e){navigator.mediaDevices.removeEventListener("devicechange",e)}setVideoTrack(e){this.emit(w.localVideoChange,{from:this.videoTrack,to:e}),this.videoTrack!==e&&(this.localMediaStream?.addTrack(e),this.localTractChange(this.videoTrack,e)),this.videoTrack=e}setAudioTrack(e){this.emit(w.localAudioChange,{from:this.audioTrack,to:e}),this.audioTrack!==e&&(this.localMediaStream?.addTrack(e),this.localTractChange(this.audioTrack,e)),this.audioTrack=e}renderLocalStreamToContainer(e){F(this.localMediaStream,e)}async getAllInputResource(){let e=await navigator.mediaDevices.enumerateDevices();return{audio:e.filter(t=>t.kind==="audioinput"),video:e.filter(t=>t.kind==="videoinput")}}async useDefaultDevice(e){let t={audio:!0,video:!0},s=await navigator.mediaDevices.getUserMedia(t);this.setAudioTrack(s.getAudioTracks()[0]),this.setVideoTrack(s.getVideoTracks()[0]),this.renderLocalStreamToContainer(e)}async useAudio(e){let t=e===void 0?{audio:{...this.audioConstrants},video:!1}:{video:!1,audio:{deviceId:e,...this.audioConstrants}},s=await navigator.mediaDevices.getUserMedia(t);return this.setAudioTrack(s.getAudioTracks()[0]),s.getAudioTracks()[0]}async useDeviceVideo(e){let t=e===void 0?{audio:!1,video:{...this.videoConstrains}}:{audio:!1,video:{deviceId:e,...this.videoConstrains}},s=await navigator.mediaDevices.getUserMedia(t);return this.setVideoTrack(s.getVideoTracks()[0]),s.getVideoTracks()[0]}async useDeskTopVideo(){let e=await navigator.mediaDevices.getDisplayMedia({video:{...this.videoConstrains},audio:!1});return this.setVideoTrack(e.getVideoTracks()[0]),e.getVideoTracks()[0]}disableAudio(){this.audioTrack!==void 0&&this.audioTrack.enabled&&(g("local audio status change",this.audioTrack),this.audioTrack.enabled=!1,this.setAudioTrack(this.audioTrack))}enableAudio(){this.audioTrack!==void 0&&!this.audioTrack.enabled&&(g("local audio status change",this.audioTrack),this.audioTrack.enabled=!0,this.setAudioTrack(this.audioTrack))}disableVideo(){this.videoTrack!==void 0&&this.videoTrack.enabled&&(g("local video status change",this.videoTrack),this.videoTrack.enabled=!1,this.setVideoTrack(this.videoTrack))}enableVideo(){this.videoTrack!==void 0&&!this.videoTrack.enabled&&(g("local video status change",this.videoTrack),this.videoTrack.enabled=!0,this.setVideoTrack(this.videoTrack))}close(){this.releaseTrack(this.audioTrack),this.releaseTrack(this.videoTrack),this.audioTrack=void 0,this.videoTrack=void 0,this.localMediaStream=void 0}}class ke extends ge{constructor(){super(),this.videoCodecs=[],this.audioCodecs=[],this.audioReciveCodecs=[],this.preferCodec(),this.peerConnection=this.buildConnection()}buildConnection(){let e=new RTCPeerConnection;return e.addEventListener("connectionstatechange",t=>g("connectionstatechange",t)),e.addEventListener("icecandidate",t=>{g("icecandidate",t),this.onIceCandidate(t)}),e.addEventListener("datachannel",t=>g("datachannel",t)),e.addEventListener("icecandidateerror",t=>g("icecandidateerror",t)),e.addEventListener("iceconnectionstatechange",t=>g("iceconnectionstatechange",t)),e.addEventListener("icegatheringstatechange",t=>g("icegatheringstatechange",t)),e.addEventListener("negotiationneeded",t=>g("negotiationneeded",t)),e.addEventListener("signalingstatechange",t=>g("signalingstatechange",t)),e.addEventListener("track",t=>this.reciveTrack(t)),e}async localTractChange(e,t){if(this.remoteStream!==void 0&&this.peerConnection!==void 0)if(t!==void 0){let s=this.peerConnection.getSenders().find(n=>n.track?.kind===t.kind);s!==void 0&&s.replaceTrack(t)}else{let s=this.peerConnection.getSenders().find(n=>n.track?.kind===e?.kind);s!==void 0&&this.peerConnection.removeTrack(s)}t!==void 0&&(t.onended=s=>g("local track end",s),t.onmute=s=>{g("local mute",s),this.emitLocalStreamChange()},t.onunmute=s=>{g("local unmute",s),this.emitLocalStreamChange()}),this.releaseTrack(e),this.emitLocalStreamChange()}isInMeeting(){return this.remoteStream!==void 0}hasRemoteVideo(e){return e?.getVideoTracks().some(t=>t.muted===!1&&t.readyState==="live")??!1}emitLocalStreamChange(){this.emit(w.localStreamChange,{audioOnly:!this.hasRemoteVideo(this.localMediaStream),stream:this.localMediaStream})}emitRemoteStreamChange(){this.emit(w.stream,{audioOnly:!this.hasRemoteVideo(this.remoteStream),stream:this.remoteStream})}trigerStreamChange(e=100){this.emitStreamTimeout!==void 0&&clearTimeout(this.emitStreamTimeout),this.emitStreamTimeout=setTimeout(()=>{this.emitRemoteStreamChange(),this.emitStreamTimeout=void 0},e)}reciveTrack(e){g("recive track",e),this.remoteStream===void 0&&(this.remoteStream=new MediaStream),e.track.addEventListener("ended",()=>this.trigerStreamChange()),e.track.addEventListener("mute",()=>this.trigerStreamChange(3e3)),e.track.addEventListener("unmute",()=>this.trigerStreamChange(10)),this.remoteStream.addTrack(e.track),this.trigerStreamChange()}preferCodec(e="H264",t="PCMA"){this.videoCodecs=[];let s=RTCRtpSender.getCapabilities("video");s!==null&&this.videoCodecs.push(...s.codecs.filter(h=>h.mimeType===`video/${e}`));let n=RTCRtpReceiver.getCapabilities("video");n!==null&&this.videoCodecs.push(...n.codecs.filter(h=>h.mimeType===`video/${e}`)),this.audioCodecs=[];let r=RTCRtpSender.getCapabilities("audio");r!==null&&this.audioCodecs.push(...r.codecs.filter(h=>h.mimeType===`audio/${t}`));let d=RTCRtpReceiver.getCapabilities("audio");d!==null&&this.audioCodecs.push(...d.codecs.filter(h=>h.mimeType===`audio/${t}`))}trackIsInPeerConnection(e){return this.peerConnection?.getSenders().some(t=>t.track?.id===e.id)??!1}updateTracks(){if(this.peerConnection===void 0||this.peerConnection.signalingState==="closed")throw new Error("session is closed !");if(this.audioTrack===void 0&&this.videoTrack===void 0){this.peerConnection.addTransceiver("audio",{direction:"recvonly"}),this.peerConnection.addTransceiver("video",{direction:"recvonly"});return}if(this.audioTrack!==void 0&&!this.trackIsInPeerConnection(this.audioTrack))try{this.peerConnection.addTrack(this.audioTrack)}catch{}if(this.videoTrack!==void 0&&!this.trackIsInPeerConnection(this.videoTrack))try{this.peerConnection.addTrack(this.videoTrack)}catch{}try{this.peerConnection.getTransceivers().forEach(e=>{e.sender.track!==null&&(e.sender.track.kind==="video"?e.setCodecPreferences([...this.videoCodecs]):e.sender.track.kind==="audio"&&e.setCodecPreferences([...this.audioCodecs]))})}catch(e){fe("preferCodec error",e,this.audioCodecs,this.videoCodecs)}}async createOffer(){if(this.peerConnection===void 0)throw new Error("session is closed !");this.updateTracks();let e=await this.peerConnection.createOffer();return await this.peerConnection.setLocalDescription(e),e}async setOffer(e){if(this.peerConnection===void 0)throw new Error("session is closed !");this.updateTracks(),await this.peerConnection.setRemoteDescription({type:"offer",sdp:e})}async createAnswer(){if(this.peerConnection===void 0)throw new Error("session is closed !");this.updateTracks();let e=await this.peerConnection.createAnswer();return this.peerConnection.setLocalDescription(e),e}async setAnswer(e){if(this.peerConnection===void 0)throw new Error("session is closed !");await this.peerConnection.setRemoteDescription({type:"answer",sdp:e})}setRemoteIce(e){if(this.peerConnection===void 0)throw new Error("session is closed !");let t=new RTCIceCandidate(e);this.peerConnection.addIceCandidate(t)}closeConnection(e){e.close(),e.ontrack=null,e.onicecandidate=null,e.oniceconnectionstatechange=null,e.onsignalingstatechange=null,e.onicegatheringstatechange=null,e.onnegotiationneeded=null,e.onicecandidateerror=null,e.ondatachannel=null,e.onconnectionstatechange=null}close(){super.close(),this.peerConnection!==void 0&&(this.closeConnection(this.peerConnection),this.peerConnection=void 0),this.remoteStream!==void 0&&Y(this.remoteStream)}}var M=(i=>(i[i.timeout=408]="timeout",i[i.reject=488]="reject",i[i.busy=486]="busy",i[i.notfound=404]="notfound",i[i.notAllowedMedia=415]="notAllowedMedia",i[i.ok=200]="ok",i))(M||{});class z extends ke{constructor(e,t,s){super(),this.sessionId=t,this.rtcClient=e,this.remoteNumber=s}reciveIceRequest({ice:e}){this.setRemoteIce(JSON.parse(e))}getRemoteNumber(){return this.remoteNumber}onIceCandidate(e){}destroy(e=!0){this.removeAllListeners(),this.rtcClient!==void 0&&(this.remoteNumber!==void 0&&(e&&this.rtcClient.sendBye(this.remoteNumber,this.sessionId),this.remoteNumber=void 0),this.rtcClient.removeSession(this)),this.rtcClient=void 0,super.close()}rejectCall(){let[e,t,s]=this.checkIsNotUndefined(this.rtcClient,this.remoteNumber,this.inviteSeq);e.answer(M.reject,s,t,this.sessionId),this.destroy()}async acceptCall(){if(this.inviteOffer!==void 0){await this.setOffer(this.inviteOffer);let[e,t,s]=this.checkIsNotUndefined(this.rtcClient,this.remoteNumber,this.inviteSeq),{sdp:n}=await this.createAnswer();e.answer(M.ok,s,t,this.sessionId,n)}}async pickNewConnection(){this.peerConnection!==void 0&&this.closeConnection(this.peerConnection),this.peerConnection=this.buildConnection(),this.remoteStream!==void 0&&(Y(this.remoteStream),this.remoteStream=void 0,this.acceptCall())}checkIsNotUndefined(...e){for(const t of e)if(t===void 0)throw new Error("someone is undefined");return e}async sendDtmf(e){this.rtcClient?.sendDtmf(this.remoteNumber,this.sessionId,e)}playRemoteStream(e,t){const{audioOnly:s=!1}=t||{};this.on(w.stream,n=>{if(n.stream){const r=s?new MediaStream(n.stream.getAudioTracks()):n.stream;F(r,e)}}),this.on(w.bye,()=>{e&&q(e)})}}var T=(i=>(i.audio="audio",i.video="video",i.audioVideo="audioVideo",i.unknown="unknown",i))(T||{});class $ extends z{constructor(){super(...arguments),this.responseCallType=T.unknown}async start(){let[e,t]=this.checkIsNotUndefined(this.rtcClient,this.remoteNumber),s=await this.createOffer(),{status:n,sdp:r}=await e.invite(t,this.sessionId,s.sdp);if(n===M.ok){await this.setAnswer(r);const d=r.split(`\r
|
|
1
|
+
(function(p,w){typeof exports=="object"&&typeof module<"u"?w(exports):typeof define=="function"&&define.amd?define(["exports"],w):(p=typeof globalThis<"u"?globalThis:p||self,w(p.UscRtc={}))})(this,(function(p){"use strict";var w=(i=>(i.bye="bye",i.stream="stream",i.reInvite="reInvite",i.localAudioChange="localAudioChange",i.localVideoChange="localVideoChange",i.localStreamChange="localStreamChange",i))(w||{}),P=(i=>(i.connected="connected",i.disconnected="disconnected",i.invite="invite",i))(P||{}),x=(i=>(i.PTTInfo="PTTInfo",i.FPREInfo="FPREInfo",i.IMSInfo="IMSInfo",i.ERROR="error",i.SPEAKER="speaker",i.TALKING="talking",i.ACTIVE_GROUP="activeGroup",i.JOIN_INFO="joinInfo",i))(x||{}),b=(i=>(i.MESSAGE_TYPE_REGISTER="REGISTER",i.MESSAGE_TYPE_INVITE="INVITE",i.MESSAGE_TYPE_REINVITE="reINVITE",i.MESSAGE_TYPE_ICE="ICE",i.MESSAGE_TYPE_INFO="INFO",i.MESSAGE_TYPE_BYE="BYE",i))(b||{}),U=(i=>(i.FPRE="fpre",i.IMS="ims",i.PTT_QUERY_ONLINE_USER="15",i.PTT_ANSWER_ONLINE_USER="115",i.PTT_QUERY_INFO="16",i.PTT_QUERY_INFO_CONFIRM="116",i))(U||{});let J=(i=21)=>crypto.getRandomValues(new Uint8Array(i)).reduce((e,t)=>(t&=63,t<36?e+=t.toString(36):t<62?e+=(t-26).toString(36).toUpperCase():t>62?e+="-":e+="_",e),"");const q=i=>{i!==void 0&&(i.pause(),i.removeAttribute("src"),i.removeAttribute("srcObject"))},F=(i,e)=>{i!==void 0&&e!==void 0&&(e.srcObject=i,e.play())},Y=i=>{i.onaddtrack=null,i.onremovetrack=null,i.getTracks().forEach(e=>{i?.removeTrack(e),e.onended=null,e.onmute=null,e.onunmute=null,e.stop()})};let G=!1;const g=(i,...e)=>{G&&console.log(`%c usc-rtc-devtools %c ${i} %c `,"background:#35495e ; padding: 1px; border-radius: 3px 0 0 3px; color: #fff","background:#41b883 ; padding: 1px; border-radius: 0 3px 3px 0; color: #fff","background:transparent",...e)},fe=(i,...e)=>{G&&console.log(`%c usc-rtc-devtools %c ${i} %c `,"background:#35495e ; padding: 1px; border-radius: 3px 0 0 3px; color: #fff","background:#ff0000 ; padding: 1px; border-radius: 0 3px 3px 0; color: #fff","background:transparent",...e)},me=()=>{G=!1},ve=()=>{G=!0};var V={exports:{}},Q;function pe(){if(Q)return V.exports;Q=1;var i=typeof Reflect=="object"?Reflect:null,e=i&&typeof i.apply=="function"?i.apply:function(o,c,u){return Function.prototype.apply.call(o,c,u)},t;i&&typeof i.ownKeys=="function"?t=i.ownKeys:Object.getOwnPropertySymbols?t=function(o){return Object.getOwnPropertyNames(o).concat(Object.getOwnPropertySymbols(o))}:t=function(o){return Object.getOwnPropertyNames(o)};function s(a){console&&console.warn&&console.warn(a)}var n=Number.isNaN||function(o){return o!==o};function r(){r.init.call(this)}V.exports=r,V.exports.once=Ue,r.EventEmitter=r,r.prototype._events=void 0,r.prototype._eventsCount=0,r.prototype._maxListeners=void 0;var d=10;function h(a){if(typeof a!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof a)}Object.defineProperty(r,"defaultMaxListeners",{enumerable:!0,get:function(){return d},set:function(a){if(typeof a!="number"||a<0||n(a))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+a+".");d=a}}),r.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},r.prototype.setMaxListeners=function(o){if(typeof o!="number"||o<0||n(o))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+o+".");return this._maxListeners=o,this};function C(a){return a._maxListeners===void 0?r.defaultMaxListeners:a._maxListeners}r.prototype.getMaxListeners=function(){return C(this)},r.prototype.emit=function(o){for(var c=[],u=1;u<arguments.length;u++)c.push(arguments[u]);var l=o==="error",v=this._events;if(v!==void 0)l=l&&v.error===void 0;else if(!l)return!1;if(l){var f;if(c.length>0&&(f=c[0]),f instanceof Error)throw f;var S=new Error("Unhandled error."+(f?" ("+f.message+")":""));throw S.context=f,S}var O=v[o];if(O===void 0)return!1;if(typeof O=="function")e(O,this,c);else for(var he=O.length,Fe=ue(O,he),u=0;u<he;++u)e(Fe[u],this,c);return!0};function E(a,o,c,u){var l,v,f;if(h(c),v=a._events,v===void 0?(v=a._events=Object.create(null),a._eventsCount=0):(v.newListener!==void 0&&(a.emit("newListener",o,c.listener?c.listener:c),v=a._events),f=v[o]),f===void 0)f=v[o]=c,++a._eventsCount;else if(typeof f=="function"?f=v[o]=u?[c,f]:[f,c]:u?f.unshift(c):f.push(c),l=C(a),l>0&&f.length>l&&!f.warned){f.warned=!0;var S=new Error("Possible EventEmitter memory leak detected. "+f.length+" "+String(o)+" listeners added. Use emitter.setMaxListeners() to increase limit");S.name="MaxListenersExceededWarning",S.emitter=a,S.type=o,S.count=f.length,s(S)}return a}r.prototype.addListener=function(o,c){return E(this,o,c,!1)},r.prototype.on=r.prototype.addListener,r.prototype.prependListener=function(o,c){return E(this,o,c,!0)};function j(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function R(a,o,c){var u={fired:!1,wrapFn:void 0,target:a,type:o,listener:c},l=j.bind(u);return l.listener=c,u.wrapFn=l,l}r.prototype.once=function(o,c){return h(c),this.on(o,R(this,o,c)),this},r.prototype.prependOnceListener=function(o,c){return h(c),this.prependListener(o,R(this,o,c)),this},r.prototype.removeListener=function(o,c){var u,l,v,f,S;if(h(c),l=this._events,l===void 0)return this;if(u=l[o],u===void 0)return this;if(u===c||u.listener===c)--this._eventsCount===0?this._events=Object.create(null):(delete l[o],l.removeListener&&this.emit("removeListener",o,u.listener||c));else if(typeof u!="function"){for(v=-1,f=u.length-1;f>=0;f--)if(u[f]===c||u[f].listener===c){S=u[f].listener,v=f;break}if(v<0)return this;v===0?u.shift():We(u,v),u.length===1&&(l[o]=u[0]),l.removeListener!==void 0&&this.emit("removeListener",o,S||c)}return this},r.prototype.off=r.prototype.removeListener,r.prototype.removeAllListeners=function(o){var c,u,l;if(u=this._events,u===void 0)return this;if(u.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):u[o]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete u[o]),this;if(arguments.length===0){var v=Object.keys(u),f;for(l=0;l<v.length;++l)f=v[l],f!=="removeListener"&&this.removeAllListeners(f);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(c=u[o],typeof c=="function")this.removeListener(o,c);else if(c!==void 0)for(l=c.length-1;l>=0;l--)this.removeListener(o,c[l]);return this};function ce(a,o,c){var u=a._events;if(u===void 0)return[];var l=u[o];return l===void 0?[]:typeof l=="function"?c?[l.listener||l]:[l]:c?je(l):ue(l,l.length)}r.prototype.listeners=function(o){return ce(this,o,!0)},r.prototype.rawListeners=function(o){return ce(this,o,!1)},r.listenerCount=function(a,o){return typeof a.listenerCount=="function"?a.listenerCount(o):de.call(a,o)},r.prototype.listenerCount=de;function de(a){var o=this._events;if(o!==void 0){var c=o[a];if(typeof c=="function")return 1;if(c!==void 0)return c.length}return 0}r.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]};function ue(a,o){for(var c=new Array(o),u=0;u<o;++u)c[u]=a[u];return c}function We(a,o){for(;o+1<a.length;o++)a[o]=a[o+1];a.pop()}function je(a){for(var o=new Array(a.length),c=0;c<o.length;++c)o[c]=a[c].listener||a[c];return o}function Ue(a,o){return new Promise(function(c,u){function l(f){a.removeListener(o,v),u(f)}function v(){typeof a.removeListener=="function"&&a.removeListener("error",l),c([].slice.call(arguments))}le(a,o,v,{once:!0}),o!=="error"&&qe(a,l,{once:!0})})}function qe(a,o,c){typeof a.on=="function"&&le(a,"error",o,c)}function le(a,o,c,u){if(typeof a.on=="function")u.once?a.once(o,c):a.on(o,c);else if(typeof a.addEventListener=="function")a.addEventListener(o,function l(v){u.once&&a.removeEventListener(o,l),c(v)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof a)}return V.exports}var K=pe();class ge extends K.EventEmitter{constructor(){super(),this.localMediaStream=new MediaStream,this.videoConstrains={width:{ideal:1920},height:{ideal:1080},frameRate:{ideal:20,max:30},aspectRatio:{ideal:16/9}},this.audioConstrants={noiseSuppression:!0,echoCancellation:!0,autoGainControl:!0},super.setMaxListeners(0)}releaseTrack(e){e!==void 0&&(this.localMediaStream?.removeTrack(e),e.stop())}addDeviceChangeListener(e){navigator.mediaDevices.addEventListener("devicechange",e)}removeDeviceChangeListener(e){navigator.mediaDevices.removeEventListener("devicechange",e)}setVideoTrack(e){this.emit(w.localVideoChange,{from:this.videoTrack,to:e}),this.videoTrack!==e&&(this.localMediaStream?.addTrack(e),this.localTractChange(this.videoTrack,e)),this.videoTrack=e}setAudioTrack(e){this.emit(w.localAudioChange,{from:this.audioTrack,to:e}),this.audioTrack!==e&&(this.localMediaStream?.addTrack(e),this.localTractChange(this.audioTrack,e)),this.audioTrack=e}renderLocalStreamToContainer(e){F(this.localMediaStream,e)}async getAllInputResource(){let e=await navigator.mediaDevices.enumerateDevices();return{audio:e.filter(t=>t.kind==="audioinput"),video:e.filter(t=>t.kind==="videoinput")}}async useDefaultDevice(e){let t={audio:!0,video:!0},s=await navigator.mediaDevices.getUserMedia(t);this.setAudioTrack(s.getAudioTracks()[0]),this.setVideoTrack(s.getVideoTracks()[0]),this.renderLocalStreamToContainer(e)}async useAudio(e){let t=e===void 0?{audio:{...this.audioConstrants},video:!1}:{video:!1,audio:{deviceId:e,...this.audioConstrants}},s=await navigator.mediaDevices.getUserMedia(t);return this.setAudioTrack(s.getAudioTracks()[0]),s.getAudioTracks()[0]}async useDeviceVideo(e){let t=e===void 0?{audio:!1,video:{...this.videoConstrains}}:{audio:!1,video:{deviceId:e,...this.videoConstrains}},s=await navigator.mediaDevices.getUserMedia(t);return this.setVideoTrack(s.getVideoTracks()[0]),s.getVideoTracks()[0]}async useDeskTopVideo(){let e=await navigator.mediaDevices.getDisplayMedia({video:{...this.videoConstrains},audio:!1});return this.setVideoTrack(e.getVideoTracks()[0]),e.getVideoTracks()[0]}disableAudio(){this.audioTrack!==void 0&&this.audioTrack.enabled&&(g("local audio status change",this.audioTrack),this.audioTrack.enabled=!1,this.setAudioTrack(this.audioTrack))}enableAudio(){this.audioTrack!==void 0&&!this.audioTrack.enabled&&(g("local audio status change",this.audioTrack),this.audioTrack.enabled=!0,this.setAudioTrack(this.audioTrack))}disableVideo(){this.videoTrack!==void 0&&this.videoTrack.enabled&&(g("local video status change",this.videoTrack),this.videoTrack.enabled=!1,this.setVideoTrack(this.videoTrack))}enableVideo(){this.videoTrack!==void 0&&!this.videoTrack.enabled&&(g("local video status change",this.videoTrack),this.videoTrack.enabled=!0,this.setVideoTrack(this.videoTrack))}close(){this.releaseTrack(this.audioTrack),this.releaseTrack(this.videoTrack),this.audioTrack=void 0,this.videoTrack=void 0,this.localMediaStream=void 0}}class ke extends ge{constructor(){super(),this.videoCodecs=[],this.audioCodecs=[],this.audioReciveCodecs=[],this.preferCodec(),this.peerConnection=this.buildConnection()}buildConnection(){let e=new RTCPeerConnection({bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});return e.addEventListener("connectionstatechange",t=>g("connectionstatechange",t)),e.addEventListener("icecandidate",t=>{g("icecandidate",t),this.onIceCandidate(t)}),e.addEventListener("datachannel",t=>g("datachannel",t)),e.addEventListener("icecandidateerror",t=>g("icecandidateerror",t)),e.addEventListener("iceconnectionstatechange",t=>g("iceconnectionstatechange",t)),e.addEventListener("icegatheringstatechange",t=>g("icegatheringstatechange",t)),e.addEventListener("negotiationneeded",t=>g("negotiationneeded",t)),e.addEventListener("signalingstatechange",t=>g("signalingstatechange",t)),e.addEventListener("track",t=>this.reciveTrack(t)),e}async localTractChange(e,t){if(this.remoteStream!==void 0&&this.peerConnection!==void 0)if(t!==void 0){let s=this.peerConnection.getSenders().find(n=>n.track?.kind===t.kind);s!==void 0&&s.replaceTrack(t)}else{let s=this.peerConnection.getSenders().find(n=>n.track?.kind===e?.kind);s!==void 0&&this.peerConnection.removeTrack(s)}t!==void 0&&(t.onended=s=>g("local track end",s),t.onmute=s=>{g("local mute",s),this.emitLocalStreamChange()},t.onunmute=s=>{g("local unmute",s),this.emitLocalStreamChange()}),this.releaseTrack(e),this.emitLocalStreamChange()}isInMeeting(){return this.remoteStream!==void 0}hasRemoteVideo(e){return e?.getVideoTracks().some(t=>t.muted===!1&&t.readyState==="live")??!1}emitLocalStreamChange(){this.emit(w.localStreamChange,{audioOnly:!this.hasRemoteVideo(this.localMediaStream),stream:this.localMediaStream})}emitRemoteStreamChange(){this.emit(w.stream,{audioOnly:!this.hasRemoteVideo(this.remoteStream),stream:this.remoteStream})}trigerStreamChange(e=100){this.emitStreamTimeout!==void 0&&clearTimeout(this.emitStreamTimeout),this.emitStreamTimeout=setTimeout(()=>{this.emitRemoteStreamChange(),this.emitStreamTimeout=void 0},e)}reciveTrack(e){g("recive track",e),this.remoteStream===void 0&&(this.remoteStream=new MediaStream),e.track.addEventListener("ended",()=>this.trigerStreamChange()),e.track.addEventListener("mute",()=>this.trigerStreamChange(3e3)),e.track.addEventListener("unmute",()=>this.trigerStreamChange(10)),this.remoteStream.addTrack(e.track),this.trigerStreamChange()}preferCodec(e="H264",t="PCMA"){this.videoCodecs=[];let s=RTCRtpSender.getCapabilities("video");s!==null&&this.videoCodecs.push(...s.codecs.filter(h=>h.mimeType===`video/${e}`));let n=RTCRtpReceiver.getCapabilities("video");n!==null&&this.videoCodecs.push(...n.codecs.filter(h=>h.mimeType===`video/${e}`)),this.audioCodecs=[];let r=RTCRtpSender.getCapabilities("audio");r!==null&&this.audioCodecs.push(...r.codecs.filter(h=>h.mimeType===`audio/${t}`));let d=RTCRtpReceiver.getCapabilities("audio");d!==null&&this.audioCodecs.push(...d.codecs.filter(h=>h.mimeType===`audio/${t}`))}trackIsInPeerConnection(e){return this.peerConnection?.getSenders().some(t=>t.track?.id===e.id)??!1}updateTracks(){if(this.peerConnection===void 0||this.peerConnection.signalingState==="closed")throw new Error("session is closed !");if(this.audioTrack===void 0&&this.videoTrack===void 0){this.peerConnection.addTransceiver("audio",{direction:"recvonly"}),this.peerConnection.addTransceiver("video",{direction:"recvonly"});return}if(this.audioTrack!==void 0&&!this.trackIsInPeerConnection(this.audioTrack))try{this.peerConnection.addTrack(this.audioTrack)}catch{}if(this.videoTrack!==void 0&&!this.trackIsInPeerConnection(this.videoTrack))try{this.peerConnection.addTrack(this.videoTrack)}catch{}try{this.peerConnection.getTransceivers().forEach(e=>{e.sender.track!==null&&(e.sender.track.kind==="video"?e.setCodecPreferences([...this.videoCodecs]):e.sender.track.kind==="audio"&&e.setCodecPreferences([...this.audioCodecs]))})}catch(e){fe("preferCodec error",e,this.audioCodecs,this.videoCodecs)}}async createOffer(){if(this.peerConnection===void 0)throw new Error("session is closed !");this.updateTracks();let e=await this.peerConnection.createOffer();return await this.peerConnection.setLocalDescription(e),e}async setOffer(e){if(this.peerConnection===void 0)throw new Error("session is closed !");this.updateTracks(),await this.peerConnection.setRemoteDescription({type:"offer",sdp:e})}async createAnswer(){if(this.peerConnection===void 0)throw new Error("session is closed !");this.updateTracks();let e=await this.peerConnection.createAnswer();return this.peerConnection.setLocalDescription(e),e}async setAnswer(e){if(this.peerConnection===void 0)throw new Error("session is closed !");await this.peerConnection.setRemoteDescription({type:"answer",sdp:e})}setRemoteIce(e){if(this.peerConnection===void 0)throw new Error("session is closed !");let t=new RTCIceCandidate(e);this.peerConnection.addIceCandidate(t)}closeConnection(e){e.close(),e.ontrack=null,e.onicecandidate=null,e.oniceconnectionstatechange=null,e.onsignalingstatechange=null,e.onicegatheringstatechange=null,e.onnegotiationneeded=null,e.onicecandidateerror=null,e.ondatachannel=null,e.onconnectionstatechange=null}close(){super.close(),this.peerConnection!==void 0&&(this.closeConnection(this.peerConnection),this.peerConnection=void 0),this.remoteStream!==void 0&&Y(this.remoteStream)}}var M=(i=>(i[i.timeout=408]="timeout",i[i.reject=488]="reject",i[i.busy=486]="busy",i[i.notfound=404]="notfound",i[i.notAllowedMedia=415]="notAllowedMedia",i[i.ok=200]="ok",i))(M||{});class z extends ke{constructor(e,t,s){super(),this.sessionId=t,this.rtcClient=e,this.remoteNumber=s}reciveIceRequest({ice:e}){this.setRemoteIce(JSON.parse(e))}getRemoteNumber(){return this.remoteNumber}onIceCandidate(e){}destroy(e=!0){this.removeAllListeners(),this.rtcClient!==void 0&&(this.remoteNumber!==void 0&&(e&&this.rtcClient.sendBye(this.remoteNumber,this.sessionId),this.remoteNumber=void 0),this.rtcClient.removeSession(this)),this.rtcClient=void 0,super.close()}rejectCall(){let[e,t,s]=this.checkIsNotUndefined(this.rtcClient,this.remoteNumber,this.inviteSeq);e.answer(M.reject,s,t,this.sessionId),this.destroy()}async acceptCall(){if(this.inviteOffer!==void 0){await this.setOffer(this.inviteOffer);let[e,t,s]=this.checkIsNotUndefined(this.rtcClient,this.remoteNumber,this.inviteSeq),{sdp:n}=await this.createAnswer();e.answer(M.ok,s,t,this.sessionId,n)}}async pickNewConnection(){this.peerConnection!==void 0&&this.closeConnection(this.peerConnection),this.peerConnection=this.buildConnection(),this.remoteStream!==void 0&&(Y(this.remoteStream),this.remoteStream=void 0,this.acceptCall())}checkIsNotUndefined(...e){for(const t of e)if(t===void 0)throw new Error("someone is undefined");return e}async sendDtmf(e){this.rtcClient?.sendDtmf(this.remoteNumber,this.sessionId,e)}playRemoteStream(e,t){const{audioOnly:s=!1}=t||{};this.on(w.stream,n=>{if(n.stream){const r=s?new MediaStream(n.stream.getAudioTracks()):n.stream;F(r,e)}}),this.on(w.bye,()=>{e&&q(e)})}}var T=(i=>(i.audio="audio",i.video="video",i.audioVideo="audioVideo",i.unknown="unknown",i))(T||{});class $ extends z{constructor(){super(...arguments),this.responseCallType=T.unknown}async start(){let[e,t]=this.checkIsNotUndefined(this.rtcClient,this.remoteNumber),s=await this.createOffer(),{status:n,sdp:r}=await e.invite(t,this.sessionId,s.sdp);if(n===M.ok){await this.setAnswer(r);const d=r.split(`\r
|
|
2
2
|
`),h=d.find(E=>E.startsWith("m=audio")),C=d.find(E=>E.startsWith("m=video"));this.responseCallType=h&&C?T.audioVideo:h?T.audio:C?T.video:T.unknown}return n}addRemote(e){this.remoteNumber=e}}const D=class D{constructor(e,t,s,n){this.req=e,this.seq=0,this.from=t,this.to=s,this.registerid=`${D.random}@${t}`,n!==void 0&&Object.assign(this,n)}};D.random=String(Date.now());let L=D;var I=(i=>(i.connected="connected",i.disconnected="disconnected",i.message="message",i))(I||{});const X=`(function(){"use strict";let e,n=!1;const o=self,a={},r={timeout:5*1e3,timeoutObj:null,reset(){return clearInterval(this.timeoutObj),this},sendOnline(){e.readyState===1&&e.send(JSON.stringify(Object.assign(a,{seq:++a.seq})))},start(){this.timeout!==0&&(this.timeoutObj=setInterval(()=>{this.sendOnline()},this.timeout))}};self.addEventListener("message",function(s){const t=s.data;switch(t.cmd){case"config":Object.assign(a,t.heartBeat),r.timeout=t.heartTime*1e3;break;case"start":self.postMessage({type:"webWorker",data:"启动webWorker"}),i(t.url);break;case"close":n=!0,e.close(),self.postMessage({type:"webWorker",data:"停止webWorker"}),self.postMessage({type:"close",data:"close"+new Date().toTimeString()}),self.close();break;case"msg":e.readyState===1&&e.send(JSON.stringify(t.data))}},!1);const i=function(s){e||(e=new WebSocket(s),e.onerror=function(t){c(s)},e.onclose=function(t){c(s)},e.onopen=t=>{o.postMessage({type:"open",data:"start"+new Date().toTimeString()}),r.reset().start()},e.onmessage=t=>{const l=JSON.parse(t.data);o.postMessage({type:"webSocket",data:l})})};function c(s){n||(n=!0,setTimeout(function(){e=null,i(s),n=!1},2e3))}})();
|
|
3
3
|
`,Z=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",X],{type:"text/javascript;charset=utf-8"});function Ce(i){let e;try{if(e=Z&&(self.URL||self.webkitURL).createObjectURL(Z),!e)throw"";const t=new Worker(e,{name:i?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(X),{name:i?.name})}}class we extends K.EventEmitter{constructor(e,t,s){super(),this.server=e,this.ws=new Ce,this.configHeartBeat(t,s)}connect(){this.initWebsocket(),this.ws.onmessage=e=>{const{type:t,data:s}=e.data;switch(t){case"webSocket":g("websocket recive message ",s),this.emit(I.message,s);return;case"open":g("websocket connected ",this.server),this.emit(I.connected);return}}}configHeartBeat(e,t){g("websocket heartBeat",e),g("websocket heartTime",t),this.ws.postMessage({cmd:"config",heartBeat:e,heartTime:t})}initWebsocket(){this.ws.postMessage({cmd:"start",url:this.server})}send(e){this.ws.postMessage({cmd:"msg",data:e})}close(){this.ws.postMessage({cmd:"close"})}sendMessage(e){g("websocket send message ",e),e!==void 0&&this.ws!==void 0&&this.ws.postMessage({cmd:"msg",data:e})}}class Ee extends K.EventEmitter{constructor(e,t,s,n){super(),this.activeServer="",this.server=e,this.localNumber=t,this.expireTime=s,this.heartTime=n,super.setMaxListeners(0)}async testWs(e){return e.reduce((t,s)=>t.then(n=>Promise.resolve(n),n=>new Promise((r,d)=>{const h=new WebSocket(s);h.onopen=()=>{n.push(s),h.close(),r(n)},h.onclose=()=>{d(n)}})),Promise.reject([])).then(t=>Promise.resolve(t),t=>Promise.resolve(t))}async reConnect(){this.destroy();let e=[];this.server!==void 0&&(typeof this.server=="string"?e=[this.server]:e=this.server);const t=await this.testWs(e);return new Promise((s,n)=>{if(t.length>0){this.activeServer=t[0];let r=new we(this.activeServer,new L(b.MESSAGE_TYPE_REGISTER,this.localNumber,this.localNumber,{expire:this.expireTime}),this.heartTime);r.on(I.connected,()=>{this.socketWorker=r,this.onConnected(),s()}),r.on(I.disconnected,d=>{this.socketWorker=void 0,this.onDisConnected(d),n("socketWorker connecion failed")}),r.on(I.message,d=>this.onReviceMessage(d)),r.connect()}else n("server is empty")})}sendMessage(e){if(this.socketWorker!==void 0)this.socketWorker.sendMessage(e);else throw new Error("socketWorker is closed")}destroy(){this.socketWorker!==void 0&&(this.unRegister(),this.socketWorker.close(),this.socketWorker=void 0)}}class Te extends Ee{constructor(){super(...arguments),this.asyncProducer=new Map}async sendRespondableMessage(e){return this.sendMessage(e),new Promise(t=>this.asyncProducer.set(e.seq,t))}getAsyncResolve(e){let t=this.asyncProducer.get(e);return t!==void 0&&this.asyncProducer.delete(e),t}onDisConnected(e){this.asyncProducer.clear(),this.emit(P.disconnected,e)}onReviceMessage(e){let{status:t,seq:s}=e;t!==void 0?this.getAsyncResolve(s)?.call(void 0,e):this.processMessage(e)}}class be extends Te{async register(){let e=new L(b.MESSAGE_TYPE_REGISTER,this.localNumber,this.localNumber,{expire:this.expireTime});return this.sendRespondableMessage(e)}unRegister(){let e=new L(b.MESSAGE_TYPE_REGISTER,this.localNumber,this.localNumber,{expire:0});this.sendMessage(e)}async invite(e,t,s){return this.sendRespondableMessage(new L(b.MESSAGE_TYPE_INVITE,this.localNumber,e,{cid:t,sdp:s}))}sendIce(e,t,s){}sendBye(e,t){return this.sendMessage(new L(b.MESSAGE_TYPE_BYE,this.localNumber,e,{cid:t}))}answer(e,t,s,n,r){this.sendMessage({status:e,seq:t,from:s,to:this.localNumber,cid:n,sdp:r})}sendPttMessage(e){this.sendMessage(e)}async sendDtmf(e,t,s){return this.sendMessage(new L(b.MESSAGE_TYPE_INFO,this.localNumber,e,{cid:t,info:{msg:"dtmf",dtmf:s}}))}}var ye;function _(){}_.prototype=Object.create(null);function m(){m.init.call(this)}m.EventEmitter=m,m.usingDomains=!1,m.prototype.domain=void 0,m.prototype._events=void 0,m.prototype._maxListeners=void 0,m.defaultMaxListeners=10,m.init=function(){this.domain=null,m.usingDomains&&ye.active,(!this._events||this._events===Object.getPrototypeOf(this)._events)&&(this._events=new _,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},m.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this};function ee(i){return i._maxListeners===void 0?m.defaultMaxListeners:i._maxListeners}m.prototype.getMaxListeners=function(){return ee(this)};function Se(i,e,t){if(e)i.call(t);else for(var s=i.length,n=A(i,s),r=0;r<s;++r)n[r].call(t)}function Le(i,e,t,s){if(e)i.call(t,s);else for(var n=i.length,r=A(i,n),d=0;d<n;++d)r[d].call(t,s)}function _e(i,e,t,s,n){if(e)i.call(t,s,n);else for(var r=i.length,d=A(i,r),h=0;h<r;++h)d[h].call(t,s,n)}function Re(i,e,t,s,n,r){if(e)i.call(t,s,n,r);else for(var d=i.length,h=A(i,d),C=0;C<d;++C)h[C].call(t,s,n,r)}function Me(i,e,t,s){if(e)i.apply(t,s);else for(var n=i.length,r=A(i,n),d=0;d<n;++d)r[d].apply(t,s)}m.prototype.emit=function(e){var t,s,n,r,d,h,C,E=e==="error";if(h=this._events,h)E=E&&h.error==null;else if(!E)return!1;if(C=this.domain,E){if(t=arguments[1],C)t||(t=new Error('Uncaught, unspecified "error" event')),t.domainEmitter=this,t.domain=C,t.domainThrown=!1,C.emit("error",t);else{if(t instanceof Error)throw t;var j=new Error('Uncaught, unspecified "error" event. ('+t+")");throw j.context=t,j}return!1}if(s=h[e],!s)return!1;var R=typeof s=="function";switch(n=arguments.length,n){case 1:Se(s,R,this);break;case 2:Le(s,R,this,arguments[1]);break;case 3:_e(s,R,this,arguments[1],arguments[2]);break;case 4:Re(s,R,this,arguments[1],arguments[2],arguments[3]);break;default:for(r=new Array(n-1),d=1;d<n;d++)r[d-1]=arguments[d];Me(s,R,this,r)}return!0};function te(i,e,t,s){var n,r,d;if(typeof t!="function")throw new TypeError('"listener" argument must be a function');if(r=i._events,r?(r.newListener&&(i.emit("newListener",e,t.listener?t.listener:t),r=i._events),d=r[e]):(r=i._events=new _,i._eventsCount=0),!d)d=r[e]=t,++i._eventsCount;else if(typeof d=="function"?d=r[e]=s?[t,d]:[d,t]:s?d.unshift(t):d.push(t),!d.warned&&(n=ee(i),n&&n>0&&d.length>n)){d.warned=!0;var h=new Error("Possible EventEmitter memory leak detected. "+d.length+" "+e+" listeners added. Use emitter.setMaxListeners() to increase limit");h.name="MaxListenersExceededWarning",h.emitter=i,h.type=e,h.count=d.length,Ie(h)}return i}function Ie(i){typeof console.warn=="function"?console.warn(i):console.log(i)}m.prototype.addListener=function(e,t){return te(this,e,t,!1)},m.prototype.on=m.prototype.addListener,m.prototype.prependListener=function(e,t){return te(this,e,t,!0)};function ie(i,e,t){var s=!1;function n(){i.removeListener(e,n),s||(s=!0,t.apply(i,arguments))}return n.listener=t,n}m.prototype.once=function(e,t){if(typeof t!="function")throw new TypeError('"listener" argument must be a function');return this.on(e,ie(this,e,t)),this},m.prototype.prependOnceListener=function(e,t){if(typeof t!="function")throw new TypeError('"listener" argument must be a function');return this.prependListener(e,ie(this,e,t)),this},m.prototype.removeListener=function(e,t){var s,n,r,d,h;if(typeof t!="function")throw new TypeError('"listener" argument must be a function');if(n=this._events,!n)return this;if(s=n[e],!s)return this;if(s===t||s.listener&&s.listener===t)--this._eventsCount===0?this._events=new _:(delete n[e],n.removeListener&&this.emit("removeListener",e,s.listener||t));else if(typeof s!="function"){for(r=-1,d=s.length;d-- >0;)if(s[d]===t||s[d].listener&&s[d].listener===t){h=s[d].listener,r=d;break}if(r<0)return this;if(s.length===1){if(s[0]=void 0,--this._eventsCount===0)return this._events=new _,this;delete n[e]}else Ne(s,r);n.removeListener&&this.emit("removeListener",e,h||t)}return this},m.prototype.off=function(i,e){return this.removeListener(i,e)},m.prototype.removeAllListeners=function(e){var t,s;if(s=this._events,!s)return this;if(!s.removeListener)return arguments.length===0?(this._events=new _,this._eventsCount=0):s[e]&&(--this._eventsCount===0?this._events=new _:delete s[e]),this;if(arguments.length===0){for(var n=Object.keys(s),r=0,d;r<n.length;++r)d=n[r],d!=="removeListener"&&this.removeAllListeners(d);return this.removeAllListeners("removeListener"),this._events=new _,this._eventsCount=0,this}if(t=s[e],typeof t=="function")this.removeListener(e,t);else if(t)do this.removeListener(e,t[t.length-1]);while(t[0]);return this},m.prototype.listeners=function(e){var t,s,n=this._events;return n?(t=n[e],t?typeof t=="function"?s=[t.listener||t]:s=Ae(t):s=[]):s=[],s},m.listenerCount=function(i,e){return typeof i.listenerCount=="function"?i.listenerCount(e):se.call(i,e)},m.prototype.listenerCount=se;function se(i){var e=this._events;if(e){var t=e[i];if(typeof t=="function")return 1;if(t)return t.length}return 0}m.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};function Ne(i,e){for(var t=e,s=t+1,n=i.length;s<n;t+=1,s+=1)i[t]=i[s];i.pop()}function A(i,e){for(var t=new Array(e);e--;)t[e]=i[e];return t}function Ae(i){for(var e=new Array(i.length),t=0;t<e.length;++t)e[t]=i[t].listener||i[t];return e}const k={ERROR:"error",SPEAKER:"speaker",TALKING:"talking",ACTIVE_GROUP:"activeGroup",JOIN_INFO:"joinInfo",DISCONNECTED:"disConnected"},ne={400:"消息不符规范",401:"验证不通过",403:"无权利操作",404:"不存在该用户",415:"错误参数",405:"无法操作",424:"不存在XD群",425:"管理员没有",426:"已存在管理员",427:"以前被拒绝过,或者删除过",428:"超出所配置的下属管理员的数量",429:"群内无用户",430:"管理员的索引号冲突",431:"还有子管理员存在"},N={connected:"connected",disconnected:"disconnected",message:"message"},y=(i,...e)=>{console.log(`%c usc-ptt-devtools %c ${i} %c `,"background:#16aae0 ; padding: 1px; border-radius: 3px 0 0 3px; color: #fff","background:#14e04e ; padding: 1px; border-radius: 0 3px 3px 0; color: #fff","background:transparent",...e)},re=(i,...e)=>{console.log(`%c usc-ptt-devtools %c ${i} %c `,"background:#16aae0 ; padding: 1px; border-radius: 3px 0 0 3px; color: #fff","background:#e02514 ; padding: 1px; border-radius: 0 3px 3px 0; color: #fff","background:transparent",...e)};class Oe extends m{server="";ws=null;constructor(e){super(),this.server=e}connect(){this.ws=new WebSocket(this.server),this.ws.onopen=()=>{y("websocket connected ",this.server),this.emit(N.connected)},this.ws.onclose=()=>{y("websocket disconnected ",this.server),this.ws=void 0,this.emit(N.disconnected)},this.ws.onmessage=({data:e})=>{let t=JSON.parse(e);y("websocket recive message ",t),this.emit(N.message,t)}}close(){this.ws!==void 0&&(this.ws.close(),this.ws=void 0)}sendMessage(e){y("websocket send message ",e),e!==void 0&&this.ws!==void 0&&this.ws.readyState===1&&this.ws.send(JSON.stringify(e))}}class Pe extends m{socket=void 0;timer=void 0;waitinggroup=void 0;speaker="";activeGroup="";talking=!1;constructor(e,t=20,s=!0){if(super(),!e)return re("服务器地址为空!");this.server=e,this.heartTime=t,this.autoReconnect=s}async initClient(){return this.destorySocket(),new Promise((e,t)=>{if(this.server!==void 0){let s=new Oe(this.server);s.on(N.connected,()=>{this.socket=s,this.timer=setInterval(()=>{this.sendMessage({req:0})},this.heartTime*1e3),e()}),s.on(N.disconnected,()=>{this.socket=void 0,this.autoReconnect?setTimeout(()=>{this.initClient()},3e3):this.emit(k.DISCONNECTED),t("socket connecion failed")}),s.on(N.message,n=>this.onReviceMessage(n)),s.connect()}else t("server is empty")})}onReviceMessage(e){y(e);const{info:t,msg:s,res:n}=e;if(t===10&&(this.speaker=`${s.speaker}`,y(`${this.speaker}正在说话`),this.emit(k.SPEAKER,this.speaker)),t===11&&(n.code===200?(this.activeGroup=this.waitinggroup,y(`加入组${this.activeGroup}`)):(this.activeGroup="",re(ne[n.code]),this.emit(k.ERROR,ne[n.code])),this.emit(k.ACTIVE_GROUP,this.activeGroup)),t===13&&(n.code===200?this.talking=!0:this.talking=!1,y(`talking:${this.talking}`),this.emit(k.TALKING,this.talking)),t===14&&(this.speaker="",y(`${this.speaker}停止说话`),this.emit(k.SPEAKER,this.speaker)),t===15){const r={user:s.number,group:s.g_num,code:s.status};y(`${r}进入组`),this.emit(k.JOIN_INFO,r)}}joinGroup(e,t,s,n){this.socket&&(this.waitinggroup=e,this.sendMessage({req:1,group:e,user:t,ptts:s,port:n}))}quitGroup(){this.socket&&(this.activeGroup="",this.emit(k.ACTIVE_GROUP,this.activeGroup),this.sendMessage({req:2}))}talk(){this.socket&&this.sendMessage({req:3})}stop(){this.talking=!1,y(`talking:${this.talking}`),this.emit(k.TALKING,this.talking),this.socket&&this.sendMessage({req:4})}sendMessage(e){if(this.socket!==void 0)this.socket.sendMessage(e);else throw new Error("socket is closed")}destorySocket(){this.socket!==void 0&&(this.socket.close(),this.socket=void 0)}destory(){this.destorySocket()}}const xe=async(i,e=20,t=!0)=>{let s=new Pe(i,e,t);return await s.initClient(),s},W=class W extends be{constructor(e){let t=e.expireTime||W.defaultExpireTime;super(e.server,e.localNumber,t,e.heartTime||(e.localNumber?5:0)),this.enablePtt=e.enablePtt,this.pttServer=e.pttServer}async initPttClient(){if(this.enablePtt)if(this.pttServer){const e=await xe(this.pttServer);if(!e)return Promise.reject("ptt客户端初始化失败!");e.on(k.ACTIVE_GROUP,t=>{this.emit(k.ACTIVE_GROUP,t)}),e.on(k.SPEAKER,t=>{this.emit(k.SPEAKER,t)}),e.on(k.TALKING,t=>{this.emit(k.TALKING,t)}),e.on(k.JOIN_INFO,t=>{this.emit(k.JOIN_INFO,t)}),e.on(k.DISCONNECTED,t=>{this.emit(k.DISCONNECTED,t)}),this.pttClient=e}else return Promise.reject("pttServer不存在")}joinGroup(e,t,s,n){this.pttClient?.joinGroup(e,t,s,n)}quitGroup(){this.pttClient?.quitGroup()}talk(){this.pttClient?.talk()}stop(){this.pttClient?.stop()}onConnected(){}onDisConnected(){super.onDisConnected()}};W.defaultExpireTime=60;let B=W;class oe extends z{constructor(e,t,s,n,r){super(e,t,s),this.callType=T.unknown,this.inviteSeq=r,this.inviteOffer=n;const d=n.split(`\r
|
|
4
4
|
`),h=d.find(E=>E.startsWith("m=audio")),C=d.find(E=>E.startsWith("m=video"));this.callType=h&&C?T.audioVideo:h?T.audio:C?T.video:T.unknown}}const ae={404:"不存在该用户或者设备(VPA)",407:"太多人观看同一设备(VPA)",426:"同一时间播放太多文件(MSU)",427:"MTC不支持主码流请求(MTC)",500:"SIP建立时间超时(VPA)",501:"CMU反应超时(VPA, MTC)",502:"连接视频源超时",503:"播放失败",504:"播放超时(VPA)",505:"TCP连接断开(VPA, MTC, MGW)",506:"视频源没有连接进入(VDO)",507:"发送消息到视频失败(VDO)",508:"TCP连接失败",509:"TCP无流超时(5s无流, VPA)",510:"摄像头主动停止(VDO)",511:"播放端无Play进入, 超时(VDO)",512:"无人观看,主动释放",513:"呼叫还没有建立(MGW)",514:"呼叫已经释放了(MGW)",515:"操作员断开摄像头(MGW)",516:"查询CMU失败(VPA, MTC, MGW)",517:"视频源返回建立连接错误",518:"播放后无流进入(VPA)",519:"会议输出操作失败",520:"会议停止输出操作失败",521:"会议腿断开连接操作失败",522:"会议腿连接操作失败",523:"文件节点创建失败",524:"MCU侧资源已经占用",525:"MCU创建会议失败",526:"播放文件连接失败",527:"分配文件ID超时",528:"单元连接没有建立",529:"发送内部消息失败",530:"UDP流中断",531:"文件不存在",600:"MGW系统忙",601:"MGW分配Pair失败",602:"MGW重启",603:"CONF分配失败",604:"功能还没有实现",702:"分配资源超时(MGW)",703:"连接资源超时(MGW)",800:"已经在播放中",801:"发送INVITE失败(GBS)",802:"呼叫不存在(MGW)",803:"摄像头离线(HKVS, DHVS)",804:"摄像头不存在",805:"参数缺少或者不对(GBS)",806:"调用SDK VideoStart失败(HKVS, DHVS)",807:"不支持的功能",808:"创建文件失败",809:"云台控制失败",810:"对端释放呼叫(GBS)",811:"呼叫建立超时(GBS)",812:"用户没有输入会议接入号",813:"管理员踢出",814:"管理员结束",815:"管理员移出",816:"管理员结束呼叫",817:"RTMP链接地址错误",818:"RTMP连接设备失败",900:"计划到时释放"};class H extends B{constructor(){super(...arguments),this.allSession=[]}createSession(e){let t=new $(this,J(),e);return this.allSession.push(t),t}playRemote(e,t,s){let n=new $(this,J(),e);return this.allSession.push(n),n.playRemoteStream(t,s),n.start(),n.on(w.bye,r=>{r.errorno in ae&&(r.message=ae[r.errorno]),this.removeSession(n),s?.onerror&&s.onerror(r)}),n}processMessage(e){let{req:t}=e;if(t===b.MESSAGE_TYPE_INVITE){let s=new oe(this,e.cid,e.from,e.sdp,e.seq);this.allSession.push(s),this.emit(P.invite,s)}else if(t===b.MESSAGE_TYPE_REINVITE){let s=this.allSession.find(n=>n.sessionId==e.cid);s!==void 0&&(s.inviteSeq=e.seq,s.inviteOffer=e.sdp,s.acceptCall(),s.emit(w.reInvite,s))}else if(t===b.MESSAGE_TYPE_ICE)this.allSession.find(s=>s.sessionId===e.cid)?.reciveIceRequest(e);else if(t===b.MESSAGE_TYPE_BYE){let s=this.allSession.find(n=>n.sessionId===e.cid);s!==void 0&&(s.emit(w.bye,e),s.destroy(!1))}t==U.FPRE&&this.emit(x.FPREInfo,e),t==U.IMS&&this.emit(x.IMSInfo,e)}destroy(){this.allSession!==void 0&&this.allSession.forEach(e=>{e.destroy()}),super.destroy()}removeSession(e){this.allSession!==void 0&&(this.allSession=this.allSession.filter(t=>t.sessionId!==e.sessionId))}onDisConnected(){super.onDisConnected(),this.destroy()}}const Ge=async i=>{let e=new H(i);await e.reConnect(),await e.initPttClient().catch(s=>{console.error(s)}),L.random=String(Date.now());let t=await e.register();return t.status===M.ok?e:(e.destroy(),Promise.reject(t))},Ve=async(i,e,t,s)=>{L.random=String(Date.now());let n=new H({server:i,localNumber:"anonymous",...s});await n.reConnect();const r=n.playRemote(e,t,s);return{destroy:()=>{q(t),r.destroy(),n.destroy()}}},De=async()=>{await navigator.mediaDevices.getUserMedia({audio:!0,video:!0})};p.PTTEvent=x,p.RtcCalledSession=oe,p.RtcCalledType=T,p.RtcClient=H,p.RtcClientEvent=P,p.RtcInviteStatus=M,p.RtcSession=$,p.RtcSessionEvent=w,p.authDevice=De,p.closeStreamAndTrack=Y,p.createRtcClient=Ge,p.disableLog=me,p.enableLog=ve,p.playRemote=Ve,p.releaseStreamFromContainer=q,p.renderStreamToContainer=F,Object.defineProperty(p,Symbol.toStringTag,{value:"Module"})}));
|