usc-rtc-client 2.3.0 → 3.0.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 +63 -73
- package/dist/index.umd.js +3 -5
- package/package.json +1 -1
- package/dist/session/UscRtcProtocol.d.ts +0 -6
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 || {}),
|
|
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 || {}), T = /* @__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))(T || {}), 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"));
|
|
@@ -26,23 +26,13 @@ const p = (i, ...e) => {
|
|
|
26
26
|
"background:transparent",
|
|
27
27
|
...e
|
|
28
28
|
);
|
|
29
|
-
},
|
|
29
|
+
}, De = () => {
|
|
30
30
|
V = !1;
|
|
31
|
-
},
|
|
31
|
+
}, We = () => {
|
|
32
32
|
V = !0;
|
|
33
33
|
};
|
|
34
|
-
class ge {
|
|
35
|
-
static formatOffer(e) {
|
|
36
|
-
let { sdp: t } = e;
|
|
37
|
-
if (t === void 0)
|
|
38
|
-
throw new Error("offer sdp is empty");
|
|
39
|
-
return t = t.split(`\r
|
|
40
|
-
`).filter((s) => s.indexOf("a=group:BUNDLE") === -1).join(`\r
|
|
41
|
-
`), e.sdp = t, e;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
34
|
var P = { exports: {} }, J;
|
|
45
|
-
function
|
|
35
|
+
function ge() {
|
|
46
36
|
if (J) return P.exports;
|
|
47
37
|
J = 1;
|
|
48
38
|
var i = typeof Reflect == "object" ? Reflect : null, e = i && typeof i.apply == "function" ? i.apply : function(o, c, u) {
|
|
@@ -134,12 +124,12 @@ function ke() {
|
|
|
134
124
|
}, r.prototype.on = r.prototype.addListener, r.prototype.prependListener = function(o, c) {
|
|
135
125
|
return C(this, o, c, !0);
|
|
136
126
|
};
|
|
137
|
-
function
|
|
127
|
+
function O() {
|
|
138
128
|
if (!this.fired)
|
|
139
129
|
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);
|
|
140
130
|
}
|
|
141
131
|
function L(a, o, c) {
|
|
142
|
-
var u = { fired: !1, wrapFn: void 0, target: a, type: o, listener: c }, l =
|
|
132
|
+
var u = { fired: !1, wrapFn: void 0, target: a, type: o, listener: c }, l = O.bind(u);
|
|
143
133
|
return l.listener = c, u.wrapFn = l, l;
|
|
144
134
|
}
|
|
145
135
|
r.prototype.once = function(o, c) {
|
|
@@ -253,8 +243,8 @@ function ke() {
|
|
|
253
243
|
}
|
|
254
244
|
return P.exports;
|
|
255
245
|
}
|
|
256
|
-
var q =
|
|
257
|
-
class
|
|
246
|
+
var q = ge();
|
|
247
|
+
class ke extends q.EventEmitter {
|
|
258
248
|
constructor() {
|
|
259
249
|
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);
|
|
260
250
|
}
|
|
@@ -356,7 +346,7 @@ class Ce extends q.EventEmitter {
|
|
|
356
346
|
this.releaseTrack(this.audioTrack), this.releaseTrack(this.videoTrack), this.audioTrack = void 0, this.videoTrack = void 0, this.localMediaStream = void 0;
|
|
357
347
|
}
|
|
358
348
|
}
|
|
359
|
-
class
|
|
349
|
+
class Ce extends ke {
|
|
360
350
|
constructor() {
|
|
361
351
|
super(), this.videoCodecs = [], this.audioCodecs = [], this.audioReciveCodecs = [], this.preferCodec(), this.peerConnection = this.buildConnection();
|
|
362
352
|
}
|
|
@@ -475,7 +465,7 @@ class we extends Ce {
|
|
|
475
465
|
throw new Error("session is closed !");
|
|
476
466
|
this.updateTracks();
|
|
477
467
|
let e = await this.peerConnection.createOffer();
|
|
478
|
-
return
|
|
468
|
+
return await this.peerConnection.setLocalDescription(e), e;
|
|
479
469
|
}
|
|
480
470
|
/**
|
|
481
471
|
* set offer
|
|
@@ -527,7 +517,7 @@ class we extends Ce {
|
|
|
527
517
|
}
|
|
528
518
|
}
|
|
529
519
|
var N = /* @__PURE__ */ ((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))(N || {});
|
|
530
|
-
class ne extends
|
|
520
|
+
class ne extends Ce {
|
|
531
521
|
constructor(e, t, s) {
|
|
532
522
|
super(), this.sessionId = t, this.rtcClient = e, this.remoteNumber = s;
|
|
533
523
|
}
|
|
@@ -627,7 +617,7 @@ let y = x;
|
|
|
627
617
|
var M = /* @__PURE__ */ ((i) => (i.connected = "connected", i.disconnected = "disconnected", i.message = "message", i))(M || {});
|
|
628
618
|
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))}})();
|
|
629
619
|
`, z = typeof self < "u" && self.Blob && new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);", re], { type: "text/javascript;charset=utf-8" });
|
|
630
|
-
function
|
|
620
|
+
function we(i) {
|
|
631
621
|
let e;
|
|
632
622
|
try {
|
|
633
623
|
if (e = z && (self.URL || self.webkitURL).createObjectURL(z), !e) throw "";
|
|
@@ -646,9 +636,9 @@ function Ee(i) {
|
|
|
646
636
|
);
|
|
647
637
|
}
|
|
648
638
|
}
|
|
649
|
-
class
|
|
639
|
+
class Ee extends q.EventEmitter {
|
|
650
640
|
constructor(e, t, s) {
|
|
651
|
-
super(), this.server = e, this.ws = new
|
|
641
|
+
super(), this.server = e, this.ws = new we(), this.configHeartBeat(t, s);
|
|
652
642
|
}
|
|
653
643
|
/**
|
|
654
644
|
* connect to the websocket server
|
|
@@ -688,7 +678,7 @@ class Te extends q.EventEmitter {
|
|
|
688
678
|
p("websocket send message ", e), e !== void 0 && this.ws !== void 0 && this.ws.postMessage({ cmd: "msg", data: e });
|
|
689
679
|
}
|
|
690
680
|
}
|
|
691
|
-
class
|
|
681
|
+
class Te extends q.EventEmitter {
|
|
692
682
|
// constructor(server: string, localNumber: string, expireTime: number, heartTime: number) {
|
|
693
683
|
// super(server, localNumber, expireTime, heartTime)
|
|
694
684
|
// }
|
|
@@ -725,7 +715,7 @@ class be extends q.EventEmitter {
|
|
|
725
715
|
return new Promise((s, n) => {
|
|
726
716
|
if (t.length > 0) {
|
|
727
717
|
this.activeServer = t[0];
|
|
728
|
-
let r = new
|
|
718
|
+
let r = new Ee(
|
|
729
719
|
this.activeServer,
|
|
730
720
|
new y(T.MESSAGE_TYPE_REGISTER, this.localNumber, this.localNumber, { expire: this.expireTime }),
|
|
731
721
|
this.heartTime
|
|
@@ -753,7 +743,7 @@ class be extends q.EventEmitter {
|
|
|
753
743
|
this.socketWorker !== void 0 && (this.unRegister(), this.socketWorker.close(), this.socketWorker = void 0);
|
|
754
744
|
}
|
|
755
745
|
}
|
|
756
|
-
class
|
|
746
|
+
class be extends Te {
|
|
757
747
|
constructor() {
|
|
758
748
|
super(...arguments), this.asyncProducer = /* @__PURE__ */ new Map();
|
|
759
749
|
}
|
|
@@ -772,7 +762,7 @@ class ye extends be {
|
|
|
772
762
|
}
|
|
773
763
|
//连接断开
|
|
774
764
|
onDisConnected(e) {
|
|
775
|
-
this.asyncProducer.clear(), this.emit(
|
|
765
|
+
this.asyncProducer.clear(), this.emit(U.disconnected, e);
|
|
776
766
|
}
|
|
777
767
|
//invoke on message reviced
|
|
778
768
|
onReviceMessage(e) {
|
|
@@ -780,7 +770,7 @@ class ye extends be {
|
|
|
780
770
|
t !== void 0 ? this.getAsyncResolve(s)?.call(void 0, e) : this.processMessage(e);
|
|
781
771
|
}
|
|
782
772
|
}
|
|
783
|
-
class
|
|
773
|
+
class ye extends be {
|
|
784
774
|
/**
|
|
785
775
|
* send register message to the server
|
|
786
776
|
*/
|
|
@@ -845,7 +835,7 @@ class Se extends ye {
|
|
|
845
835
|
return this.sendMessage(new y(T.MESSAGE_TYPE_INFO, this.localNumber, e, { cid: t, info: { msg: "dtmf", dtmf: s } }));
|
|
846
836
|
}
|
|
847
837
|
}
|
|
848
|
-
var
|
|
838
|
+
var Se;
|
|
849
839
|
function _() {
|
|
850
840
|
}
|
|
851
841
|
_.prototype = /* @__PURE__ */ Object.create(null);
|
|
@@ -859,7 +849,7 @@ m.prototype._events = void 0;
|
|
|
859
849
|
m.prototype._maxListeners = void 0;
|
|
860
850
|
m.defaultMaxListeners = 10;
|
|
861
851
|
m.init = function() {
|
|
862
|
-
this.domain = null, m.usingDomains &&
|
|
852
|
+
this.domain = null, m.usingDomains && Se.active, (!this._events || this._events === Object.getPrototypeOf(this)._events) && (this._events = new _(), this._eventsCount = 0), this._maxListeners = this._maxListeners || void 0;
|
|
863
853
|
};
|
|
864
854
|
m.prototype.setMaxListeners = function(e) {
|
|
865
855
|
if (typeof e != "number" || e < 0 || isNaN(e))
|
|
@@ -872,39 +862,39 @@ function oe(i) {
|
|
|
872
862
|
m.prototype.getMaxListeners = function() {
|
|
873
863
|
return oe(this);
|
|
874
864
|
};
|
|
875
|
-
function
|
|
865
|
+
function Le(i, e, t) {
|
|
876
866
|
if (e)
|
|
877
867
|
i.call(t);
|
|
878
868
|
else
|
|
879
|
-
for (var s = i.length, n =
|
|
869
|
+
for (var s = i.length, n = A(i, s), r = 0; r < s; ++r)
|
|
880
870
|
n[r].call(t);
|
|
881
871
|
}
|
|
882
|
-
function
|
|
872
|
+
function _e(i, e, t, s) {
|
|
883
873
|
if (e)
|
|
884
874
|
i.call(t, s);
|
|
885
875
|
else
|
|
886
|
-
for (var n = i.length, r =
|
|
876
|
+
for (var n = i.length, r = A(i, n), d = 0; d < n; ++d)
|
|
887
877
|
r[d].call(t, s);
|
|
888
878
|
}
|
|
889
|
-
function
|
|
879
|
+
function Me(i, e, t, s, n) {
|
|
890
880
|
if (e)
|
|
891
881
|
i.call(t, s, n);
|
|
892
882
|
else
|
|
893
|
-
for (var r = i.length, d =
|
|
883
|
+
for (var r = i.length, d = A(i, r), h = 0; h < r; ++h)
|
|
894
884
|
d[h].call(t, s, n);
|
|
895
885
|
}
|
|
896
|
-
function
|
|
886
|
+
function Re(i, e, t, s, n, r) {
|
|
897
887
|
if (e)
|
|
898
888
|
i.call(t, s, n, r);
|
|
899
889
|
else
|
|
900
|
-
for (var d = i.length, h =
|
|
890
|
+
for (var d = i.length, h = A(i, d), k = 0; k < d; ++k)
|
|
901
891
|
h[k].call(t, s, n, r);
|
|
902
892
|
}
|
|
903
|
-
function
|
|
893
|
+
function Ie(i, e, t, s) {
|
|
904
894
|
if (e)
|
|
905
895
|
i.apply(t, s);
|
|
906
896
|
else
|
|
907
|
-
for (var n = i.length, r =
|
|
897
|
+
for (var n = i.length, r = A(i, n), d = 0; d < n; ++d)
|
|
908
898
|
r[d].apply(t, s);
|
|
909
899
|
}
|
|
910
900
|
m.prototype.emit = function(e) {
|
|
@@ -919,8 +909,8 @@ m.prototype.emit = function(e) {
|
|
|
919
909
|
else {
|
|
920
910
|
if (t instanceof Error)
|
|
921
911
|
throw t;
|
|
922
|
-
var
|
|
923
|
-
throw
|
|
912
|
+
var O = new Error('Uncaught, unspecified "error" event. (' + t + ")");
|
|
913
|
+
throw O.context = t, O;
|
|
924
914
|
}
|
|
925
915
|
return !1;
|
|
926
916
|
}
|
|
@@ -930,22 +920,22 @@ m.prototype.emit = function(e) {
|
|
|
930
920
|
switch (n = arguments.length, n) {
|
|
931
921
|
// fast cases
|
|
932
922
|
case 1:
|
|
933
|
-
|
|
923
|
+
Le(s, L, this);
|
|
934
924
|
break;
|
|
935
925
|
case 2:
|
|
936
|
-
|
|
926
|
+
_e(s, L, this, arguments[1]);
|
|
937
927
|
break;
|
|
938
928
|
case 3:
|
|
939
|
-
|
|
929
|
+
Me(s, L, this, arguments[1], arguments[2]);
|
|
940
930
|
break;
|
|
941
931
|
case 4:
|
|
942
|
-
|
|
932
|
+
Re(s, L, this, arguments[1], arguments[2], arguments[3]);
|
|
943
933
|
break;
|
|
944
934
|
// slower
|
|
945
935
|
default:
|
|
946
936
|
for (r = new Array(n - 1), d = 1; d < n; d++)
|
|
947
937
|
r[d - 1] = arguments[d];
|
|
948
|
-
|
|
938
|
+
Ie(s, L, this, r);
|
|
949
939
|
}
|
|
950
940
|
return !0;
|
|
951
941
|
};
|
|
@@ -962,11 +952,11 @@ function ae(i, e, t, s) {
|
|
|
962
952
|
else if (typeof d == "function" ? d = r[e] = s ? [t, d] : [d, t] : s ? d.unshift(t) : d.push(t), !d.warned && (n = oe(i), n && n > 0 && d.length > n)) {
|
|
963
953
|
d.warned = !0;
|
|
964
954
|
var h = new Error("Possible EventEmitter memory leak detected. " + d.length + " " + e + " listeners added. Use emitter.setMaxListeners() to increase limit");
|
|
965
|
-
h.name = "MaxListenersExceededWarning", h.emitter = i, h.type = e, h.count = d.length,
|
|
955
|
+
h.name = "MaxListenersExceededWarning", h.emitter = i, h.type = e, h.count = d.length, Ne(h);
|
|
966
956
|
}
|
|
967
957
|
return i;
|
|
968
958
|
}
|
|
969
|
-
function
|
|
959
|
+
function Ne(i) {
|
|
970
960
|
typeof console.warn == "function" ? console.warn(i) : console.log(i);
|
|
971
961
|
}
|
|
972
962
|
m.prototype.addListener = function(e, t) {
|
|
@@ -1045,7 +1035,7 @@ m.prototype.removeAllListeners = function(e) {
|
|
|
1045
1035
|
};
|
|
1046
1036
|
m.prototype.listeners = function(e) {
|
|
1047
1037
|
var t, s, n = this._events;
|
|
1048
|
-
return n ? (t = n[e], t ? typeof t == "function" ? s = [t.listener || t] : s =
|
|
1038
|
+
return n ? (t = n[e], t ? typeof t == "function" ? s = [t.listener || t] : s = Oe(t) : s = []) : s = [], s;
|
|
1049
1039
|
};
|
|
1050
1040
|
m.listenerCount = function(i, e) {
|
|
1051
1041
|
return typeof i.listenerCount == "function" ? i.listenerCount(e) : de.call(i, e);
|
|
@@ -1070,12 +1060,12 @@ function Ae(i, e) {
|
|
|
1070
1060
|
i[t] = i[s];
|
|
1071
1061
|
i.pop();
|
|
1072
1062
|
}
|
|
1073
|
-
function
|
|
1063
|
+
function A(i, e) {
|
|
1074
1064
|
for (var t = new Array(e); e--; )
|
|
1075
1065
|
t[e] = i[e];
|
|
1076
1066
|
return t;
|
|
1077
1067
|
}
|
|
1078
|
-
function
|
|
1068
|
+
function Oe(i) {
|
|
1079
1069
|
for (var e = new Array(i.length), t = 0; t < e.length; ++t)
|
|
1080
1070
|
e[t] = i[t].listener || i[t];
|
|
1081
1071
|
return e;
|
|
@@ -1126,7 +1116,7 @@ const g = {
|
|
|
1126
1116
|
...e
|
|
1127
1117
|
);
|
|
1128
1118
|
};
|
|
1129
|
-
class
|
|
1119
|
+
class Pe extends m {
|
|
1130
1120
|
server = "";
|
|
1131
1121
|
ws = null;
|
|
1132
1122
|
constructor(e) {
|
|
@@ -1158,7 +1148,7 @@ class xe extends m {
|
|
|
1158
1148
|
E("websocket send message ", e), e !== void 0 && this.ws !== void 0 && this.ws.readyState === 1 && this.ws.send(JSON.stringify(e));
|
|
1159
1149
|
}
|
|
1160
1150
|
}
|
|
1161
|
-
class
|
|
1151
|
+
class xe extends m {
|
|
1162
1152
|
socket = void 0;
|
|
1163
1153
|
timer = void 0;
|
|
1164
1154
|
waitinggroup = void 0;
|
|
@@ -1172,7 +1162,7 @@ class Ge extends m {
|
|
|
1172
1162
|
async initClient() {
|
|
1173
1163
|
return this.destorySocket(), new Promise((e, t) => {
|
|
1174
1164
|
if (this.server !== void 0) {
|
|
1175
|
-
let s = new
|
|
1165
|
+
let s = new Pe(this.server);
|
|
1176
1166
|
s.on(R.connected, () => {
|
|
1177
1167
|
this.socket = s, this.timer = setInterval(() => {
|
|
1178
1168
|
this.sendMessage({ req: 0 });
|
|
@@ -1226,10 +1216,10 @@ class Ge extends m {
|
|
|
1226
1216
|
this.destorySocket();
|
|
1227
1217
|
}
|
|
1228
1218
|
}
|
|
1229
|
-
const
|
|
1230
|
-
let s = new
|
|
1219
|
+
const Ge = async (i, e = 20, t = !0) => {
|
|
1220
|
+
let s = new xe(i, e, t);
|
|
1231
1221
|
return await s.initClient(), s;
|
|
1232
|
-
}, G = class G extends
|
|
1222
|
+
}, G = class G extends ye {
|
|
1233
1223
|
constructor(e) {
|
|
1234
1224
|
let t = e.expireTime || G.defaultExpireTime;
|
|
1235
1225
|
super(e.server, e.localNumber, t, e.heartTime || (e.localNumber ? 5 : 0)), this.enablePtt = e.enablePtt, this.pttServer = e.pttServer;
|
|
@@ -1237,7 +1227,7 @@ const Ve = async (i, e = 20, t = !0) => {
|
|
|
1237
1227
|
async initPttClient() {
|
|
1238
1228
|
if (this.enablePtt)
|
|
1239
1229
|
if (this.pttServer) {
|
|
1240
|
-
const e = await
|
|
1230
|
+
const e = await Ge(this.pttServer);
|
|
1241
1231
|
if (!e) return Promise.reject("ptt客户端初始化失败!");
|
|
1242
1232
|
e.on(g.ACTIVE_GROUP, (t) => {
|
|
1243
1233
|
this.emit(g.ACTIVE_GROUP, t);
|
|
@@ -1279,8 +1269,8 @@ const Ve = async (i, e = 20, t = !0) => {
|
|
|
1279
1269
|
}
|
|
1280
1270
|
};
|
|
1281
1271
|
G.defaultExpireTime = 60;
|
|
1282
|
-
let
|
|
1283
|
-
class
|
|
1272
|
+
let j = G;
|
|
1273
|
+
class Ve extends ne {
|
|
1284
1274
|
//invite seq
|
|
1285
1275
|
constructor(e, t, s, n, r) {
|
|
1286
1276
|
super(e, t, s), this.callType = b.unknown, this.inviteSeq = r, this.inviteOffer = n;
|
|
@@ -1354,7 +1344,7 @@ const ee = {
|
|
|
1354
1344
|
818: "RTMP连接设备失败",
|
|
1355
1345
|
900: "计划到时释放"
|
|
1356
1346
|
};
|
|
1357
|
-
class ue extends
|
|
1347
|
+
class ue extends j {
|
|
1358
1348
|
constructor() {
|
|
1359
1349
|
super(...arguments), this.allSession = [];
|
|
1360
1350
|
}
|
|
@@ -1374,8 +1364,8 @@ class ue extends U {
|
|
|
1374
1364
|
processMessage(e) {
|
|
1375
1365
|
let { req: t } = e;
|
|
1376
1366
|
if (t === T.MESSAGE_TYPE_INVITE) {
|
|
1377
|
-
let s = new
|
|
1378
|
-
this.allSession.push(s), this.emit(
|
|
1367
|
+
let s = new Ve(this, e.cid, e.from, e.sdp, e.seq);
|
|
1368
|
+
this.allSession.push(s), this.emit(U.invite, s);
|
|
1379
1369
|
} else if (t === T.MESSAGE_TYPE_REINVITE) {
|
|
1380
1370
|
let s = this.allSession.find((n) => n.sessionId == e.cid);
|
|
1381
1371
|
s !== void 0 && (s.inviteSeq = e.seq, s.inviteOffer = e.sdp, s.acceptCall(), s.emit(S.reInvite, s));
|
|
@@ -1406,7 +1396,7 @@ const je = async (i) => {
|
|
|
1406
1396
|
}), y.random = String(Date.now());
|
|
1407
1397
|
let t = await e.register();
|
|
1408
1398
|
return t.status === N.ok ? e : (e.destroy(), Promise.reject(t));
|
|
1409
|
-
},
|
|
1399
|
+
}, Ue = async (i, e, t, s) => {
|
|
1410
1400
|
y.random = String(Date.now());
|
|
1411
1401
|
let n = new ue({ server: i, localNumber: "anonymous", ...s });
|
|
1412
1402
|
await n.reConnect();
|
|
@@ -1416,24 +1406,24 @@ const je = async (i) => {
|
|
|
1416
1406
|
te(t), r.destroy(), n.destroy();
|
|
1417
1407
|
}
|
|
1418
1408
|
};
|
|
1419
|
-
},
|
|
1409
|
+
}, qe = async () => {
|
|
1420
1410
|
await navigator.mediaDevices.getUserMedia({ audio: !0, video: !0 });
|
|
1421
1411
|
};
|
|
1422
1412
|
export {
|
|
1423
1413
|
D as PTTEvent,
|
|
1424
|
-
|
|
1414
|
+
Ve as RtcCalledSession,
|
|
1425
1415
|
b as RtcCalledType,
|
|
1426
1416
|
ue as RtcClient,
|
|
1427
|
-
|
|
1417
|
+
U as RtcClientEvent,
|
|
1428
1418
|
N as RtcInviteStatus,
|
|
1429
1419
|
Q as RtcSession,
|
|
1430
1420
|
S as RtcSessionEvent,
|
|
1431
|
-
|
|
1421
|
+
qe as authDevice,
|
|
1432
1422
|
se as closeStreamAndTrack,
|
|
1433
1423
|
je as createRtcClient,
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1424
|
+
De as disableLog,
|
|
1425
|
+
We as enableLog,
|
|
1426
|
+
Ue as playRemote,
|
|
1437
1427
|
te as releaseStreamFromContainer,
|
|
1438
1428
|
ie as renderStreamToContainer
|
|
1439
1429
|
};
|
package/dist/index.umd.js
CHANGED
|
@@ -1,6 +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||{}),y=(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))(y||{}),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};class pe{static formatOffer(e){let{sdp:t}=e;if(t===void 0)throw new Error("offer sdp is empty");return t=t.split(`\r
|
|
2
|
-
`).filter(s=>s.indexOf("a=group:BUNDLE")===-1).join(`\r
|
|
3
|
-
`),e.sdp=t,e}}var V={exports:{}},Q;function ge(){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=qe,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 A=v[o];if(A===void 0)return!1;if(typeof A=="function")e(A,this,c);else for(var he=A.length,Ye=ue(A,he),u=0;u<he;++u)e(Ye[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():je(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?Ue(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 je(a,o){for(;o+1<a.length;o++)a[o]=a[o+1];a.pop()}function Ue(a){for(var o=new Array(a.length),c=0;c<o.length;++c)o[c]=a[c].listener||a[c];return o}function qe(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"&&Fe(a,l,{once:!0})})}function Fe(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=ge();class ke 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 Ce extends ke{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 e=pe.formatOffer(e),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 Ce{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;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
|
|
4
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))}})();
|
|
5
|
-
`,Z=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",X],{type:"text/javascript;charset=utf-8"});function we(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 Ee extends K.EventEmitter{constructor(e,t,s){super(),this.server=e,this.ws=new we,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 Te 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 Ee(this.activeServer,new L(y.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 ye extends Te{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 ye{async register(){let e=new L(y.MESSAGE_TYPE_REGISTER,this.localNumber,this.localNumber,{expire:this.expireTime});return this.sendRespondableMessage(e)}unRegister(){let e=new L(y.MESSAGE_TYPE_REGISTER,this.localNumber,this.localNumber,{expire:0});this.sendMessage(e)}async invite(e,t,s){return this.sendRespondableMessage(new L(y.MESSAGE_TYPE_INVITE,this.localNumber,e,{cid:t,sdp:s}))}sendIce(e,t,s){}sendBye(e,t){return this.sendMessage(new L(y.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(y.MESSAGE_TYPE_INFO,this.localNumber,e,{cid:t,info:{msg:"dtmf",dtmf:s}}))}}var Se;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&&Se.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 Le(i,e,t){if(e)i.call(t);else for(var s=i.length,n=N(i,s),r=0;r<s;++r)n[r].call(t)}function _e(i,e,t,s){if(e)i.call(t,s);else for(var n=i.length,r=N(i,n),d=0;d<n;++d)r[d].call(t,s)}function Re(i,e,t,s,n){if(e)i.call(t,s,n);else for(var r=i.length,d=N(i,r),h=0;h<r;++h)d[h].call(t,s,n)}function Me(i,e,t,s,n,r){if(e)i.call(t,s,n,r);else for(var d=i.length,h=N(i,d),C=0;C<d;++C)h[C].call(t,s,n,r)}function Ie(i,e,t,s){if(e)i.apply(t,s);else for(var n=i.length,r=N(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:Le(s,R,this);break;case 2:_e(s,R,this,arguments[1]);break;case 3:Re(s,R,this,arguments[1],arguments[2]);break;case 4:Me(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];Ie(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,Oe(h)}return i}function Oe(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 N(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:"还有子管理员存在"},O={connected:"connected",disconnected:"disconnected",message:"message"},b=(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 Pe extends m{server="";ws=null;constructor(e){super(),this.server=e}connect(){this.ws=new WebSocket(this.server),this.ws.onopen=()=>{b("websocket connected ",this.server),this.emit(O.connected)},this.ws.onclose=()=>{b("websocket disconnected ",this.server),this.ws=void 0,this.emit(O.disconnected)},this.ws.onmessage=({data:e})=>{let t=JSON.parse(e);b("websocket recive message ",t),this.emit(O.message,t)}}close(){this.ws!==void 0&&(this.ws.close(),this.ws=void 0)}sendMessage(e){b("websocket send message ",e),e!==void 0&&this.ws!==void 0&&this.ws.readyState===1&&this.ws.send(JSON.stringify(e))}}class xe 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 Pe(this.server);s.on(O.connected,()=>{this.socket=s,this.timer=setInterval(()=>{this.sendMessage({req:0})},this.heartTime*1e3),e()}),s.on(O.disconnected,()=>{this.socket=void 0,this.autoReconnect?setTimeout(()=>{this.initClient()},3e3):this.emit(k.DISCONNECTED),t("socket connecion failed")}),s.on(O.message,n=>this.onReviceMessage(n)),s.connect()}else t("server is empty")})}onReviceMessage(e){b(e);const{info:t,msg:s,res:n}=e;if(t===10&&(this.speaker=`${s.speaker}`,b(`${this.speaker}正在说话`),this.emit(k.SPEAKER,this.speaker)),t===11&&(n.code===200?(this.activeGroup=this.waitinggroup,b(`加入组${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,b(`talking:${this.talking}`),this.emit(k.TALKING,this.talking)),t===14&&(this.speaker="",b(`${this.speaker}停止说话`),this.emit(k.SPEAKER,this.speaker)),t===15){const r={user:s.number,group:s.g_num,code:s.status};b(`${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,b(`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 Ge=async(i,e=20,t=!0)=>{let s=new xe(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 Ge(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
|
|
6
|
-
`),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===
|
|
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
|
+
`),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"})}));
|
package/package.json
CHANGED