4704 lines
232 KiB
JavaScript
Executable File
4704 lines
232 KiB
JavaScript
Executable File
/*
|
|
* Intel WebRTC SDK version 4.3.0
|
|
* Copyright (c) 2020 Intel <http://webrtc.intel.com>
|
|
* Homepage: http://webrtc.intel.com
|
|
*/
|
|
|
|
!(function (e) {
|
|
if ("object" == typeof exports && "undefined" != typeof module)
|
|
module.exports = e();
|
|
else if ("function" == typeof define && define.amd)
|
|
define([], e);
|
|
else {
|
|
("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this).Owt = e()
|
|
}
|
|
}(function () {
|
|
return function () {
|
|
return function e(t, n, r) {
|
|
function i(a, s) {
|
|
if (!n[a]) {
|
|
if (!t[a]) {
|
|
var c = "function" == typeof require && require;
|
|
if (!s && c)
|
|
return c(a, !0);
|
|
if (o)
|
|
return o(a, !0);
|
|
var u = new Error("Cannot find module '" + a + "'");
|
|
throw u.code = "MODULE_NOT_FOUND",
|
|
u
|
|
}
|
|
var d = n[a] = {
|
|
exports: {}
|
|
};
|
|
t[a][0].call(d.exports, function (e) {
|
|
return i(t[a][1][e] || e)
|
|
}, d, d.exports, e, t, n, r)
|
|
}
|
|
return n[a].exports
|
|
}
|
|
for (var o = "function" == typeof require && require, a = 0; a < r.length; a++)
|
|
i(r[a]);
|
|
return i
|
|
}
|
|
}()({
|
|
1: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.Base64 = void 0;
|
|
var r = function () {
|
|
var e, t, n, r = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/"], i = [];
|
|
for (n = 0; n < r.length; n += 1)
|
|
i[r[n]] = n;
|
|
var o = function (n) {
|
|
e = n,
|
|
t = 0
|
|
}
|
|
, a = function () {
|
|
if (!e)
|
|
return -1;
|
|
if (t >= e.length)
|
|
return -1;
|
|
var n = 255 & e.charCodeAt(t);
|
|
return t += 1,
|
|
n
|
|
}
|
|
, s = function () {
|
|
if (!e)
|
|
return -1;
|
|
for (; ;) {
|
|
if (t >= e.length)
|
|
return -1;
|
|
var n = e.charAt(t);
|
|
if (t += 1,
|
|
i[n])
|
|
return i[n];
|
|
if ("A" === n)
|
|
return 0
|
|
}
|
|
}
|
|
, c = function (e) {
|
|
return 1 === (e = e.toString(16)).length && (e = "0" + e),
|
|
e = "%" + e,
|
|
unescape(e)
|
|
};
|
|
return {
|
|
encodeBase64: function (e) {
|
|
var t, n;
|
|
o(e),
|
|
t = "";
|
|
var i = new Array(3);
|
|
for (n = !1; !n && -1 !== (i[0] = a());)
|
|
i[1] = a(),
|
|
i[2] = a(),
|
|
t += r[i[0] >> 2],
|
|
-1 !== i[1] ? (t += r[i[0] << 4 & 48 | i[1] >> 4],
|
|
-1 !== i[2] ? (t += r[i[1] << 2 & 60 | i[2] >> 6],
|
|
t += r[63 & i[2]]) : (t += r[i[1] << 2 & 60],
|
|
t += "=",
|
|
n = !0)) : (t += r[i[0] << 4 & 48],
|
|
t += "=",
|
|
t += "=",
|
|
n = !0);
|
|
return t
|
|
},
|
|
decodeBase64: function (e) {
|
|
var t, n;
|
|
o(e),
|
|
t = "";
|
|
var r = new Array(4);
|
|
for (n = !1; !n && -1 !== (r[0] = s()) && -1 !== (r[1] = s());)
|
|
r[2] = s(),
|
|
r[3] = s(),
|
|
t += c(r[0] << 2 & 255 | r[1] >> 4),
|
|
-1 !== r[2] ? (t += c(r[1] << 4 & 255 | r[2] >> 2),
|
|
-1 !== r[3] ? t += c(r[2] << 6 & 255 | r[3]) : n = !0) : n = !0;
|
|
return t
|
|
}
|
|
}
|
|
}();
|
|
n.Base64 = r
|
|
}
|
|
, {}],
|
|
2: [function (e, t, n) {
|
|
"use strict";
|
|
function r(e, t) {
|
|
if (!(e instanceof t))
|
|
throw new TypeError("Cannot call a class as a function")
|
|
}
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.VideoEncodingParameters = n.VideoCodecParameters = n.VideoCodec = n.AudioEncodingParameters = n.AudioCodecParameters = n.AudioCodec = void 0;
|
|
n.AudioCodec = {
|
|
PCMU: "pcmu",
|
|
PCMA: "pcma",
|
|
OPUS: "opus",
|
|
G722: "g722",
|
|
ISAC: "iSAC",
|
|
ILBC: "iLBC",
|
|
AAC: "aac",
|
|
AC3: "ac3",
|
|
NELLYMOSER: "nellymoser"
|
|
};
|
|
n.AudioCodecParameters = function e(t, n, i) {
|
|
r(this, e),
|
|
this.name = t,
|
|
this.channelCount = n,
|
|
this.clockRate = i
|
|
}
|
|
;
|
|
n.AudioEncodingParameters = function e(t, n) {
|
|
r(this, e),
|
|
this.codec = t,
|
|
this.maxBitrate = n
|
|
}
|
|
;
|
|
n.VideoCodec = {
|
|
VP8: "vp8",
|
|
VP9: "vp9",
|
|
H264: "h264",
|
|
H265: "h265"
|
|
};
|
|
n.VideoCodecParameters = function e(t, n) {
|
|
r(this, e),
|
|
this.name = t,
|
|
this.profile = n
|
|
}
|
|
;
|
|
n.VideoEncodingParameters = function e(t, n) {
|
|
r(this, e),
|
|
this.codec = t,
|
|
this.maxBitrate = n
|
|
}
|
|
}
|
|
, {}],
|
|
3: [function (e, t, n) {
|
|
"use strict";
|
|
function r(e) {
|
|
return (r = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
|
|
return typeof e
|
|
}
|
|
: function (e) {
|
|
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
|
|
}
|
|
)(e)
|
|
}
|
|
function i(e, t) {
|
|
return !t || "object" !== r(t) && "function" != typeof t ? function (e) {
|
|
if (void 0 === e)
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return e
|
|
}(e) : t
|
|
}
|
|
function o(e) {
|
|
return (o = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
|
|
return e.__proto__ || Object.getPrototypeOf(e)
|
|
}
|
|
)(e)
|
|
}
|
|
function a(e, t) {
|
|
if ("function" != typeof t && null !== t)
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
e.prototype = Object.create(t && t.prototype, {
|
|
constructor: {
|
|
value: e,
|
|
writable: !0,
|
|
configurable: !0
|
|
}
|
|
}),
|
|
t && s(e, t)
|
|
}
|
|
function s(e, t) {
|
|
return (s = Object.setPrototypeOf || function (e, t) {
|
|
return e.__proto__ = t,
|
|
e
|
|
}
|
|
)(e, t)
|
|
}
|
|
function c(e, t) {
|
|
if (!(e instanceof t))
|
|
throw new TypeError("Cannot call a class as a function")
|
|
}
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.MuteEvent = n.ErrorEvent = n.MessageEvent = n.OwtEvent = n.EventDispatcher = void 0;
|
|
n.EventDispatcher = function () {
|
|
var e = {
|
|
dispatcher: {}
|
|
};
|
|
e.dispatcher.eventListeners = {},
|
|
this.addEventListener = function (t, n) {
|
|
void 0 === e.dispatcher.eventListeners[t] && (e.dispatcher.eventListeners[t] = []),
|
|
e.dispatcher.eventListeners[t].push(n)
|
|
}
|
|
,
|
|
this.removeEventListener = function (t, n) {
|
|
if (e.dispatcher.eventListeners[t]) {
|
|
var r = e.dispatcher.eventListeners[t].indexOf(n);
|
|
-1 !== r && e.dispatcher.eventListeners[t].splice(r, 1)
|
|
}
|
|
}
|
|
,
|
|
this.clearEventListener = function (t) {
|
|
e.dispatcher.eventListeners[t] = []
|
|
}
|
|
,
|
|
this.dispatchEvent = function (t) {
|
|
e.dispatcher.eventListeners[t.type] && e.dispatcher.eventListeners[t.type].map(function (e) {
|
|
e(t)
|
|
})
|
|
}
|
|
}
|
|
;
|
|
var u = function e(t) {
|
|
c(this, e),
|
|
this.type = t
|
|
};
|
|
n.OwtEvent = u;
|
|
var d = function (e) {
|
|
function t(e, n) {
|
|
var r;
|
|
return c(this, t),
|
|
(r = i(this, o(t).call(this, e))).origin = n.origin,
|
|
r.message = n.message,
|
|
r.to = n.to,
|
|
r
|
|
}
|
|
return a(t, u),
|
|
t
|
|
}();
|
|
n.MessageEvent = d;
|
|
var l = function (e) {
|
|
function t(e, n) {
|
|
var r;
|
|
return c(this, t),
|
|
(r = i(this, o(t).call(this, e))).error = n.error,
|
|
r
|
|
}
|
|
return a(t, u),
|
|
t
|
|
}();
|
|
n.ErrorEvent = l;
|
|
var f = function (e) {
|
|
function t(e, n) {
|
|
var r;
|
|
return c(this, t),
|
|
(r = i(this, o(t).call(this, e))).kind = n.kind,
|
|
r
|
|
}
|
|
return a(t, u),
|
|
t
|
|
}();
|
|
n.MuteEvent = f
|
|
}
|
|
, {}],
|
|
4: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
});
|
|
var r = e("./mediastream-factory.js");
|
|
Object.keys(r).forEach(function (e) {
|
|
"default" !== e && "__esModule" !== e && Object.defineProperty(n, e, {
|
|
enumerable: !0,
|
|
get: function () {
|
|
return r[e]
|
|
}
|
|
})
|
|
});
|
|
var i = e("./stream.js");
|
|
Object.keys(i).forEach(function (e) {
|
|
"default" !== e && "__esModule" !== e && Object.defineProperty(n, e, {
|
|
enumerable: !0,
|
|
get: function () {
|
|
return i[e]
|
|
}
|
|
})
|
|
});
|
|
var o = e("./mediaformat.js");
|
|
Object.keys(o).forEach(function (e) {
|
|
"default" !== e && "__esModule" !== e && Object.defineProperty(n, e, {
|
|
enumerable: !0,
|
|
get: function () {
|
|
return o[e]
|
|
}
|
|
})
|
|
})
|
|
}
|
|
, {
|
|
"./mediaformat.js": 6,
|
|
"./mediastream-factory.js": 7,
|
|
"./stream.js": 10
|
|
}],
|
|
5: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.default = void 0;
|
|
var r = function () {
|
|
var e = function () { }
|
|
, t = {
|
|
DEBUG: 0,
|
|
TRACE: 1,
|
|
INFO: 2,
|
|
WARNING: 3,
|
|
ERROR: 4,
|
|
NONE: 5
|
|
};
|
|
t.log = window.console.log.bind(window.console, '%cOwtSDK', 'color:#009688');
|
|
var n = function (e) {
|
|
return "function" == typeof window.console[e] ? window.console[e].bind(window.console, '%cOwtSDK', 'color:#009688') : window.console.log.bind(window.console, '%cOwtSDK', 'color:#009688')
|
|
}
|
|
, r = function (r) {
|
|
t.debug = r <= 0 ? n("log") : e,
|
|
t.trace = r <= 1 ? n("trace") : e,
|
|
t.info = r <= 2 ? n("info") : e,
|
|
t.warning = r <= 3 ? n("warn") : e,
|
|
t.error = r <= 4 ? n("error") : e
|
|
};
|
|
return r(0),
|
|
t.setLogLevel = r,
|
|
t
|
|
}();
|
|
n.default = r
|
|
}
|
|
, {}],
|
|
6: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.Resolution = n.TrackKind = n.VideoSourceInfo = n.AudioSourceInfo = void 0;
|
|
n.AudioSourceInfo = {
|
|
MIC: "mic",
|
|
SCREENCAST: "screen-cast",
|
|
FILE: "file",
|
|
MIXED: "mixed"
|
|
};
|
|
n.VideoSourceInfo = {
|
|
CAMERA: "camera",
|
|
SCREENCAST: "screen-cast",
|
|
FILE: "file",
|
|
MIXED: "mixed"
|
|
};
|
|
n.TrackKind = {
|
|
AUDIO: "audio",
|
|
VIDEO: "video",
|
|
AUDIO_AND_VIDEO: "av"
|
|
};
|
|
n.Resolution = function e(t, n) {
|
|
!function (e, t) {
|
|
if (!(e instanceof t))
|
|
throw new TypeError("Cannot call a class as a function")
|
|
}(this, e),
|
|
this.width = t,
|
|
this.height = n
|
|
}
|
|
}
|
|
, {}],
|
|
7: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.MediaStreamFactory = n.StreamConstraints = n.VideoTrackConstraints = n.AudioTrackConstraints = void 0;
|
|
var r, i = a(e("./utils.js")), o = ((r = e("./logger.js")) && r.__esModule,
|
|
a(e("./mediaformat.js")));
|
|
function a(e) {
|
|
if (e && e.__esModule)
|
|
return e;
|
|
var t = {};
|
|
if (null != e)
|
|
for (var n in e)
|
|
if (Object.prototype.hasOwnProperty.call(e, n)) {
|
|
var r = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(e, n) : {};
|
|
r.get || r.set ? Object.defineProperty(t, n, r) : t[n] = e[n]
|
|
}
|
|
return t.default = e,
|
|
t
|
|
}
|
|
function s(e, t) {
|
|
for (var n = 0; n < t.length; n++) {
|
|
var r = t[n];
|
|
r.enumerable = r.enumerable || !1,
|
|
r.configurable = !0,
|
|
"value" in r && (r.writable = !0),
|
|
Object.defineProperty(e, r.key, r)
|
|
}
|
|
}
|
|
function c(e) {
|
|
return (c = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
|
|
return typeof e
|
|
}
|
|
: function (e) {
|
|
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
|
|
}
|
|
)(e)
|
|
}
|
|
function u(e, t) {
|
|
if (!(e instanceof t))
|
|
throw new TypeError("Cannot call a class as a function")
|
|
}
|
|
n.AudioTrackConstraints = function e(t) {
|
|
if (u(this, e),
|
|
!Object.values(o.AudioSourceInfo).some(function (e) {
|
|
return e === t
|
|
}))
|
|
throw new TypeError("Invalid source.");
|
|
this.source = t,
|
|
this.deviceId = void 0
|
|
}
|
|
;
|
|
n.VideoTrackConstraints = function e(t) {
|
|
if (u(this, e),
|
|
!Object.values(o.VideoSourceInfo).some(function (e) {
|
|
return e === t
|
|
}))
|
|
throw new TypeError("Invalid source.");
|
|
this.source = t,
|
|
this.deviceId = void 0,
|
|
this.resolution = void 0,
|
|
this.frameRate = void 0
|
|
}
|
|
;
|
|
function d(e) {
|
|
return "object" === c(e.video) && e.video.source === o.VideoSourceInfo.SCREENCAST
|
|
}
|
|
n.StreamConstraints = function e() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]
|
|
, n = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];
|
|
u(this, e),
|
|
this.audio = t,
|
|
this.video = n
|
|
}
|
|
;
|
|
var l = function () {
|
|
function e() {
|
|
u(this, e)
|
|
}
|
|
var t, n, r;
|
|
return t = e,
|
|
r = [{
|
|
key: "createMediaStream",
|
|
value: function (e) {
|
|
if ("object" !== c(e) || !e.audio && !e.video)
|
|
return Promise.reject(new TypeError("Invalid constrains"));
|
|
if (!d(e) && "object" === c(e.audio) && e.audio.source === o.AudioSourceInfo.SCREENCAST)
|
|
return Promise.reject(new TypeError("Cannot share screen without video."));
|
|
if (d(e) && !i.isChrome() && !i.isFirefox())
|
|
return Promise.reject(new TypeError("Screen sharing only supports Chrome and Firefox."));
|
|
if (d(e) && "object" === c(e.audio) && e.audio.source !== o.AudioSourceInfo.SCREENCAST)
|
|
return Promise.reject(new TypeError("Cannot capture video from screen cast while capture audio from other source."));
|
|
if (!e.audio && !e.video)
|
|
return Promise.reject(new TypeError("At least one of audio and video must be requested."));
|
|
var t = Object.create({});
|
|
return "object" === c(e.audio) && e.audio.source === o.AudioSourceInfo.MIC ? (t.audio = Object.create({}),
|
|
i.isEdge() ? t.audio.deviceId = e.audio.deviceId : t.audio.deviceId = {
|
|
exact: e.audio.deviceId
|
|
}) : e.audio.source === o.AudioSourceInfo.SCREENCAST ? t.audio = !0 : t.audio = e.audio,
|
|
"object" === c(e.video) ? (t.video = Object.create({}),
|
|
"number" == typeof e.video.frameRate && (t.video.frameRate = e.video.frameRate),
|
|
e.video.resolution && e.video.resolution.width && e.video.resolution.height && (e.video.source === o.VideoSourceInfo.SCREENCAST ? (t.video.width = e.video.resolution.width,
|
|
t.video.height = e.video.resolution.height) : (t.video.width = Object.create({}),
|
|
t.video.width.exact = e.video.resolution.width,
|
|
t.video.height = Object.create({}),
|
|
t.video.height.exact = e.video.resolution.height)),
|
|
"string" == typeof e.video.deviceId && (t.video.deviceId = {
|
|
exact: e.video.deviceId
|
|
}),
|
|
i.isFirefox() && e.video.source === o.VideoSourceInfo.SCREENCAST && (t.video.mediaSource = "screen")) : t.video = e.video,
|
|
d(e) ? navigator.mediaDevices.getDisplayMedia(t) : navigator.mediaDevices.getUserMedia(t)
|
|
}
|
|
}],
|
|
(n = null) && s(t.prototype, n),
|
|
r && s(t, r),
|
|
e
|
|
}();
|
|
n.MediaStreamFactory = l
|
|
}
|
|
, {
|
|
"./logger.js": 5,
|
|
"./mediaformat.js": 6,
|
|
"./utils.js": 11
|
|
}],
|
|
8: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.PublishOptions = n.Publication = n.PublicationSettings = n.VideoPublicationSettings = n.AudioPublicationSettings = void 0;
|
|
var r = o(e("./utils.js"))
|
|
, i = (o(e("./mediaformat.js")),
|
|
e("../base/event.js"));
|
|
function o(e) {
|
|
if (e && e.__esModule)
|
|
return e;
|
|
var t = {};
|
|
if (null != e)
|
|
for (var n in e)
|
|
if (Object.prototype.hasOwnProperty.call(e, n)) {
|
|
var r = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(e, n) : {};
|
|
r.get || r.set ? Object.defineProperty(t, n, r) : t[n] = e[n]
|
|
}
|
|
return t.default = e,
|
|
t
|
|
}
|
|
function a(e) {
|
|
return (a = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
|
|
return typeof e
|
|
}
|
|
: function (e) {
|
|
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
|
|
}
|
|
)(e)
|
|
}
|
|
function s(e) {
|
|
return (s = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
|
|
return e.__proto__ || Object.getPrototypeOf(e)
|
|
}
|
|
)(e)
|
|
}
|
|
function c(e, t) {
|
|
return (c = Object.setPrototypeOf || function (e, t) {
|
|
return e.__proto__ = t,
|
|
e
|
|
}
|
|
)(e, t)
|
|
}
|
|
function u(e) {
|
|
if (void 0 === e)
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return e
|
|
}
|
|
function d(e, t) {
|
|
if (!(e instanceof t))
|
|
throw new TypeError("Cannot call a class as a function")
|
|
}
|
|
n.AudioPublicationSettings = function e(t) {
|
|
d(this, e),
|
|
this.codec = t
|
|
}
|
|
;
|
|
n.VideoPublicationSettings = function e(t, n, r, i, o, a) {
|
|
d(this, e),
|
|
this.codec = t,
|
|
this.resolution = n,
|
|
this.frameRate = r,
|
|
this.bitrate = i,
|
|
this.keyFrameInterval = o,
|
|
this.rid = a
|
|
}
|
|
;
|
|
n.PublicationSettings = function e(t, n) {
|
|
d(this, e),
|
|
this.audio = t,
|
|
this.video = n
|
|
}
|
|
;
|
|
var l = function (e) {
|
|
function t(e, n, i, o, c) {
|
|
var l, f, p;
|
|
return d(this, t),
|
|
f = this,
|
|
l = !(p = s(t).call(this)) || "object" !== a(p) && "function" != typeof p ? u(f) : p,
|
|
Object.defineProperty(u(u(l)), "id", {
|
|
configurable: !1,
|
|
writable: !1,
|
|
value: e || r.createUuid()
|
|
}),
|
|
l.stop = n,
|
|
l.getStats = i,
|
|
l.mute = o,
|
|
l.unmute = c,
|
|
l
|
|
}
|
|
return function (e, t) {
|
|
if ("function" != typeof t && null !== t)
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
e.prototype = Object.create(t && t.prototype, {
|
|
constructor: {
|
|
value: e,
|
|
writable: !0,
|
|
configurable: !0
|
|
}
|
|
}),
|
|
t && c(e, t)
|
|
}(t, i.EventDispatcher),
|
|
t
|
|
}();
|
|
n.Publication = l;
|
|
n.PublishOptions = function e(t, n) {
|
|
d(this, e),
|
|
this.audio = t,
|
|
this.video = n
|
|
}
|
|
}
|
|
, {
|
|
"../base/event.js": 3,
|
|
"./mediaformat.js": 6,
|
|
"./utils.js": 11
|
|
}],
|
|
9: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.reorderCodecs = function (e, t, n) {
|
|
if (!n || 0 === n.length)
|
|
return e;
|
|
n = "audio" === t ? n.concat(l) : n.concat(f);
|
|
var r = e.split("\r\n")
|
|
, i = c(r, "m=", t);
|
|
if (null === i)
|
|
return e;
|
|
var a = r[i].split(" ");
|
|
a.splice(0, 3);
|
|
var s = []
|
|
, h = !0
|
|
, v = !1
|
|
, m = void 0;
|
|
try {
|
|
for (var _, g = n[Symbol.iterator](); !(h = (_ = g.next()).done); h = !0)
|
|
for (var b = _.value, y = 0; y < r.length; y++) {
|
|
var S = u(r, y, -1, "a=rtpmap", b);
|
|
if (null !== S) {
|
|
var P = d(r[S]);
|
|
P && (s.push(P),
|
|
y = S)
|
|
}
|
|
}
|
|
} catch (e) {
|
|
v = !0,
|
|
m = e
|
|
} finally {
|
|
try {
|
|
h || null == g.return || g.return()
|
|
} finally {
|
|
if (v)
|
|
throw m
|
|
}
|
|
}
|
|
s = function (e, t) {
|
|
var n = !0
|
|
, r = !1
|
|
, i = void 0;
|
|
try {
|
|
for (var a, s = t[Symbol.iterator](); !(n = (a = s.next()).done); n = !0) {
|
|
var u = a.value
|
|
, d = c(e, "a=fmtp", "apt=" + u);
|
|
if (null !== d) {
|
|
var l = o(e[d]);
|
|
t.push(l.pt)
|
|
}
|
|
}
|
|
} catch (e) {
|
|
r = !0,
|
|
i = e
|
|
} finally {
|
|
try {
|
|
n || null == s.return || s.return()
|
|
} finally {
|
|
if (r)
|
|
throw i
|
|
}
|
|
}
|
|
return t
|
|
}(r, s),
|
|
r[i] = function (e, t) {
|
|
var n = e.split(" ").slice(0, 3);
|
|
return (n = n.concat(t)).join(" ")
|
|
}(r[i], s);
|
|
var w = !0
|
|
, O = !1
|
|
, E = void 0;
|
|
try {
|
|
for (var j, C = a[Symbol.iterator](); !(w = (j = C.next()).done); w = !0) {
|
|
var T = j.value;
|
|
-1 === s.indexOf(T) && (r = p(r, T))
|
|
}
|
|
} catch (e) {
|
|
O = !0,
|
|
E = e
|
|
} finally {
|
|
try {
|
|
w || null == C.return || C.return()
|
|
} finally {
|
|
if (O)
|
|
throw E
|
|
}
|
|
}
|
|
return e = r.join("\r\n")
|
|
}
|
|
,
|
|
n.addLegacySimulcast = function (e, t, n) {
|
|
var r, i;
|
|
if (!(n && n > 1))
|
|
return e;
|
|
var o = e.split("\r\n")
|
|
, a = c(o, "m=", t);
|
|
if (null === a)
|
|
return e;
|
|
var s = u(o, a + 1, -1, "m=");
|
|
null === s && (s = o.length);
|
|
var d = function (e) {
|
|
var t = e.split(" ")
|
|
, n = t[0].split(":")[1];
|
|
return n
|
|
}
|
|
, l = new Set
|
|
, f = new Set
|
|
, p = new Set
|
|
, h = []
|
|
, v = []
|
|
, m = a + 1;
|
|
for (; m < s;) {
|
|
var _ = o[m];
|
|
if ("" === _)
|
|
break;
|
|
if (_.indexOf("a=ssrc:") > -1) {
|
|
var g = d(o[m]);
|
|
if (f.add(g),
|
|
_.indexOf("cname") > -1 || _.indexOf("msid") > -1)
|
|
for (var b = 1; b < n; b++) {
|
|
var y = parseInt(g) + b + "";
|
|
h.push(_.replace(g, y))
|
|
}
|
|
else
|
|
l.add(_)
|
|
}
|
|
if (_.indexOf("a=ssrc-group:FID") > -1) {
|
|
var S = _.split(" ");
|
|
p.add(S[2]);
|
|
for (var P = 1; P < n; P++) {
|
|
var w = parseInt(S[1]) + P + ""
|
|
, O = parseInt(S[2]) + P + "";
|
|
v.push(_.replace(S[1], w).replace(S[2], O))
|
|
}
|
|
}
|
|
m++
|
|
}
|
|
var E = m;
|
|
return f.forEach(function (e) {
|
|
if (!p.has(e)) {
|
|
var t = "a=ssrc-group:SIM";
|
|
t = t + " " + e;
|
|
for (var r = 1; r < n; r++)
|
|
t = t + " " + (parseInt(e) + r);
|
|
v.push(t)
|
|
}
|
|
}),
|
|
h.sort(),
|
|
(r = o).splice.apply(r, [E, 0].concat(v)),
|
|
(i = o).splice.apply(i, [E, 0].concat(h)),
|
|
o = o.filter(function (e) {
|
|
return !l.has(e)
|
|
}),
|
|
e = o.join("\r\n")
|
|
}
|
|
,
|
|
n.setMaxBitrate = function (e, t) {
|
|
var n = !0
|
|
, r = !1
|
|
, o = void 0;
|
|
try {
|
|
for (var a, s = t[Symbol.iterator](); !(n = (a = s.next()).done); n = !0) {
|
|
var c = a.value;
|
|
c.maxBitrate && (e = i(e, c.codec.name, "x-google-max-bitrate", c.maxBitrate.toString()))
|
|
}
|
|
} catch (e) {
|
|
r = !0,
|
|
o = e
|
|
} finally {
|
|
try {
|
|
n || null == s.return || s.return()
|
|
} finally {
|
|
if (r)
|
|
throw o
|
|
}
|
|
}
|
|
return e
|
|
}
|
|
;
|
|
var r;
|
|
(r = e("./logger.js")) && r.__esModule;
|
|
function i(e, t, n, r) {
|
|
var i = e.split("\r\n");
|
|
i.length <= 1 && (i = e.split("\n"));
|
|
var u = s(i, t)
|
|
, l = {};
|
|
if (null === u) {
|
|
var f = c(i, "a=rtpmap", t);
|
|
if (null === f)
|
|
return e;
|
|
var p = d(i[f]);
|
|
l.pt = p.toString(),
|
|
l.params = {},
|
|
l.params[n] = r,
|
|
i.splice(f + 1, 0, a(l))
|
|
} else
|
|
(l = o(i[u])).params[n] = r,
|
|
i[u] = a(l);
|
|
return e = i.join("\r\n")
|
|
}
|
|
function o(e) {
|
|
var t = {}
|
|
, n = e.indexOf(" ")
|
|
, r = e.substring(n + 1).split(";")
|
|
, i = new RegExp("a=fmtp:(\\d+)")
|
|
, o = e.match(i);
|
|
if (!o || 2 !== o.length)
|
|
return null;
|
|
t.pt = o[1];
|
|
for (var a = {}, s = 0; s < r.length; ++s) {
|
|
var c = r[s].split("=");
|
|
2 === c.length && (a[c[0]] = c[1])
|
|
}
|
|
return t.params = a,
|
|
t
|
|
}
|
|
function a(e) {
|
|
if (!e.hasOwnProperty("pt") || !e.hasOwnProperty("params"))
|
|
return null;
|
|
var t = e.pt
|
|
, n = e.params
|
|
, r = []
|
|
, i = 0;
|
|
for (var o in n)
|
|
r[i] = o + "=" + n[o],
|
|
++i;
|
|
return 0 === i ? null : "a=fmtp:" + t.toString() + " " + r.join(";")
|
|
}
|
|
function s(e, t) {
|
|
var n = function (e, t) {
|
|
var n = c(e, "a=rtpmap", t);
|
|
return n ? d(e[n]) : null
|
|
}(e, t);
|
|
return n ? c(e, "a=fmtp:" + n.toString()) : null
|
|
}
|
|
function c(e, t, n) {
|
|
return u(e, 0, -1, t, n)
|
|
}
|
|
function u(e, t, n, r, i) {
|
|
for (var o = -1 !== n ? n : e.length, a = t; a < o; ++a)
|
|
if (0 === e[a].indexOf(r) && (!i || -1 !== e[a].toLowerCase().indexOf(i.toLowerCase())))
|
|
return a;
|
|
return null
|
|
}
|
|
function d(e) {
|
|
var t = new RegExp("a=rtpmap:(\\d+) [a-zA-Z0-9-]+\\/\\d+")
|
|
, n = e.match(t);
|
|
return n && 2 === n.length ? n[1] : null
|
|
}
|
|
var l = ["CN", "telephone-event"]
|
|
, f = ["red", "ulpfec"];
|
|
function p(e, t) {
|
|
for (var n = new RegExp("a=(rtpmap|rtcp-fb|fmtp):" + t + "\\s"), r = e.length - 1; r > 0; r--)
|
|
e[r].match(n) && e.splice(r, 1);
|
|
return e
|
|
}
|
|
}
|
|
, {
|
|
"./logger.js": 5
|
|
}],
|
|
10: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.StreamEvent = n.RemoteStream = n.LocalStream = n.Stream = n.StreamSourceInfo = void 0;
|
|
(r = e("./logger.js")) && r.__esModule;
|
|
var r, i = e("./event.js"), o = function (e) {
|
|
if (e && e.__esModule)
|
|
return e;
|
|
var t = {};
|
|
if (null != e)
|
|
for (var n in e)
|
|
if (Object.prototype.hasOwnProperty.call(e, n)) {
|
|
var r = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(e, n) : {};
|
|
r.get || r.set ? Object.defineProperty(t, n, r) : t[n] = e[n]
|
|
}
|
|
return t.default = e,
|
|
t
|
|
}(e("./utils.js"));
|
|
function a(e) {
|
|
return (a = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
|
|
return typeof e
|
|
}
|
|
: function (e) {
|
|
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
|
|
}
|
|
)(e)
|
|
}
|
|
function s(e, t) {
|
|
return !t || "object" !== a(t) && "function" != typeof t ? l(e) : t
|
|
}
|
|
function c(e) {
|
|
return (c = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
|
|
return e.__proto__ || Object.getPrototypeOf(e)
|
|
}
|
|
)(e)
|
|
}
|
|
function u(e, t) {
|
|
if ("function" != typeof t && null !== t)
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
e.prototype = Object.create(t && t.prototype, {
|
|
constructor: {
|
|
value: e,
|
|
writable: !0,
|
|
configurable: !0
|
|
}
|
|
}),
|
|
t && d(e, t)
|
|
}
|
|
function d(e, t) {
|
|
return (d = Object.setPrototypeOf || function (e, t) {
|
|
return e.__proto__ = t,
|
|
e
|
|
}
|
|
)(e, t)
|
|
}
|
|
function l(e) {
|
|
if (void 0 === e)
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return e
|
|
}
|
|
function f(e, t) {
|
|
if (!(e instanceof t))
|
|
throw new TypeError("Cannot call a class as a function")
|
|
}
|
|
function p(e, t) {
|
|
return t.some(function (t) {
|
|
return t === e
|
|
})
|
|
}
|
|
n.StreamSourceInfo = function e(t, n) {
|
|
if (f(this, e),
|
|
!p(t, [void 0, "mic", "screen-cast", "file", "mixed"]))
|
|
throw new TypeError("Incorrect value for audioSourceInfo");
|
|
if (!p(n, [void 0, "camera", "screen-cast", "file", "encoded-file", "raw-file", "mixed"]))
|
|
throw new TypeError("Incorrect value for videoSourceInfo");
|
|
this.audio = t,
|
|
this.video = n
|
|
}
|
|
;
|
|
var h = function (e) {
|
|
function t(e, n, r) {
|
|
var i;
|
|
if (f(this, t),
|
|
i = s(this, c(t).call(this)),
|
|
e && !(e instanceof MediaStream) || "object" !== a(n))
|
|
throw new TypeError("Invalid stream or sourceInfo.");
|
|
if (e && (e.getAudioTracks().length > 0 && !n.audio || e.getVideoTracks().length > 0 && !n.video))
|
|
throw new TypeError("Missing audio source info or video source info.");
|
|
return Object.defineProperty(l(l(i)), "mediaStream", {
|
|
configurable: !1,
|
|
writable: !0,
|
|
value: e
|
|
}),
|
|
Object.defineProperty(l(l(i)), "source", {
|
|
configurable: !1,
|
|
writable: !1,
|
|
value: n
|
|
}),
|
|
Object.defineProperty(l(l(i)), "attributes", {
|
|
configurable: !0,
|
|
writable: !1,
|
|
value: r
|
|
}),
|
|
i
|
|
}
|
|
return u(t, i.EventDispatcher),
|
|
t
|
|
}();
|
|
n.Stream = h;
|
|
var v = function (e) {
|
|
function t(e, n, r) {
|
|
var i;
|
|
if (f(this, t),
|
|
!(e instanceof MediaStream))
|
|
throw new TypeError("Invalid stream.");
|
|
return i = s(this, c(t).call(this, e, n, r)),
|
|
Object.defineProperty(l(l(i)), "id", {
|
|
configurable: !1,
|
|
writable: !1,
|
|
value: o.createUuid()
|
|
}),
|
|
i
|
|
}
|
|
return u(t, h),
|
|
t
|
|
}();
|
|
n.LocalStream = v;
|
|
var m = function (e) {
|
|
function t(e, n, r, i, a) {
|
|
var u;
|
|
return f(this, t),
|
|
u = s(this, c(t).call(this, r, i, a)),
|
|
Object.defineProperty(l(l(u)), "id", {
|
|
configurable: !1,
|
|
writable: !1,
|
|
value: e || o.createUuid()
|
|
}),
|
|
Object.defineProperty(l(l(u)), "origin", {
|
|
configurable: !1,
|
|
writable: !1,
|
|
value: n
|
|
}),
|
|
u.settings = void 0,
|
|
u.extraCapabilities = void 0,
|
|
u
|
|
}
|
|
return u(t, h),
|
|
t
|
|
}();
|
|
n.RemoteStream = m;
|
|
var _ = function (e) {
|
|
function t(e, n) {
|
|
var r;
|
|
return f(this, t),
|
|
(r = s(this, c(t).call(this, e))).stream = n.stream,
|
|
r
|
|
}
|
|
return u(t, i.OwtEvent),
|
|
t
|
|
}();
|
|
n.StreamEvent = _
|
|
}
|
|
, {
|
|
"./event.js": 3,
|
|
"./logger.js": 5,
|
|
"./utils.js": 11
|
|
}],
|
|
11: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.isFirefox = function () {
|
|
return null !== window.navigator.userAgent.match("Firefox")
|
|
}
|
|
,
|
|
n.isChrome = function () {
|
|
return null !== window.navigator.userAgent.match("Chrome")
|
|
}
|
|
,
|
|
n.isSafari = i,
|
|
n.isEdge = function () {
|
|
return null !== window.navigator.userAgent.match(/Edge\/(\d+).(\d+)$/)
|
|
}
|
|
,
|
|
n.createUuid = function () {
|
|
return "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx".replace(/[xy]/g, function (e) {
|
|
var t = 16 * Math.random() | 0
|
|
, n = "x" === e ? t : 3 & t | 8;
|
|
return n.toString(16)
|
|
})
|
|
}
|
|
,
|
|
n.sysInfo = function () {
|
|
var e = Object.create({});
|
|
e.sdk = {
|
|
version: r,
|
|
type: "JavaScript"
|
|
};
|
|
var t = navigator.userAgent
|
|
, n = /Chrome\/([0-9\.]+)/.exec(t);
|
|
n ? e.runtime = {
|
|
name: "Chrome",
|
|
version: n[1]
|
|
} : (n = /Firefox\/([0-9\.]+)/.exec(t)) ? e.runtime = {
|
|
name: "Firefox",
|
|
version: n[1]
|
|
} : (n = /Edge\/([0-9\.]+)/.exec(t)) ? e.runtime = {
|
|
name: "Edge",
|
|
version: n[1]
|
|
} : i() ? (n = /Version\/([0-9\.]+) Safari/.exec(t),
|
|
e.runtime = {
|
|
name: "Safari"
|
|
},
|
|
e.runtime.version = n ? n[1] : "Unknown") : e.runtime = {
|
|
name: "Unknown",
|
|
version: "Unknown"
|
|
};
|
|
(n = /Windows NT ([0-9\.]+)/.exec(t)) ? e.os = {
|
|
name: "Windows NT",
|
|
version: n[1]
|
|
} : (n = /Intel Mac OS X ([0-9_\.]+)/.exec(t)) ? e.os = {
|
|
name: "Mac OS X",
|
|
version: n[1].replace(/_/g, ".")
|
|
} : (n = /iPhone OS ([0-9_\.]+)/.exec(t)) ? e.os = {
|
|
name: "iPhone OS",
|
|
version: n[1].replace(/_/g, ".")
|
|
} : (n = /X11; Linux/.exec(t)) ? e.os = {
|
|
name: "Linux",
|
|
version: "Unknown"
|
|
} : (n = /Android( ([0-9\.]+))?/.exec(t)) ? e.os = {
|
|
name: "Android",
|
|
version: n[1] || "Unknown"
|
|
} : (n = /CrOS/.exec(t)) ? e.os = {
|
|
name: "Chrome OS",
|
|
version: "Unknown"
|
|
} : e.os = {
|
|
name: "Unknown",
|
|
version: "Unknown"
|
|
};
|
|
return e.capabilities = {
|
|
continualIceGathering: !1,
|
|
unifiedPlan: !0,
|
|
streamRemovable: "Firefox" !== e.runtime.name
|
|
},
|
|
e
|
|
}
|
|
;
|
|
var r = "4.3";
|
|
function i() {
|
|
return /^((?!chrome|android).)*safari/i.test(window.navigator.userAgent)
|
|
}
|
|
}
|
|
, {}],
|
|
12: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.ConferencePeerConnectionChannel = void 0;
|
|
var r, i = (r = e("../base/logger.js")) && r.__esModule ? r : {
|
|
default: r
|
|
}, o = e("../base/event.js"), a = e("../base/mediaformat.js"), s = e("../base/publication.js"), c = e("./subscription.js"), u = e("./error.js"), d = f(e("../base/utils.js")), l = f(e("../base/sdputils.js"));
|
|
function f(e) {
|
|
if (e && e.__esModule)
|
|
return e;
|
|
var t = {};
|
|
if (null != e)
|
|
for (var n in e)
|
|
if (Object.prototype.hasOwnProperty.call(e, n)) {
|
|
var r = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(e, n) : {};
|
|
r.get || r.set ? Object.defineProperty(t, n, r) : t[n] = e[n]
|
|
}
|
|
return t.default = e,
|
|
t
|
|
}
|
|
function p(e) {
|
|
return (p = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
|
|
return typeof e
|
|
}
|
|
: function (e) {
|
|
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
|
|
}
|
|
)(e)
|
|
}
|
|
function h(e, t) {
|
|
for (var n = 0; n < t.length; n++) {
|
|
var r = t[n];
|
|
r.enumerable = r.enumerable || !1,
|
|
r.configurable = !0,
|
|
"value" in r && (r.writable = !0),
|
|
Object.defineProperty(e, r.key, r)
|
|
}
|
|
}
|
|
function v(e, t) {
|
|
return !t || "object" !== p(t) && "function" != typeof t ? function (e) {
|
|
if (void 0 === e)
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return e
|
|
}(e) : t
|
|
}
|
|
function m(e) {
|
|
return (m = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
|
|
return e.__proto__ || Object.getPrototypeOf(e)
|
|
}
|
|
)(e)
|
|
}
|
|
function _(e, t) {
|
|
return (_ = Object.setPrototypeOf || function (e, t) {
|
|
return e.__proto__ = t,
|
|
e
|
|
}
|
|
)(e, t)
|
|
}
|
|
var g = function (e) {
|
|
function t(e, n) {
|
|
var r;
|
|
return function (e, t) {
|
|
if (!(e instanceof t))
|
|
throw new TypeError("Cannot call a class as a function")
|
|
}(this, t),
|
|
(r = v(this, m(t).call(this)))._config = e,
|
|
r._options = null,
|
|
r._videoCodecs = void 0,
|
|
r._signaling = n,
|
|
r._pc = null,
|
|
r._internalId = null,
|
|
r._pendingCandidates = [],
|
|
r._subscribePromise = null,
|
|
r._publishPromise = null,
|
|
r._subscribedStream = null,
|
|
r._publishedStream = null,
|
|
r._publication = null,
|
|
r._subscription = null,
|
|
r._disconnectTimer = null,
|
|
r._ended = !1,
|
|
r._stopped = !1,
|
|
r
|
|
}
|
|
var n, r, f;
|
|
return function (e, t) {
|
|
if ("function" != typeof t && null !== t)
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
e.prototype = Object.create(t && t.prototype, {
|
|
constructor: {
|
|
value: e,
|
|
writable: !0,
|
|
configurable: !0
|
|
}
|
|
}),
|
|
t && _(e, t)
|
|
}(t, o.EventDispatcher),
|
|
n = t,
|
|
(r = [{
|
|
key: "onMessage",
|
|
value: function (e, t) {
|
|
switch (e) {
|
|
case "progress":
|
|
"soac" === t.status ? this._sdpHandler(t.data) : "ready" === t.status ? this._readyHandler() : "error" === t.status && this._errorHandler(t.data);
|
|
break;
|
|
case "stream":
|
|
this._onStreamEvent(t);
|
|
break;
|
|
default:
|
|
i.default.warning("Unknown notification from MCU.")
|
|
}
|
|
}
|
|
}, {
|
|
key: "publish",
|
|
value: function (e, t, n) {
|
|
var r = this;
|
|
if (void 0 === t && (t = {
|
|
audio: !!e.mediaStream.getAudioTracks().length,
|
|
video: !!e.mediaStream.getVideoTracks().length
|
|
}),
|
|
"object" !== p(t))
|
|
return Promise.reject(new TypeError("Options should be an object."));
|
|
if (this._isRtpEncodingParameters(t.audio) && this._isOwtEncodingParameters(t.video) || this._isOwtEncodingParameters(t.audio) && this._isRtpEncodingParameters(t.video))
|
|
return Promise.reject(new u.ConferenceError("Mixing RTCRtpEncodingParameters and AudioEncodingParameters/VideoEncodingParameters is not allowed."));
|
|
if (void 0 === t.audio && (t.audio = !!e.mediaStream.getAudioTracks().length),
|
|
void 0 === t.video && (t.video = !!e.mediaStream.getVideoTracks().length),
|
|
t.audio && !e.mediaStream.getAudioTracks().length || t.video && !e.mediaStream.getVideoTracks().length)
|
|
return Promise.reject(new u.ConferenceError("options.audio/video is inconsistent with tracks presented in the MediaStream."));
|
|
if (!(!1 !== t.audio && null !== t.audio || !1 !== t.video && null !== t.video))
|
|
return Promise.reject(new u.ConferenceError("Cannot publish a stream without audio and video."));
|
|
if ("object" === p(t.audio)) {
|
|
if (!Array.isArray(t.audio))
|
|
return Promise.reject(new TypeError("options.audio should be a boolean or an array."));
|
|
var a = !0
|
|
, s = !1
|
|
, c = void 0;
|
|
try {
|
|
for (var l, f = t.audio[Symbol.iterator](); !(a = (l = f.next()).done); a = !0) {
|
|
var h = l.value;
|
|
if (!h.codec || "string" != typeof h.codec.name || void 0 !== h.maxBitrate && "number" != typeof h.maxBitrate)
|
|
return Promise.reject(new TypeError("options.audio has incorrect parameters."))
|
|
}
|
|
} catch (e) {
|
|
s = !0,
|
|
c = e
|
|
} finally {
|
|
try {
|
|
a || null == f.return || f.return()
|
|
} finally {
|
|
if (s)
|
|
throw c
|
|
}
|
|
}
|
|
}
|
|
if ("object" === p(t.video) && !Array.isArray(t.video))
|
|
return Promise.reject(new TypeError("options.video should be a boolean or an array."));
|
|
if (this._isOwtEncodingParameters(t.video)) {
|
|
var v = !0
|
|
, m = !1
|
|
, _ = void 0;
|
|
try {
|
|
for (var g, b = t.video[Symbol.iterator](); !(v = (g = b.next()).done); v = !0) {
|
|
var y = g.value;
|
|
if (!y.codec || "string" != typeof y.codec.name || void 0 !== y.maxBitrate && "number" != typeof y.maxBitrate || void 0 !== y.codec.profile && "string" != typeof y.codec.profile)
|
|
return Promise.reject(new TypeError("options.video has incorrect parameters."))
|
|
}
|
|
} catch (e) {
|
|
m = !0,
|
|
_ = e
|
|
} finally {
|
|
try {
|
|
v || null == b.return || b.return()
|
|
} finally {
|
|
if (m)
|
|
throw _
|
|
}
|
|
}
|
|
}
|
|
this._options = t;
|
|
var S = {};
|
|
if (this._createPeerConnection(),
|
|
e.mediaStream.getAudioTracks().length > 0 && !1 !== t.audio && null !== t.audio) {
|
|
if (e.mediaStream.getAudioTracks().length > 1 && i.default.warning("Publishing a stream with multiple audio tracks is not fully supported."),
|
|
"boolean" != typeof t.audio && "object" !== p(t.audio))
|
|
return Promise.reject(new u.ConferenceError("Type of audio options should be boolean or an object."));
|
|
S.audio = {},
|
|
S.audio.source = e.source.audio
|
|
} else
|
|
S.audio = !1;
|
|
if (e.mediaStream.getVideoTracks().length > 0 && !1 !== t.video && null !== t.video) {
|
|
e.mediaStream.getVideoTracks().length > 1 && i.default.warning("Publishing a stream with multiple video tracks is not fully supported."),
|
|
S.video = {},
|
|
S.video.source = e.source.video;
|
|
var P = e.mediaStream.getVideoTracks()[0].getSettings();
|
|
S.video.parameters = {
|
|
resolution: {
|
|
width: P.width,
|
|
height: P.height
|
|
},
|
|
framerate: P.frameRate
|
|
}
|
|
} else
|
|
S.video = !1;
|
|
return this._publishedStream = e,
|
|
this._signaling.sendSignalingMessage("publish", {
|
|
media: S,
|
|
attributes: e.attributes
|
|
}).then(function (i) {
|
|
var a = new o.MessageEvent("id", {
|
|
message: i.id,
|
|
origin: r._remoteId
|
|
});
|
|
r.dispatchEvent(a),
|
|
r._internalId = i.id;
|
|
var s = {};
|
|
if ("function" == typeof r._pc.addTransceiver) {
|
|
var c = Promise.resolve();
|
|
if (S.audio && e.mediaStream.getAudioTracks().length > 0) {
|
|
var u = {
|
|
direction: "sendonly"
|
|
};
|
|
r._isRtpEncodingParameters(t.audio) && (u.sendEncodings = t.audio);
|
|
var l = r._pc.addTransceiver(e.mediaStream.getAudioTracks()[0], u);
|
|
if (d.isFirefox()) {
|
|
var f = l.sender.getParameters();
|
|
f.encodings = u.sendEncodings,
|
|
c = l.sender.setParameters(f)
|
|
}
|
|
}
|
|
if (S.video && e.mediaStream.getVideoTracks().length > 0) {
|
|
var p = {
|
|
direction: "sendonly"
|
|
};
|
|
r._isRtpEncodingParameters(t.video) && (p.sendEncodings = t.video,
|
|
r._videoCodecs = n);
|
|
var h = r._pc.addTransceiver(e.mediaStream.getVideoTracks()[0], p);
|
|
if (d.isFirefox()) {
|
|
var v = h.sender.getParameters();
|
|
v.encodings = p.sendEncodings,
|
|
c = c.then(function () {
|
|
return h.sender.setParameters(v)
|
|
})
|
|
}
|
|
}
|
|
return c.then(function () {
|
|
return s
|
|
})
|
|
}
|
|
if (S.audio && e.mediaStream.getAudioTracks().length > 0) {
|
|
var m = !0
|
|
, _ = !1
|
|
, g = void 0;
|
|
try {
|
|
for (var b, y = e.mediaStream.getAudioTracks()[Symbol.iterator](); !(m = (b = y.next()).done); m = !0) {
|
|
var P = b.value;
|
|
r._pc.addTrack(P, e.mediaStream)
|
|
}
|
|
} catch (e) {
|
|
_ = !0,
|
|
g = e
|
|
} finally {
|
|
try {
|
|
m || null == y.return || y.return()
|
|
} finally {
|
|
if (_)
|
|
throw g
|
|
}
|
|
}
|
|
}
|
|
if (S.video && e.mediaStream.getVideoTracks().length > 0) {
|
|
var w = !0
|
|
, O = !1
|
|
, E = void 0;
|
|
try {
|
|
for (var j, C = e.mediaStream.getVideoTracks()[Symbol.iterator](); !(w = (j = C.next()).done); w = !0) {
|
|
var T = j.value;
|
|
r._pc.addTrack(T, e.mediaStream)
|
|
}
|
|
} catch (e) {
|
|
O = !0,
|
|
E = e
|
|
} finally {
|
|
try {
|
|
w || null == C.return || C.return()
|
|
} finally {
|
|
if (O)
|
|
throw E
|
|
}
|
|
}
|
|
}
|
|
return s.offerToReceiveAudio = !1,
|
|
s.offerToReceiveVideo = !1,
|
|
s
|
|
}).then(function (e) {
|
|
var n;
|
|
r._pc.createOffer(e).then(function (e) {
|
|
return t && (e.sdp = r._setRtpReceiverOptions(e.sdp, t)),
|
|
e
|
|
}).then(function (e) {
|
|
return n = e,
|
|
r._pc.setLocalDescription(e)
|
|
}).then(function () {
|
|
r._signaling.sendSignalingMessage("soac", {
|
|
id: r._internalId,
|
|
signaling: n
|
|
})
|
|
}).catch(function (e) {
|
|
i.default.error("Failed to create offer or set SDP. Message: " + e.message),
|
|
r._unpublish(),
|
|
r._rejectPromise(e),
|
|
r._fireEndedEventOnPublicationOrSubscription()
|
|
})
|
|
}).catch(function (e) {
|
|
r._unpublish(),
|
|
r._rejectPromise(e),
|
|
r._fireEndedEventOnPublicationOrSubscription()
|
|
}),
|
|
new Promise(function (e, t) {
|
|
r._publishPromise = {
|
|
resolve: e,
|
|
reject: t
|
|
}
|
|
}
|
|
)
|
|
}
|
|
}, {
|
|
key: "subscribe",
|
|
value: function (e, t) {
|
|
var n = this;
|
|
if (void 0 === t && (t = {
|
|
audio: !!e.settings.audio,
|
|
video: !!e.settings.video
|
|
}),
|
|
"object" !== p(t))
|
|
return Promise.reject(new TypeError("Options should be an object."));
|
|
if (void 0 === t.audio && (t.audio = !!e.settings.audio),
|
|
void 0 === t.video && (t.video = !!e.settings.video),
|
|
void 0 !== t.audio && "object" !== p(t.audio) && "boolean" != typeof t.audio && null !== t.audio || void 0 !== t.video && "object" !== p(t.video) && "boolean" != typeof t.video && null !== t.video)
|
|
return Promise.reject(new TypeError("Invalid options type."));
|
|
if (t.audio && !e.settings.audio || t.video && !e.settings.video)
|
|
return Promise.reject(new u.ConferenceError("options.audio/video cannot be true or an object if there is no audio/video track in remote stream."));
|
|
if (!1 === t.audio && !1 === t.video)
|
|
return Promise.reject(new u.ConferenceError("Cannot subscribe a stream without audio and video."));
|
|
this._options = t;
|
|
var r = {};
|
|
if (t.audio) {
|
|
if ("object" === p(t.audio) && Array.isArray(t.audio.codecs) && 0 === t.audio.codecs.length)
|
|
return Promise.reject(new TypeError("Audio codec cannot be an empty array."));
|
|
r.audio = {},
|
|
r.audio.from = e.id
|
|
} else
|
|
r.audio = !1;
|
|
if (t.video) {
|
|
if ("object" === p(t.video) && Array.isArray(t.video.codecs) && 0 === t.video.codecs.length)
|
|
return Promise.reject(new TypeError("Video codec cannot be an empty array."));
|
|
r.video = {},
|
|
r.video.from = e.id,
|
|
(t.video.resolution || t.video.frameRate || t.video.bitrateMultiplier && 1 !== t.video.bitrateMultiplier || t.video.keyFrameInterval) && (r.video.parameters = {
|
|
resolution: t.video.resolution,
|
|
framerate: t.video.frameRate,
|
|
bitrate: t.video.bitrateMultiplier ? "x" + t.video.bitrateMultiplier.toString() : void 0,
|
|
keyFrameInterval: t.video.keyFrameInterval
|
|
}),
|
|
t.video.rid && (r.video.simulcastRid = t.video.rid,
|
|
delete r.video.parameters,
|
|
t.video = !0)
|
|
} else
|
|
r.video = !1;
|
|
return this._subscribedStream = e,
|
|
this._signaling.sendSignalingMessage("subscribe", {
|
|
media: r
|
|
}).then(function (e) {
|
|
var a = new o.MessageEvent("id", {
|
|
message: e.id,
|
|
origin: n._remoteId
|
|
});
|
|
n.dispatchEvent(a),
|
|
n._internalId = e.id,
|
|
n._createPeerConnection();
|
|
var s = {};
|
|
"function" == typeof n._pc.addTransceiver ? (r.audio && n._pc.addTransceiver("audio", {
|
|
direction: "recvonly"
|
|
}),
|
|
r.video && n._pc.addTransceiver("video", {
|
|
direction: "recvonly"
|
|
})) : (s.offerToReceiveAudio = !!t.audio,
|
|
s.offerToReceiveVideo = !!t.video),
|
|
n._pc.createOffer(s).then(function (e) {
|
|
t && (e.sdp = n._setRtpReceiverOptions(e.sdp, t)),
|
|
n._pc.setLocalDescription(e).then(function () {
|
|
n._signaling.sendSignalingMessage("soac", {
|
|
id: n._internalId,
|
|
signaling: e
|
|
})
|
|
}, function (e) {
|
|
i.default.error("Set local description failed. Message: " + JSON.stringify(e))
|
|
})
|
|
}, function (e) {
|
|
i.default.error("Create offer failed. Error info: " + JSON.stringify(e))
|
|
}).catch(function (e) {
|
|
i.default.error("Failed to create offer or set SDP. Message: " + e.message),
|
|
n._unsubscribe(),
|
|
n._rejectPromise(e),
|
|
n._fireEndedEventOnPublicationOrSubscription()
|
|
})
|
|
}).catch(function (e) {
|
|
n._unsubscribe(),
|
|
n._rejectPromise(e),
|
|
n._fireEndedEventOnPublicationOrSubscription()
|
|
}),
|
|
new Promise(function (e, t) {
|
|
n._subscribePromise = {
|
|
resolve: e,
|
|
reject: t
|
|
}
|
|
}
|
|
)
|
|
}
|
|
}, {
|
|
key: "_unpublish",
|
|
value: function () {
|
|
this._stopped || (this._stopped = !0,
|
|
this._signaling.sendSignalingMessage("unpublish", {
|
|
id: this._internalId
|
|
}).catch(function (e) {
|
|
i.default.warning("MCU returns negative ack for unpublishing, " + e)
|
|
}),
|
|
this._pc && "closed" !== this._pc.signalingState && this._pc.close())
|
|
}
|
|
}, {
|
|
key: "_unsubscribe",
|
|
value: function () {
|
|
this._stopped || (this._stopped = !0,
|
|
this._signaling.sendSignalingMessage("unsubscribe", {
|
|
id: this._internalId
|
|
}).catch(function (e) {
|
|
i.default.warning("MCU returns negative ack for unsubscribing, " + e)
|
|
}),
|
|
this._pc && "closed" !== this._pc.signalingState && this._pc.close())
|
|
}
|
|
}, {
|
|
key: "_muteOrUnmute",
|
|
value: function (e, t, n) {
|
|
var r = this
|
|
, i = t ? "stream-control" : "subscription-control"
|
|
, a = e ? "pause" : "play";
|
|
return this._signaling.sendSignalingMessage(i, {
|
|
id: this._internalId,
|
|
operation: a,
|
|
data: n
|
|
}).then(function () {
|
|
if (!t) {
|
|
var i = e ? "mute" : "unmute";
|
|
r._subscription.dispatchEvent(new o.MuteEvent(i, {
|
|
kind: n
|
|
}))
|
|
}
|
|
})
|
|
}
|
|
}, {
|
|
key: "_applyOptions",
|
|
value: function (e) {
|
|
if ("object" !== p(e) || "object" !== p(e.video))
|
|
return Promise.reject(new u.ConferenceError("Options should be an object."));
|
|
var t = {};
|
|
return t.resolution = e.video.resolution,
|
|
t.framerate = e.video.frameRate,
|
|
t.bitrate = e.video.bitrateMultiplier ? "x" + e.video.bitrateMultiplier.toString() : void 0,
|
|
t.keyFrameInterval = e.video.keyFrameInterval,
|
|
this._signaling.sendSignalingMessage("subscription-control", {
|
|
id: this._internalId,
|
|
operation: "update",
|
|
data: {
|
|
video: {
|
|
parameters: t
|
|
}
|
|
}
|
|
}).then()
|
|
}
|
|
}, {
|
|
key: "_onRemoteStreamAdded",
|
|
value: function (e) {
|
|
i.default.debug("Remote stream added."),
|
|
this._subscribedStream ? this._subscribedStream.mediaStream = e.streams[0] : i.default.warning("Received remote stream without subscription.")
|
|
}
|
|
}, {
|
|
key: "_onLocalIceCandidate",
|
|
value: function (e) {
|
|
e.candidate ? "stable" !== this._pc.signalingState ? this._pendingCandidates.push(e.candidate) : this._sendCandidate(e.candidate) : i.default.debug("Empty candidate.")
|
|
}
|
|
}, {
|
|
key: "_fireEndedEventOnPublicationOrSubscription",
|
|
value: function () {
|
|
if (!this._ended) {
|
|
this._ended = !0;
|
|
var e = new o.OwtEvent("ended");
|
|
this._publication ? (this._publication.dispatchEvent(e),
|
|
this._publication.stop()) : this._subscription && (this._subscription.dispatchEvent(e),
|
|
this._subscription.stop())
|
|
}
|
|
}
|
|
}, {
|
|
key: "_rejectPromise",
|
|
value: function (e) {
|
|
if (!e)
|
|
new u.ConferenceError("Connection failed or closed.");
|
|
this._publishPromise ? (this._publishPromise.reject(e),
|
|
this._publishPromise = void 0) : this._subscribePromise && (this._subscribePromise.reject(e),
|
|
this._subscribePromise = void 0)
|
|
}
|
|
}, {
|
|
key: "_onIceConnectionStateChange",
|
|
value: function (e) {
|
|
e && e.currentTarget && (i.default.debug("ICE connection state changed to " + e.currentTarget.iceConnectionState),
|
|
"closed" !== e.currentTarget.iceConnectionState && "failed" !== e.currentTarget.iceConnectionState || ("failed" === e.currentTarget.iceConnectionState ? this._handleError("connection failed.") : this._fireEndedEventOnPublicationOrSubscription()))
|
|
}
|
|
}, {
|
|
key: "_onConnectionStateChange",
|
|
value: function (e) {
|
|
this._handleError("pcState-" + this._pc.connectionState);
|
|
"closed" !== this._pc.connectionState && "failed" !== this._pc.connectionState || ("failed" === this._pc.connectionState ? this._handleError("connection failed.") : this._fireEndedEventOnPublicationOrSubscription())
|
|
}
|
|
}, {
|
|
key: "_sendCandidate",
|
|
value: function (e) {
|
|
this._signaling.sendSignalingMessage("soac", {
|
|
id: this._internalId,
|
|
signaling: {
|
|
type: "candidate",
|
|
candidate: {
|
|
candidate: "a=" + e.candidate,
|
|
sdpMid: e.sdpMid,
|
|
sdpMLineIndex: e.sdpMLineIndex
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}, {
|
|
key: "_createPeerConnection",
|
|
value: function () {
|
|
var e = this
|
|
, t = this._config.rtcConfiguration || {};
|
|
d.isChrome() && (t.sdpSemantics = "unified-plan"),
|
|
this._pc = new RTCPeerConnection(t),
|
|
this._pc.onicecandidate = function (t) {
|
|
e._onLocalIceCandidate.apply(e, [t])
|
|
}
|
|
,
|
|
this._pc.ontrack = function (t) {
|
|
e._onRemoteStreamAdded.apply(e, [t])
|
|
}
|
|
,
|
|
this._pc.oniceconnectionstatechange = function (t) {
|
|
e._onIceConnectionStateChange.apply(e, [t])
|
|
}
|
|
,
|
|
this._pc.onconnectionstatechange = function (t) {
|
|
e._onConnectionStateChange.apply(e, [t])
|
|
}
|
|
}
|
|
}, {
|
|
key: "_getStats",
|
|
value: function () {
|
|
return this._pc ? this._pc.getStats() : Promise.reject(new u.ConferenceError("PeerConnection is not available."))
|
|
}
|
|
}, {
|
|
key: "_readyHandler",
|
|
value: function () {
|
|
var e = this;
|
|
this._subscribePromise ? (this._subscription = new c.Subscription(this._internalId, function () {
|
|
e._unsubscribe()
|
|
}
|
|
, function () {
|
|
return e._getStats()
|
|
}
|
|
, function (t) {
|
|
return e._muteOrUnmute(!0, !1, t)
|
|
}
|
|
, function (t) {
|
|
return e._muteOrUnmute(!1, !1, t)
|
|
}
|
|
, function (t) {
|
|
return e._applyOptions(t)
|
|
}
|
|
),
|
|
this._subscribedStream.addEventListener("ended", function () {
|
|
e._subscription.dispatchEvent("ended", new o.OwtEvent("ended"))
|
|
}),
|
|
this._subscribePromise.resolve(this._subscription)) : this._publishPromise && (this._publication = new s.Publication(this._internalId, function () {
|
|
return e._unpublish(),
|
|
Promise.resolve()
|
|
}
|
|
, function () {
|
|
return e._getStats()
|
|
}
|
|
, function (t) {
|
|
return e._muteOrUnmute(!0, !0, t)
|
|
}
|
|
, function (t) {
|
|
return e._muteOrUnmute(!1, !0, t)
|
|
}
|
|
),
|
|
this._publishPromise.resolve(this._publication)),
|
|
this._publishPromise = null,
|
|
this._subscribePromise = null
|
|
}
|
|
}, {
|
|
key: "_sdpHandler",
|
|
value: function (e) {
|
|
var t = this;
|
|
"answer" === e.type && ((this._publication || this._publishPromise) && this._options && (e.sdp = this._setRtpSenderOptions(e.sdp, this._options)),
|
|
this._pc.setRemoteDescription(e).then(function () {
|
|
if (t._pendingCandidates.length > 0) {
|
|
var e = !0
|
|
, n = !1
|
|
, r = void 0;
|
|
try {
|
|
for (var i, o = t._pendingCandidates[Symbol.iterator](); !(e = (i = o.next()).done); e = !0) {
|
|
var a = i.value;
|
|
t._sendCandidate(a)
|
|
}
|
|
} catch (e) {
|
|
n = !0,
|
|
r = e
|
|
} finally {
|
|
try {
|
|
e || null == o.return || o.return()
|
|
} finally {
|
|
if (n)
|
|
throw r
|
|
}
|
|
}
|
|
}
|
|
}, function (e) {
|
|
i.default.error("Set remote description failed: " + e),
|
|
t._rejectPromise(e),
|
|
t._fireEndedEventOnPublicationOrSubscription()
|
|
}))
|
|
}
|
|
}, {
|
|
key: "_errorHandler",
|
|
value: function (e) {
|
|
return this._handleError(e)
|
|
}
|
|
}, {
|
|
key: "_handleError",
|
|
value: function (e) {
|
|
if (e.startsWith && e.startsWith('pcState-')) {
|
|
if (!this._ended) {
|
|
var n = this._publication || this._subscription;
|
|
if (n) {
|
|
var r = new o.ErrorEvent("pcState", {
|
|
error: new Error(e)
|
|
});
|
|
n.dispatchEvent(r);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
var t = new u.ConferenceError(e);
|
|
if (this._publishPromise || this._subscribePromise)
|
|
return this._rejectPromise(t);
|
|
if (!this._ended) {
|
|
var n = this._publication || this._subscription;
|
|
if (n) {
|
|
var r = new o.ErrorEvent("error", {
|
|
error: t
|
|
});
|
|
n.dispatchEvent(r),
|
|
this._fireEndedEventOnPublicationOrSubscription()
|
|
} else
|
|
i.default.warning("Neither publication nor subscription is available.")
|
|
}
|
|
}
|
|
}, {
|
|
key: "_setCodecOrder",
|
|
value: function (e, t) {
|
|
if (this._publication || this._publishPromise) {
|
|
if (t.audio) {
|
|
var n = Array.from(t.audio, function (e) {
|
|
return e.codec.name
|
|
});
|
|
e = l.reorderCodecs(e, "audio", n)
|
|
}
|
|
if (t.video) {
|
|
var r = Array.from(t.video, function (e) {
|
|
return e.codec.name
|
|
});
|
|
e = l.reorderCodecs(e, "video", r)
|
|
}
|
|
} else {
|
|
if (t.audio && t.audio.codecs) {
|
|
var i = Array.from(t.audio.codecs, function (e) {
|
|
return e.name
|
|
});
|
|
e = l.reorderCodecs(e, "audio", i)
|
|
}
|
|
if (t.video && t.video.codecs) {
|
|
var o = Array.from(t.video.codecs, function (e) {
|
|
return e.name
|
|
});
|
|
e = l.reorderCodecs(e, "video", o)
|
|
}
|
|
}
|
|
return e
|
|
}
|
|
}, {
|
|
key: "_setMaxBitrate",
|
|
value: function (e, t) {
|
|
return "object" === p(t.audio) && (e = l.setMaxBitrate(e, t.audio)),
|
|
"object" === p(t.video) && (e = l.setMaxBitrate(e, t.video)),
|
|
e
|
|
}
|
|
}, {
|
|
key: "_setRtpSenderOptions",
|
|
value: function (e, t) {
|
|
return this._isRtpEncodingParameters(t.audio) || this._isRtpEncodingParameters(t.video) ? e : e = this._setMaxBitrate(e, t)
|
|
}
|
|
}, {
|
|
key: "_setRtpReceiverOptions",
|
|
value: function (e, t) {
|
|
return this._isRtpEncodingParameters(t.video) && d.isSafari() && t.video.length > 1 && (e = l.addLegacySimulcast(e, "video", t.video.length)),
|
|
this._isRtpEncodingParameters(t.video) && this._videoCodecs ? e = l.reorderCodecs(e, "video", this._videoCodecs) : this._isRtpEncodingParameters(t.audio) || this._isRtpEncodingParameters(t.video) ? e : e = this._setCodecOrder(e, t)
|
|
}
|
|
}, {
|
|
key: "_onStreamEvent",
|
|
value: function (e) {
|
|
var t, n;
|
|
(this._publication && e.id === this._publication.id ? t = this._publication : this._subscribedStream && e.id === this._subscribedStream.id && (t = this._subscription),
|
|
t) && ("audio.status" === e.data.field ? n = a.TrackKind.AUDIO : "video.status" === e.data.field ? n = a.TrackKind.VIDEO : i.default.warning("Invalid data field for stream update info."),
|
|
"active" === e.data.value ? t.dispatchEvent(new o.MuteEvent("unmute", {
|
|
kind: n
|
|
})) : "inactive" === e.data.value ? t.dispatchEvent(new o.MuteEvent("mute", {
|
|
kind: n
|
|
})) : i.default.warning("Invalid data value for stream update info."))
|
|
}
|
|
}, {
|
|
key: "_isRtpEncodingParameters",
|
|
value: function (e) {
|
|
if (!Array.isArray(e))
|
|
return !1;
|
|
var t = e[0];
|
|
return t.codecPayloadType || t.dtx || t.active || t.ptime || t.maxFramerate || t.scaleResolutionDownBy || t.rid
|
|
}
|
|
}, {
|
|
key: "_isOwtEncodingParameters",
|
|
value: function (e) {
|
|
return !!Array.isArray(e) && !!e[0].codec
|
|
}
|
|
}]) && h(n.prototype, r),
|
|
f && h(n, f),
|
|
t
|
|
}();
|
|
n.ConferencePeerConnectionChannel = g
|
|
}
|
|
, {
|
|
"../base/event.js": 3,
|
|
"../base/logger.js": 5,
|
|
"../base/mediaformat.js": 6,
|
|
"../base/publication.js": 8,
|
|
"../base/sdputils.js": 9,
|
|
"../base/utils.js": 11,
|
|
"./error.js": 14,
|
|
"./subscription.js": 21
|
|
}],
|
|
13: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.ConferenceClient = void 0;
|
|
var r, i = m(e("../base/event.js")), o = e("./signaling.js"), a = (r = e("../base/logger.js")) && r.__esModule ? r : {
|
|
default: r
|
|
}, s = e("../base/base64.js"), c = e("./error.js"), u = m(e("../base/utils.js")), d = m(e("../base/stream.js")), l = e("./participant.js"), f = e("./info.js"), p = e("./channel.js"), h = e("./mixedstream.js"), v = m(e("./streamutils.js"));
|
|
function m(e) {
|
|
if (e && e.__esModule)
|
|
return e;
|
|
var t = {};
|
|
if (null != e)
|
|
for (var n in e)
|
|
if (Object.prototype.hasOwnProperty.call(e, n)) {
|
|
var r = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(e, n) : {};
|
|
r.get || r.set ? Object.defineProperty(t, n, r) : t[n] = e[n]
|
|
}
|
|
return t.default = e,
|
|
t
|
|
}
|
|
var _ = 1
|
|
, g = 2
|
|
, b = 3
|
|
, y = function (e, t) {
|
|
var n = new i.OwtEvent(e, t);
|
|
return n.participant = t.participant,
|
|
n
|
|
};
|
|
n.ConferenceClient = function (e, t) {
|
|
Object.setPrototypeOf(this, new i.EventDispatcher),
|
|
e = e || {};
|
|
var n, r, m = this, S = _, P = t || new o.SioSignaling, w = new Map, O = new Map, E = new Map, j = new Map;
|
|
function C(e, t) {
|
|
if ("soac" === e || "progress" === e) {
|
|
if (!j.has(t.id))
|
|
return void a.default.warning("Cannot find a channel for incoming data.");
|
|
j.get(t.id).onMessage(e, t)
|
|
} else
|
|
"stream" === e ? "add" === t.status ? function (e) {
|
|
var t = T(e);
|
|
w.set(t.id, t);
|
|
var n = new d.StreamEvent("streamadded", {
|
|
stream: t
|
|
});
|
|
m.dispatchEvent(n)
|
|
}(t.data) : "remove" === t.status ? function (e) {
|
|
if (w.has(e.id)) {
|
|
var t = w.get(e.id)
|
|
, n = new i.OwtEvent("ended");
|
|
w.delete(t.id),
|
|
t.dispatchEvent(n)
|
|
} else
|
|
a.default.warning("Cannot find specific remote stream.")
|
|
}(t) : "update" === t.status && ("audio.status" === t.data.field || "video.status" === t.data.field ? j.forEach(function (n) {
|
|
n.onMessage(e, t)
|
|
}) : "activeInput" === t.data.field ? function (e) {
|
|
if (w.has(e.id)) {
|
|
var t = w.get(e.id)
|
|
, n = new h.ActiveAudioInputChangeEvent("activeaudioinputchange", {
|
|
activeAudioInputStreamId: e.data.value
|
|
});
|
|
t.dispatchEvent(n)
|
|
} else
|
|
a.default.warning("Cannot find specific remote stream.")
|
|
}(t) : "video.layout" === t.data.field ? function (e) {
|
|
if (w.has(e.id)) {
|
|
var t = w.get(e.id)
|
|
, n = new h.LayoutChangeEvent("layoutchange", {
|
|
layout: e.data.value
|
|
});
|
|
t.dispatchEvent(n)
|
|
} else
|
|
a.default.warning("Cannot find specific remote stream.")
|
|
}(t) : "." === t.data.field ? function (e) {
|
|
if (w.has(e.id)) {
|
|
var t = w.get(e.id);
|
|
t.settings = v.convertToPublicationSettings(e.media),
|
|
t.extraCapabilities = v.convertToSubscriptionCapabilities(e.media);
|
|
var n = new i.OwtEvent("updated");
|
|
t.dispatchEvent(n)
|
|
} else
|
|
a.default.warning("Cannot find specific remote stream.")
|
|
}(t.data.value) : a.default.warning("Unknown stream event from MCU.")) : "text" === e ? function (e) {
|
|
var t = new i.MessageEvent("messagereceived", {
|
|
message: e.message,
|
|
origin: e.from,
|
|
to: e.to
|
|
});
|
|
m.dispatchEvent(t)
|
|
}(t) : "participant" === e && function (e) {
|
|
if ("join" === e.action) {
|
|
e = e.data;
|
|
var t = new l.Participant(e.id, e.role, e.user);
|
|
O.set(e.id, t);
|
|
var n = new y("participantjoined", {
|
|
participant: t
|
|
});
|
|
m.dispatchEvent(n)
|
|
} else if ("leave" === e.action) {
|
|
var r = e.data;
|
|
if (!O.has(r))
|
|
return void a.default.warning("Received leave message from MCU for an unknown participant.");
|
|
var o = O.get(r);
|
|
O.delete(r),
|
|
o.dispatchEvent(new i.OwtEvent("left"))
|
|
}
|
|
}(t)
|
|
}
|
|
function T(e) {
|
|
if ("mixed" === e.type)
|
|
return new h.RemoteMixedStream(e);
|
|
var t, n;
|
|
e.media.audio && (t = e.media.audio.source),
|
|
e.media.video && (n = e.media.video.source);
|
|
var r = new d.RemoteStream(e.id, e.info.owner, void 0, new d.StreamSourceInfo(t, n), e.info.attributes);
|
|
return r.settings = v.convertToPublicationSettings(e.media),
|
|
r.extraCapabilities = v.convertToSubscriptionCapabilities(e.media),
|
|
r
|
|
}
|
|
function k(e, t) {
|
|
return P.send(e, t)
|
|
}
|
|
function I() {
|
|
var t = Object.create(i.EventDispatcher);
|
|
t.sendSignalingMessage = k;
|
|
var n = new p.ConferencePeerConnectionChannel(e, t);
|
|
return n.addEventListener("id", function (e) {
|
|
j.set(e.message, n)
|
|
}),
|
|
n
|
|
}
|
|
function R() {
|
|
O.clear(),
|
|
w.clear()
|
|
}
|
|
P.addEventListener("data", function (e) {
|
|
C(e.message.notification, e.message.data)
|
|
}),
|
|
P.addEventListener("disconnect", function () {
|
|
R(),
|
|
S = _,
|
|
m.dispatchEvent(new i.OwtEvent("serverdisconnected"))
|
|
}),
|
|
Object.defineProperty(this, "info", {
|
|
configurable: !1,
|
|
get: function () {
|
|
return r ? new f.ConferenceInfo(r.id, Array.from(O, function (e) {
|
|
return e[1]
|
|
}), Array.from(w, function (e) {
|
|
return e[1]
|
|
}), n) : null
|
|
}
|
|
}),
|
|
this.join = function (e) {
|
|
return new Promise(function (t, i) {
|
|
var o = JSON.parse(s.Base64.decodeBase64(e))
|
|
, a = !0 === o.secure
|
|
, d = o.host;
|
|
if ("string" == typeof d)
|
|
if (-1 === d.indexOf("http") && (d = a ? "https://" + d : "http://" + d),
|
|
S === _) {
|
|
S = g;
|
|
var p = {
|
|
token: e,
|
|
userAgent: u.sysInfo(),
|
|
protocol: "1.1"
|
|
};
|
|
P.connect(d, a, p).then(function (e) {
|
|
if (S = b,
|
|
void 0 !== (r = e.room).streams) {
|
|
var i = !0
|
|
, o = !1
|
|
, a = void 0;
|
|
try {
|
|
for (var s, c = r.streams[Symbol.iterator](); !(i = (s = c.next()).done); i = !0) {
|
|
var u = s.value;
|
|
"mixed" === u.type && (u.viewport = u.info.label),
|
|
w.set(u.id, T(u))
|
|
}
|
|
} catch (e) {
|
|
o = !0,
|
|
a = e
|
|
} finally {
|
|
try {
|
|
i || null == c.return || c.return()
|
|
} finally {
|
|
if (o)
|
|
throw a
|
|
}
|
|
}
|
|
}
|
|
if (e.room && void 0 !== e.room.participants) {
|
|
var d = !0
|
|
, p = !1
|
|
, h = void 0;
|
|
try {
|
|
for (var v, m = e.room.participants[Symbol.iterator](); !(d = (v = m.next()).done); d = !0) {
|
|
var _ = v.value;
|
|
O.set(_.id, new l.Participant(_.id, _.role, _.user)),
|
|
_.id === e.id && (n = O.get(_.id))
|
|
}
|
|
} catch (e) {
|
|
p = !0,
|
|
h = e
|
|
} finally {
|
|
try {
|
|
d || null == m.return || m.return()
|
|
} finally {
|
|
if (p)
|
|
throw h
|
|
}
|
|
}
|
|
}
|
|
t(new f.ConferenceInfo(e.room.id, Array.from(O.values()), Array.from(w.values()), n))
|
|
}, function (e) {
|
|
S = _,
|
|
i(new c.ConferenceError(e))
|
|
})
|
|
} else
|
|
i(new c.ConferenceError("connection state invalid"));
|
|
else
|
|
i(new c.ConferenceError("Invalid host."))
|
|
}
|
|
)
|
|
}
|
|
,
|
|
this.publish = function (e, t, n) {
|
|
return e instanceof d.LocalStream ? E.has(e.mediaStream.id) ? Promise.reject(new c.ConferenceError("Cannot publish a published stream.")) : I().publish(e, t, n) : Promise.reject(new c.ConferenceError("Invalid stream."))
|
|
}
|
|
,
|
|
this.subscribe = function (e, t) {
|
|
return e instanceof d.RemoteStream ? I().subscribe(e, t) : Promise.reject(new c.ConferenceError("Invalid stream."))
|
|
}
|
|
,
|
|
this.send = function (e, t) {
|
|
return void 0 === t && (t = "all"),
|
|
k("text", {
|
|
to: t,
|
|
message: e
|
|
})
|
|
}
|
|
,
|
|
this.leave = function () {
|
|
return P.disconnect().then(function () {
|
|
R(),
|
|
S = _
|
|
})
|
|
}
|
|
}
|
|
}
|
|
, {
|
|
"../base/base64.js": 1,
|
|
"../base/event.js": 3,
|
|
"../base/logger.js": 5,
|
|
"../base/stream.js": 10,
|
|
"../base/utils.js": 11,
|
|
"./channel.js": 12,
|
|
"./error.js": 14,
|
|
"./info.js": 16,
|
|
"./mixedstream.js": 17,
|
|
"./participant.js": 18,
|
|
"./signaling.js": 19,
|
|
"./streamutils.js": 20
|
|
}],
|
|
14: [function (e, t, n) {
|
|
"use strict";
|
|
function r(e) {
|
|
return (r = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
|
|
return typeof e
|
|
}
|
|
: function (e) {
|
|
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
|
|
}
|
|
)(e)
|
|
}
|
|
function i(e, t) {
|
|
return !t || "object" !== r(t) && "function" != typeof t ? function (e) {
|
|
if (void 0 === e)
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return e
|
|
}(e) : t
|
|
}
|
|
function o(e) {
|
|
var t = "function" == typeof Map ? new Map : void 0;
|
|
return (o = function (e) {
|
|
if (null === e || (n = e,
|
|
-1 === Function.toString.call(n).indexOf("[native code]")))
|
|
return e;
|
|
var n;
|
|
if ("function" != typeof e)
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
if (void 0 !== t) {
|
|
if (t.has(e))
|
|
return t.get(e);
|
|
t.set(e, r)
|
|
}
|
|
function r() {
|
|
return a(e, arguments, c(this).constructor)
|
|
}
|
|
return r.prototype = Object.create(e.prototype, {
|
|
constructor: {
|
|
value: r,
|
|
enumerable: !1,
|
|
writable: !0,
|
|
configurable: !0
|
|
}
|
|
}),
|
|
s(r, e)
|
|
}
|
|
)(e)
|
|
}
|
|
function a(e, t, n) {
|
|
return (a = function () {
|
|
if ("undefined" == typeof Reflect || !Reflect.construct)
|
|
return !1;
|
|
if (Reflect.construct.sham)
|
|
return !1;
|
|
if ("function" == typeof Proxy)
|
|
return !0;
|
|
try {
|
|
return Date.prototype.toString.call(Reflect.construct(Date, [], function () { })),
|
|
!0
|
|
} catch (e) {
|
|
return !1
|
|
}
|
|
}() ? Reflect.construct : function (e, t, n) {
|
|
var r = [null];
|
|
r.push.apply(r, t);
|
|
var i = new (Function.bind.apply(e, r));
|
|
return n && s(i, n.prototype),
|
|
i
|
|
}
|
|
).apply(null, arguments)
|
|
}
|
|
function s(e, t) {
|
|
return (s = Object.setPrototypeOf || function (e, t) {
|
|
return e.__proto__ = t,
|
|
e
|
|
}
|
|
)(e, t)
|
|
}
|
|
function c(e) {
|
|
return (c = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
|
|
return e.__proto__ || Object.getPrototypeOf(e)
|
|
}
|
|
)(e)
|
|
}
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.ConferenceError = void 0;
|
|
var u = function (e) {
|
|
function t(e) {
|
|
return function (e, t) {
|
|
if (!(e instanceof t))
|
|
throw new TypeError("Cannot call a class as a function")
|
|
}(this, t),
|
|
i(this, c(t).call(this, e))
|
|
}
|
|
return function (e, t) {
|
|
if ("function" != typeof t && null !== t)
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
e.prototype = Object.create(t && t.prototype, {
|
|
constructor: {
|
|
value: e,
|
|
writable: !0,
|
|
configurable: !0
|
|
}
|
|
}),
|
|
t && s(e, t)
|
|
}(t, o(Error)),
|
|
t
|
|
}();
|
|
n.ConferenceError = u
|
|
}
|
|
, {}],
|
|
15: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
Object.defineProperty(n, "ConferenceClient", {
|
|
enumerable: !0,
|
|
get: function () {
|
|
return r.ConferenceClient
|
|
}
|
|
}),
|
|
Object.defineProperty(n, "SioSignaling", {
|
|
enumerable: !0,
|
|
get: function () {
|
|
return i.SioSignaling
|
|
}
|
|
});
|
|
var r = e("./client.js")
|
|
, i = e("./signaling.js")
|
|
}
|
|
, {
|
|
"./client.js": 13,
|
|
"./signaling.js": 19
|
|
}],
|
|
16: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.ConferenceInfo = void 0;
|
|
n.ConferenceInfo = function e(t, n, r, i) {
|
|
!function (e, t) {
|
|
if (!(e instanceof t))
|
|
throw new TypeError("Cannot call a class as a function")
|
|
}(this, e),
|
|
this.id = t,
|
|
this.participants = n,
|
|
this.remoteStreams = r,
|
|
this.self = i
|
|
}
|
|
}
|
|
, {}],
|
|
17: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.LayoutChangeEvent = n.ActiveAudioInputChangeEvent = n.RemoteMixedStream = void 0;
|
|
var r = a(e("../base/stream.js"))
|
|
, i = a(e("./streamutils.js"))
|
|
, o = e("../base/event.js");
|
|
function a(e) {
|
|
if (e && e.__esModule)
|
|
return e;
|
|
var t = {};
|
|
if (null != e)
|
|
for (var n in e)
|
|
if (Object.prototype.hasOwnProperty.call(e, n)) {
|
|
var r = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(e, n) : {};
|
|
r.get || r.set ? Object.defineProperty(t, n, r) : t[n] = e[n]
|
|
}
|
|
return t.default = e,
|
|
t
|
|
}
|
|
function s(e) {
|
|
return (s = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
|
|
return typeof e
|
|
}
|
|
: function (e) {
|
|
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
|
|
}
|
|
)(e)
|
|
}
|
|
function c(e, t) {
|
|
if (!(e instanceof t))
|
|
throw new TypeError("Cannot call a class as a function")
|
|
}
|
|
function u(e, t) {
|
|
return !t || "object" !== s(t) && "function" != typeof t ? function (e) {
|
|
if (void 0 === e)
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return e
|
|
}(e) : t
|
|
}
|
|
function d(e) {
|
|
return (d = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
|
|
return e.__proto__ || Object.getPrototypeOf(e)
|
|
}
|
|
)(e)
|
|
}
|
|
function l(e, t) {
|
|
if ("function" != typeof t && null !== t)
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
e.prototype = Object.create(t && t.prototype, {
|
|
constructor: {
|
|
value: e,
|
|
writable: !0,
|
|
configurable: !0
|
|
}
|
|
}),
|
|
t && f(e, t)
|
|
}
|
|
function f(e, t) {
|
|
return (f = Object.setPrototypeOf || function (e, t) {
|
|
return e.__proto__ = t,
|
|
e
|
|
}
|
|
)(e, t)
|
|
}
|
|
var p = function (e) {
|
|
function t(e) {
|
|
var n;
|
|
if (c(this, t),
|
|
"mixed" !== e.type)
|
|
throw new TypeError("Not a mixed stream");
|
|
return (n = u(this, d(t).call(this, e.id, void 0, void 0, new r.StreamSourceInfo("mixed", "mixed")))).settings = i.convertToPublicationSettings(e.media),
|
|
n.extraCapabilities = new i.convertToSubscriptionCapabilities(e.media),
|
|
n
|
|
}
|
|
return l(t, r.RemoteStream),
|
|
t
|
|
}();
|
|
n.RemoteMixedStream = p;
|
|
var h = function (e) {
|
|
function t(e, n) {
|
|
var r;
|
|
return c(this, t),
|
|
(r = u(this, d(t).call(this, e))).activeAudioInputStreamId = n.activeAudioInputStreamId,
|
|
r
|
|
}
|
|
return l(t, o.OwtEvent),
|
|
t
|
|
}();
|
|
n.ActiveAudioInputChangeEvent = h;
|
|
var v = function (e) {
|
|
function t(e, n) {
|
|
var r;
|
|
return c(this, t),
|
|
(r = u(this, d(t).call(this, e))).layout = n.layout,
|
|
r
|
|
}
|
|
return l(t, o.OwtEvent),
|
|
t
|
|
}();
|
|
n.LayoutChangeEvent = v
|
|
}
|
|
, {
|
|
"../base/event.js": 3,
|
|
"../base/stream.js": 10,
|
|
"./streamutils.js": 20
|
|
}],
|
|
18: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.Participant = void 0;
|
|
var r = function (e) {
|
|
if (e && e.__esModule)
|
|
return e;
|
|
var t = {};
|
|
if (null != e)
|
|
for (var n in e)
|
|
if (Object.prototype.hasOwnProperty.call(e, n)) {
|
|
var r = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(e, n) : {};
|
|
r.get || r.set ? Object.defineProperty(t, n, r) : t[n] = e[n]
|
|
}
|
|
return t.default = e,
|
|
t
|
|
}(e("../base/event.js"));
|
|
function i(e) {
|
|
return (i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
|
|
return typeof e
|
|
}
|
|
: function (e) {
|
|
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
|
|
}
|
|
)(e)
|
|
}
|
|
function o(e) {
|
|
return (o = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
|
|
return e.__proto__ || Object.getPrototypeOf(e)
|
|
}
|
|
)(e)
|
|
}
|
|
function a(e, t) {
|
|
return (a = Object.setPrototypeOf || function (e, t) {
|
|
return e.__proto__ = t,
|
|
e
|
|
}
|
|
)(e, t)
|
|
}
|
|
function s(e) {
|
|
if (void 0 === e)
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return e
|
|
}
|
|
var c = function (e) {
|
|
function t(e, n, r) {
|
|
var a, c, u;
|
|
return function (e, t) {
|
|
if (!(e instanceof t))
|
|
throw new TypeError("Cannot call a class as a function")
|
|
}(this, t),
|
|
c = this,
|
|
a = !(u = o(t).call(this)) || "object" !== i(u) && "function" != typeof u ? s(c) : u,
|
|
Object.defineProperty(s(s(a)), "id", {
|
|
configurable: !1,
|
|
writable: !1,
|
|
value: e
|
|
}),
|
|
Object.defineProperty(s(s(a)), "role", {
|
|
configurable: !1,
|
|
writable: !1,
|
|
value: n
|
|
}),
|
|
Object.defineProperty(s(s(a)), "userId", {
|
|
configurable: !1,
|
|
writable: !1,
|
|
value: r
|
|
}),
|
|
a
|
|
}
|
|
return function (e, t) {
|
|
if ("function" != typeof t && null !== t)
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
e.prototype = Object.create(t && t.prototype, {
|
|
constructor: {
|
|
value: e,
|
|
writable: !0,
|
|
configurable: !0
|
|
}
|
|
}),
|
|
t && a(e, t)
|
|
}(t, r.EventDispatcher),
|
|
t
|
|
}();
|
|
n.Participant = c
|
|
}
|
|
, {
|
|
"../base/event.js": 3
|
|
}],
|
|
19: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.SioSignaling = void 0;
|
|
var r, i = (r = e("../base/logger.js")) && r.__esModule ? r : {
|
|
default: r
|
|
}, o = function (e) {
|
|
if (e && e.__esModule)
|
|
return e;
|
|
var t = {};
|
|
if (null != e)
|
|
for (var n in e)
|
|
if (Object.prototype.hasOwnProperty.call(e, n)) {
|
|
var r = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(e, n) : {};
|
|
r.get || r.set ? Object.defineProperty(t, n, r) : t[n] = e[n]
|
|
}
|
|
return t.default = e,
|
|
t
|
|
}(e("../base/event.js")), a = e("./error.js"), s = e("../base/base64.js");
|
|
function c(e) {
|
|
return (c = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
|
|
return typeof e
|
|
}
|
|
: function (e) {
|
|
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
|
|
}
|
|
)(e)
|
|
}
|
|
function u(e, t) {
|
|
for (var n = 0; n < t.length; n++) {
|
|
var r = t[n];
|
|
r.enumerable = r.enumerable || !1,
|
|
r.configurable = !0,
|
|
"value" in r && (r.writable = !0),
|
|
Object.defineProperty(e, r.key, r)
|
|
}
|
|
}
|
|
function d(e, t) {
|
|
return !t || "object" !== c(t) && "function" != typeof t ? function (e) {
|
|
if (void 0 === e)
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return e
|
|
}(e) : t
|
|
}
|
|
function l(e) {
|
|
return (l = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
|
|
return e.__proto__ || Object.getPrototypeOf(e)
|
|
}
|
|
)(e)
|
|
}
|
|
function f(e, t) {
|
|
return (f = Object.setPrototypeOf || function (e, t) {
|
|
return e.__proto__ = t,
|
|
e
|
|
}
|
|
)(e, t)
|
|
}
|
|
function p(e, t, n, r) {
|
|
"ok" === e || "success" === e ? n(t) : "error" === e ? r(t) : i.default.error("MCU returns unknown ack.")
|
|
}
|
|
var h = function (e) {
|
|
function t() {
|
|
var e;
|
|
return function (e, t) {
|
|
if (!(e instanceof t))
|
|
throw new TypeError("Cannot call a class as a function")
|
|
}(this, t),
|
|
(e = d(this, l(t).call(this)))._socket = null,
|
|
e._loggedIn = !1,
|
|
e._reconnectTimes = 0,
|
|
e._reconnectionTicket = null,
|
|
e._refreshReconnectionTicket = null,
|
|
e
|
|
}
|
|
var n, r, c;
|
|
return function (e, t) {
|
|
if ("function" != typeof t && null !== t)
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
e.prototype = Object.create(t && t.prototype, {
|
|
constructor: {
|
|
value: e,
|
|
writable: !0,
|
|
configurable: !0
|
|
}
|
|
}),
|
|
t && f(e, t)
|
|
}(t, o.EventDispatcher),
|
|
n = t,
|
|
(r = [{
|
|
key: "connect",
|
|
value: function (e, t, n) {
|
|
var r = this;
|
|
return new Promise(function (t, i) {
|
|
var a = {
|
|
reconnection: !0,
|
|
reconnectionAttempts: 10,
|
|
"force new connection": !0
|
|
};
|
|
r._socket = io(e, a),
|
|
["participant", "text", "stream", "progress"].forEach(function (e) {
|
|
r._socket.on(e, function (t) {
|
|
r.dispatchEvent(new o.MessageEvent("data", {
|
|
message: {
|
|
notification: e,
|
|
data: t
|
|
}
|
|
}))
|
|
})
|
|
}),
|
|
r._socket.on("reconnecting", function () {
|
|
r._reconnectTimes++
|
|
}),
|
|
r._socket.on("reconnect_failed", function () {
|
|
r._reconnectTimes >= 10 && r.dispatchEvent(new o.OwtEvent("disconnect"))
|
|
}),
|
|
r._socket.on("connect_error", function (t) {
|
|
i("connect_error:".concat(e))
|
|
}),
|
|
r._socket.on("drop", function () {
|
|
r._reconnectTimes = 10
|
|
}),
|
|
r._socket.on("disconnect", function () {
|
|
r._clearReconnectionTask(),
|
|
r._reconnectTimes >= 10 && (r._loggedIn = !1,
|
|
r.dispatchEvent(new o.OwtEvent("disconnect")))
|
|
}),
|
|
r._socket.emit("login", n, function (e, n) {
|
|
"ok" === e && (r._loggedIn = !0,
|
|
r._onReconnectionTicket(n.reconnectionTicket),
|
|
r._socket.on("connect", function () {
|
|
r._socket.emit("relogin", r._reconnectionTicket, function (e, t) {
|
|
"ok" === e ? (r._reconnectTimes = 0,
|
|
r._onReconnectionTicket(t)) : r.dispatchEvent(new o.OwtEvent("disconnect"))
|
|
})
|
|
})),
|
|
p(e, n, t, i)
|
|
})
|
|
}
|
|
)
|
|
}
|
|
}, {
|
|
key: "disconnect",
|
|
value: function () {
|
|
var e = this;
|
|
return !this._socket || this._socket.disconnected ? Promise.reject(new a.ConferenceError("Portal is not connected.")) : new Promise(function (t, n) {
|
|
e._socket.emit("logout", function (r, i) {
|
|
e._reconnectTimes = 10,
|
|
e._socket.disconnect(),
|
|
p(r, i, t, n)
|
|
})
|
|
}
|
|
)
|
|
}
|
|
}, {
|
|
key: "send",
|
|
value: function (e, t) {
|
|
var n = this;
|
|
return new Promise(function (r, i) {
|
|
n._socket.emit(e, t, function (e, t) {
|
|
p(e, t, r, i)
|
|
})
|
|
}
|
|
)
|
|
}
|
|
}, {
|
|
key: "_onReconnectionTicket",
|
|
value: function (e) {
|
|
var t = this;
|
|
this._reconnectionTicket = e;
|
|
var n = JSON.parse(s.Base64.decodeBase64(e))
|
|
, r = Date.now();
|
|
if (n.notAfter <= r - 1e4)
|
|
i.default.warning("Reconnection ticket expires too soon.");
|
|
else {
|
|
var o = n.notAfter - r - 6e4;
|
|
o < 0 && (o = n.notAfter - r - 1e4),
|
|
this._clearReconnectionTask(),
|
|
this._refreshReconnectionTicket = setTimeout(function () {
|
|
t._socket.emit("refreshReconnectionTicket", function (e, n) {
|
|
"ok" === e ? t._onReconnectionTicket(n) : i.default.warning("Failed to refresh reconnection ticket.")
|
|
})
|
|
}, o)
|
|
}
|
|
}
|
|
}, {
|
|
key: "_clearReconnectionTask",
|
|
value: function () {
|
|
clearTimeout(this._refreshReconnectionTicket),
|
|
this._refreshReconnectionTicket = null
|
|
}
|
|
}]) && u(n.prototype, r),
|
|
c && u(n, c),
|
|
t
|
|
}();
|
|
n.SioSignaling = h
|
|
}
|
|
, {
|
|
"../base/base64.js": 1,
|
|
"../base/event.js": 3,
|
|
"../base/logger.js": 5,
|
|
"./error.js": 14
|
|
}],
|
|
20: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.convertToPublicationSettings = function (e) {
|
|
var t, n, a, s, c, u, d, l = [], f = [];
|
|
e.audio && (e.audio.format && (t = new o.AudioCodecParameters(e.audio.format.codec, e.audio.format.channelNum, e.audio.format.sampleRate)),
|
|
l.push(new r.AudioPublicationSettings(t)));
|
|
if (e.video) {
|
|
var p = !0
|
|
, h = !1
|
|
, v = void 0;
|
|
try {
|
|
for (var m, _ = e.video.original[Symbol.iterator](); !(p = (m = _.next()).done); p = !0) {
|
|
var g = m.value;
|
|
g.format && (n = new o.VideoCodecParameters(g.format.codec, g.format.profile)),
|
|
g.parameters && (g.parameters.resolution && (a = new i.Resolution(g.parameters.resolution.width, g.parameters.resolution.height)),
|
|
s = g.parameters.framerate,
|
|
c = 1e3 * g.parameters.bitrate,
|
|
u = g.parameters.keyFrameInterval),
|
|
g.simulcastRid && (d = g.simulcastRid),
|
|
f.push(new r.VideoPublicationSettings(n, a, s, c, u, d))
|
|
}
|
|
} catch (e) {
|
|
h = !0,
|
|
v = e
|
|
} finally {
|
|
try {
|
|
p || null == _.return || _.return()
|
|
} finally {
|
|
if (h)
|
|
throw v
|
|
}
|
|
}
|
|
}
|
|
return new r.PublicationSettings(l, f)
|
|
}
|
|
,
|
|
n.convertToSubscriptionCapabilities = function (e) {
|
|
var t, n;
|
|
if (e.audio) {
|
|
var r = [];
|
|
if (e.audio && e.audio.optional && e.audio.optional.format) {
|
|
var s = !0
|
|
, d = !1
|
|
, l = void 0;
|
|
try {
|
|
for (var f, p = e.audio.optional.format[Symbol.iterator](); !(s = (f = p.next()).done); s = !0) {
|
|
var h = f.value
|
|
, v = new o.AudioCodecParameters(h.codec, h.channelNum, h.sampleRate);
|
|
r.push(v)
|
|
}
|
|
} catch (e) {
|
|
d = !0,
|
|
l = e
|
|
} finally {
|
|
try {
|
|
s || null == p.return || p.return()
|
|
} finally {
|
|
if (d)
|
|
throw l
|
|
}
|
|
}
|
|
}
|
|
r.sort(),
|
|
t = new a.AudioSubscriptionCapabilities(r)
|
|
}
|
|
if (e.video) {
|
|
var m = [];
|
|
if (e.video && e.video.optional && e.video.optional.format) {
|
|
var _ = !0
|
|
, g = !1
|
|
, b = void 0;
|
|
try {
|
|
for (var y, S = e.video.optional.format[Symbol.iterator](); !(_ = (y = S.next()).done); _ = !0) {
|
|
var P = y.value
|
|
, w = new o.VideoCodecParameters(P.codec, P.profile);
|
|
m.push(w)
|
|
}
|
|
} catch (e) {
|
|
g = !0,
|
|
b = e
|
|
} finally {
|
|
try {
|
|
_ || null == S.return || S.return()
|
|
} finally {
|
|
if (g)
|
|
throw b
|
|
}
|
|
}
|
|
}
|
|
m.sort();
|
|
var O = Array.from(e.video.optional.parameters.resolution, function (e) {
|
|
return new i.Resolution(e.width, e.height)
|
|
});
|
|
O.sort(u);
|
|
var E = Array.from(e.video.optional.parameters.bitrate, function (e) {
|
|
return function (e) {
|
|
if ("string" != typeof e || !e.startsWith("x"))
|
|
return L.Logger.warning("Invalid bitrate multiplier input."),
|
|
0;
|
|
return Number.parseFloat(e.replace(/^x/, ""))
|
|
}(e)
|
|
});
|
|
E.push(1),
|
|
E.sort(c);
|
|
var j = JSON.parse(JSON.stringify(e.video.optional.parameters.framerate));
|
|
j.sort(c);
|
|
var C = JSON.parse(JSON.stringify(e.video.optional.parameters.keyFrameInterval));
|
|
C.sort(c),
|
|
n = new a.VideoSubscriptionCapabilities(m, O, j, E, C)
|
|
}
|
|
return new a.SubscriptionCapabilities(t, n)
|
|
}
|
|
;
|
|
var r = s(e("../base/publication.js"))
|
|
, i = s(e("../base/mediaformat.js"))
|
|
, o = s(e("../base/codec.js"))
|
|
, a = s(e("./subscription.js"));
|
|
function s(e) {
|
|
if (e && e.__esModule)
|
|
return e;
|
|
var t = {};
|
|
if (null != e)
|
|
for (var n in e)
|
|
if (Object.prototype.hasOwnProperty.call(e, n)) {
|
|
var r = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(e, n) : {};
|
|
r.get || r.set ? Object.defineProperty(t, n, r) : t[n] = e[n]
|
|
}
|
|
return t.default = e,
|
|
t
|
|
}
|
|
function c(e, t) {
|
|
return e - t
|
|
}
|
|
function u(e, t) {
|
|
return e.width !== t.width ? e.width - t.width : e.height - t.height
|
|
}
|
|
}
|
|
, {
|
|
"../base/codec.js": 2,
|
|
"../base/mediaformat.js": 6,
|
|
"../base/publication.js": 8,
|
|
"./subscription.js": 21
|
|
}],
|
|
21: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.Subscription = n.SubscriptionUpdateOptions = n.VideoSubscriptionUpdateOptions = n.SubscribeOptions = n.VideoSubscriptionConstraints = n.AudioSubscriptionConstraints = n.SubscriptionCapabilities = n.VideoSubscriptionCapabilities = n.AudioSubscriptionCapabilities = void 0;
|
|
i(e("../base/mediaformat.js")),
|
|
i(e("../base/codec.js"));
|
|
var r = e("../base/event.js");
|
|
function i(e) {
|
|
if (e && e.__esModule)
|
|
return e;
|
|
var t = {};
|
|
if (null != e)
|
|
for (var n in e)
|
|
if (Object.prototype.hasOwnProperty.call(e, n)) {
|
|
var r = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(e, n) : {};
|
|
r.get || r.set ? Object.defineProperty(t, n, r) : t[n] = e[n]
|
|
}
|
|
return t.default = e,
|
|
t
|
|
}
|
|
function o(e) {
|
|
return (o = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
|
|
return typeof e
|
|
}
|
|
: function (e) {
|
|
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
|
|
}
|
|
)(e)
|
|
}
|
|
function a(e) {
|
|
return (a = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
|
|
return e.__proto__ || Object.getPrototypeOf(e)
|
|
}
|
|
)(e)
|
|
}
|
|
function s(e, t) {
|
|
return (s = Object.setPrototypeOf || function (e, t) {
|
|
return e.__proto__ = t,
|
|
e
|
|
}
|
|
)(e, t)
|
|
}
|
|
function c(e) {
|
|
if (void 0 === e)
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return e
|
|
}
|
|
function u(e, t) {
|
|
if (!(e instanceof t))
|
|
throw new TypeError("Cannot call a class as a function")
|
|
}
|
|
n.AudioSubscriptionCapabilities = function e(t) {
|
|
u(this, e),
|
|
this.codecs = t
|
|
}
|
|
;
|
|
n.VideoSubscriptionCapabilities = function e(t, n, r, i, o) {
|
|
u(this, e),
|
|
this.codecs = t,
|
|
this.resolutions = n,
|
|
this.frameRates = r,
|
|
this.bitrateMultipliers = i,
|
|
this.keyFrameIntervals = o
|
|
}
|
|
;
|
|
n.SubscriptionCapabilities = function e(t, n) {
|
|
u(this, e),
|
|
this.audio = t,
|
|
this.video = n
|
|
}
|
|
;
|
|
n.AudioSubscriptionConstraints = function e(t) {
|
|
u(this, e),
|
|
this.codecs = t
|
|
}
|
|
;
|
|
n.VideoSubscriptionConstraints = function e(t, n, r, i, o, a) {
|
|
u(this, e),
|
|
this.codecs = t,
|
|
this.resolution = n,
|
|
this.frameRate = r,
|
|
this.bitrateMultiplier = i,
|
|
this.keyFrameInterval = o,
|
|
this.rid = a
|
|
}
|
|
;
|
|
n.SubscribeOptions = function e(t, n) {
|
|
u(this, e),
|
|
this.audio = t,
|
|
this.video = n
|
|
}
|
|
;
|
|
n.VideoSubscriptionUpdateOptions = function e() {
|
|
u(this, e),
|
|
this.resolution = void 0,
|
|
this.frameRate = void 0,
|
|
this.bitrateMultipliers = void 0,
|
|
this.keyFrameInterval = void 0
|
|
}
|
|
;
|
|
n.SubscriptionUpdateOptions = function e() {
|
|
u(this, e),
|
|
this.video = void 0
|
|
}
|
|
;
|
|
var d = function (e) {
|
|
function t(e, n, r, i, s, d) {
|
|
var l, f, p;
|
|
if (u(this, t),
|
|
f = this,
|
|
l = !(p = a(t).call(this)) || "object" !== o(p) && "function" != typeof p ? c(f) : p,
|
|
!e)
|
|
throw new TypeError("ID cannot be null or undefined.");
|
|
return Object.defineProperty(c(c(l)), "id", {
|
|
configurable: !1,
|
|
writable: !1,
|
|
value: e
|
|
}),
|
|
l.stop = n,
|
|
l.getStats = r,
|
|
l.mute = i,
|
|
l.unmute = s,
|
|
l.applyOptions = d,
|
|
l
|
|
}
|
|
return function (e, t) {
|
|
if ("function" != typeof t && null !== t)
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
e.prototype = Object.create(t && t.prototype, {
|
|
constructor: {
|
|
value: e,
|
|
writable: !0,
|
|
configurable: !0
|
|
}
|
|
}),
|
|
t && s(e, t)
|
|
}(t, r.EventDispatcher),
|
|
t
|
|
}();
|
|
n.Subscription = d
|
|
}
|
|
, {
|
|
"../base/codec.js": 2,
|
|
"../base/event.js": 3,
|
|
"../base/mediaformat.js": 6
|
|
}],
|
|
22: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.Conference = n.P2P = n.Base = void 0;
|
|
var r = a(e("./base/export.js"))
|
|
, i = a(e("./p2p/export.js"))
|
|
, o = a(e("./conference/export.js"));
|
|
function a(e) {
|
|
if (e && e.__esModule)
|
|
return e;
|
|
var t = {};
|
|
if (null != e)
|
|
for (var n in e)
|
|
if (Object.prototype.hasOwnProperty.call(e, n)) {
|
|
var r = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(e, n) : {};
|
|
r.get || r.set ? Object.defineProperty(t, n, r) : t[n] = e[n]
|
|
}
|
|
return t.default = e,
|
|
t
|
|
}
|
|
var s = r;
|
|
n.Base = s;
|
|
var c = i;
|
|
n.P2P = c;
|
|
var u = o;
|
|
n.Conference = u
|
|
}
|
|
, {
|
|
"./base/export.js": 4,
|
|
"./conference/export.js": 15,
|
|
"./p2p/export.js": 24
|
|
}],
|
|
23: [function (e, t, n) {
|
|
"use strict";
|
|
function r(e) {
|
|
return (r = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
|
|
return typeof e
|
|
}
|
|
: function (e) {
|
|
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
|
|
}
|
|
)(e)
|
|
}
|
|
function i(e, t) {
|
|
return !t || "object" !== r(t) && "function" != typeof t ? function (e) {
|
|
if (void 0 === e)
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return e
|
|
}(e) : t
|
|
}
|
|
function o(e) {
|
|
var t = "function" == typeof Map ? new Map : void 0;
|
|
return (o = function (e) {
|
|
if (null === e || (n = e,
|
|
-1 === Function.toString.call(n).indexOf("[native code]")))
|
|
return e;
|
|
var n;
|
|
if ("function" != typeof e)
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
if (void 0 !== t) {
|
|
if (t.has(e))
|
|
return t.get(e);
|
|
t.set(e, r)
|
|
}
|
|
function r() {
|
|
return a(e, arguments, c(this).constructor)
|
|
}
|
|
return r.prototype = Object.create(e.prototype, {
|
|
constructor: {
|
|
value: r,
|
|
enumerable: !1,
|
|
writable: !0,
|
|
configurable: !0
|
|
}
|
|
}),
|
|
s(r, e)
|
|
}
|
|
)(e)
|
|
}
|
|
function a(e, t, n) {
|
|
return (a = function () {
|
|
if ("undefined" == typeof Reflect || !Reflect.construct)
|
|
return !1;
|
|
if (Reflect.construct.sham)
|
|
return !1;
|
|
if ("function" == typeof Proxy)
|
|
return !0;
|
|
try {
|
|
return Date.prototype.toString.call(Reflect.construct(Date, [], function () { })),
|
|
!0
|
|
} catch (e) {
|
|
return !1
|
|
}
|
|
}() ? Reflect.construct : function (e, t, n) {
|
|
var r = [null];
|
|
r.push.apply(r, t);
|
|
var i = new (Function.bind.apply(e, r));
|
|
return n && s(i, n.prototype),
|
|
i
|
|
}
|
|
).apply(null, arguments)
|
|
}
|
|
function s(e, t) {
|
|
return (s = Object.setPrototypeOf || function (e, t) {
|
|
return e.__proto__ = t,
|
|
e
|
|
}
|
|
)(e, t)
|
|
}
|
|
function c(e) {
|
|
return (c = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
|
|
return e.__proto__ || Object.getPrototypeOf(e)
|
|
}
|
|
)(e)
|
|
}
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.getErrorByCode = function (e) {
|
|
return {
|
|
2100: u.P2P_CONN_SERVER_UNKNOWN,
|
|
2101: u.P2P_CONN_SERVER_UNAVAILABLE,
|
|
2102: u.P2P_CONN_SERVER_BUSY,
|
|
2103: u.P2P_CONN_SERVER_NOT_SUPPORTED,
|
|
2110: u.P2P_CONN_CLIENT_UNKNOWN,
|
|
2111: u.P2P_CONN_CLIENT_NOT_INITIALIZED,
|
|
2120: u.P2P_CONN_AUTH_UNKNOWN,
|
|
2121: u.P2P_CONN_AUTH_FAILED,
|
|
2201: u.P2P_MESSAGING_TARGET_UNREACHABLE,
|
|
2400: u.P2P_CLIENT_UNKNOWN,
|
|
2401: u.P2P_CLIENT_UNSUPPORTED_METHOD,
|
|
2402: u.P2P_CLIENT_ILLEGAL_ARGUMENT,
|
|
2403: u.P2P_CLIENT_INVALID_STATE,
|
|
2404: u.P2P_CLIENT_NOT_ALLOWED,
|
|
2500: u.P2P_WEBRTC_UNKNOWN,
|
|
2501: u.P2P_WEBRTC_SDP
|
|
}[e]
|
|
}
|
|
,
|
|
n.P2PError = n.errors = void 0;
|
|
var u = {
|
|
P2P_CONN_SERVER_UNKNOWN: {
|
|
code: 2100,
|
|
message: "Server unknown error."
|
|
},
|
|
P2P_CONN_SERVER_UNAVAILABLE: {
|
|
code: 2101,
|
|
message: "Server is unavaliable."
|
|
},
|
|
P2P_CONN_SERVER_BUSY: {
|
|
code: 2102,
|
|
message: "Server is too busy."
|
|
},
|
|
P2P_CONN_SERVER_NOT_SUPPORTED: {
|
|
code: 2103,
|
|
message: "Method has not been supported by server."
|
|
},
|
|
P2P_CONN_CLIENT_UNKNOWN: {
|
|
code: 2110,
|
|
message: "Client unknown error."
|
|
},
|
|
P2P_CONN_CLIENT_NOT_INITIALIZED: {
|
|
code: 2111,
|
|
message: "Connection is not initialized."
|
|
},
|
|
P2P_CONN_AUTH_UNKNOWN: {
|
|
code: 2120,
|
|
message: "Authentication unknown error."
|
|
},
|
|
P2P_CONN_AUTH_FAILED: {
|
|
code: 2121,
|
|
message: "Wrong username or token."
|
|
},
|
|
P2P_MESSAGING_TARGET_UNREACHABLE: {
|
|
code: 2201,
|
|
message: "Remote user cannot be reached."
|
|
},
|
|
P2P_CLIENT_DENIED: {
|
|
code: 2202,
|
|
message: "User is denied."
|
|
},
|
|
P2P_CLIENT_UNKNOWN: {
|
|
code: 2400,
|
|
message: "Unknown errors."
|
|
},
|
|
P2P_CLIENT_UNSUPPORTED_METHOD: {
|
|
code: 2401,
|
|
message: "This method is unsupported in current browser."
|
|
},
|
|
P2P_CLIENT_ILLEGAL_ARGUMENT: {
|
|
code: 2402,
|
|
message: "Illegal argument."
|
|
},
|
|
P2P_CLIENT_INVALID_STATE: {
|
|
code: 2403,
|
|
message: "Invalid peer state."
|
|
},
|
|
P2P_CLIENT_NOT_ALLOWED: {
|
|
code: 2404,
|
|
message: "Remote user is not allowed."
|
|
},
|
|
P2P_WEBRTC_UNKNOWN: {
|
|
code: 2500,
|
|
message: "WebRTC error."
|
|
},
|
|
P2P_WEBRTC_SDP: {
|
|
code: 2502,
|
|
message: "SDP error."
|
|
}
|
|
};
|
|
n.errors = u;
|
|
var d = function (e) {
|
|
function t(e, n) {
|
|
var r;
|
|
return function (e, t) {
|
|
if (!(e instanceof t))
|
|
throw new TypeError("Cannot call a class as a function")
|
|
}(this, t),
|
|
(r = i(this, c(t).call(this, n))).code = "number" == typeof e ? e : e.code,
|
|
r
|
|
}
|
|
return function (e, t) {
|
|
if ("function" != typeof t && null !== t)
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
e.prototype = Object.create(t && t.prototype, {
|
|
constructor: {
|
|
value: e,
|
|
writable: !0,
|
|
configurable: !0
|
|
}
|
|
}),
|
|
t && s(e, t)
|
|
}(t, o(Error)),
|
|
t
|
|
}();
|
|
n.P2PError = d
|
|
}
|
|
, {}],
|
|
24: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
Object.defineProperty(n, "P2PClient", {
|
|
enumerable: !0,
|
|
get: function () {
|
|
return i.default
|
|
}
|
|
}),
|
|
Object.defineProperty(n, "P2PError", {
|
|
enumerable: !0,
|
|
get: function () {
|
|
return o.P2PError
|
|
}
|
|
});
|
|
var r, i = (r = e("./p2pclient.js")) && r.__esModule ? r : {
|
|
default: r
|
|
}, o = e("./error.js")
|
|
}
|
|
, {
|
|
"./error.js": 23,
|
|
"./p2pclient.js": 25
|
|
}],
|
|
25: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.default = void 0;
|
|
var r = c(e("../base/logger.js"))
|
|
, i = e("../base/event.js")
|
|
, o = (s(e("../base/utils.js")),
|
|
s(e("./error.js")))
|
|
, a = c(e("./peerconnection-channel.js"));
|
|
function s(e) {
|
|
if (e && e.__esModule)
|
|
return e;
|
|
var t = {};
|
|
if (null != e)
|
|
for (var n in e)
|
|
if (Object.prototype.hasOwnProperty.call(e, n)) {
|
|
var r = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(e, n) : {};
|
|
r.get || r.set ? Object.defineProperty(t, n, r) : t[n] = e[n]
|
|
}
|
|
return t.default = e,
|
|
t
|
|
}
|
|
function c(e) {
|
|
return e && e.__esModule ? e : {
|
|
default: e
|
|
}
|
|
}
|
|
var u = 1
|
|
, d = 2
|
|
, l = 3
|
|
, f = function (e, t) {
|
|
Object.setPrototypeOf(this, new i.EventDispatcher);
|
|
var n, s = e, c = t, f = new Map, p = this, h = u;
|
|
c.onMessage = function (e, t) {
|
|
r.default.debug("Received signaling message from " + e + ": " + t);
|
|
var n = JSON.parse(t);
|
|
"chat-closed" !== n.type ? p.allowedRemoteIds.indexOf(e) >= 0 ? m(e).onMessage(n) : v(e, "chat-closed", o.errors.P2P_CLIENT_DENIED) : f.has(e) && (m(e).onMessage(n),
|
|
f.delete(e))
|
|
}
|
|
,
|
|
c.onServerDisconnected = function () {
|
|
h = u,
|
|
p.dispatchEvent(new i.OwtEvent("serverdisconnected"))
|
|
}
|
|
,
|
|
this.allowedRemoteIds = [],
|
|
this.connect = function (e) {
|
|
return h !== u ? (r.default.warning("Invalid connection state: " + h),
|
|
Promise.reject(new o.P2PError(o.errors.P2P_CLIENT_INVALID_STATE))) : (h = d,
|
|
new Promise(function (t, r) {
|
|
c.connect(e).then(function (e) {
|
|
h = l,
|
|
t(n = e)
|
|
}, function (e) {
|
|
r(new o.P2PError(o.getErrorByCode(e)))
|
|
})
|
|
}
|
|
))
|
|
}
|
|
,
|
|
this.disconnect = function () {
|
|
h != u && (f.forEach(function (e) {
|
|
e.stop()
|
|
}),
|
|
f.clear(),
|
|
c.disconnect())
|
|
}
|
|
,
|
|
this.publish = function (e, t) {
|
|
return h !== l ? Promise.reject(new o.P2PError(o.errors.P2P_CLIENT_INVALID_STATE, "P2P Client is not connected to signaling channel.")) : this.allowedRemoteIds.indexOf(e) < 0 ? Promise.reject(new o.P2PError(o.errors.P2P_CLIENT_NOT_ALLOWED)) : Promise.resolve(m(e).publish(t))
|
|
}
|
|
,
|
|
this.send = function (e, t) {
|
|
return h !== l ? Promise.reject(new o.P2PError(o.errors.P2P_CLIENT_INVALID_STATE, "P2P Client is not connected to signaling channel.")) : this.allowedRemoteIds.indexOf(e) < 0 ? Promise.reject(new o.P2PError(o.errors.P2P_CLIENT_NOT_ALLOWED)) : Promise.resolve(m(e).send(t))
|
|
}
|
|
,
|
|
this.stop = function (e) {
|
|
f.has(e) ? (f.get(e).stop(),
|
|
f.delete(e)) : r.default.warning("No PeerConnection between current endpoint and specific remote endpoint.")
|
|
}
|
|
,
|
|
this.getStats = function (e) {
|
|
return f.has(e) ? f.get(e).getStats() : Promise.reject(new o.P2PError(o.errors.P2P_CLIENT_INVALID_STATE, "No PeerConnection between current endpoint and specific remote endpoint."))
|
|
}
|
|
;
|
|
var v = function (e, t, n) {
|
|
var r = {
|
|
type: t
|
|
};
|
|
return n && (r.data = n),
|
|
c.send(e, JSON.stringify(r)).catch(function (e) {
|
|
if ("number" == typeof e)
|
|
throw o.getErrorByCode(e)
|
|
})
|
|
}
|
|
, m = function (e) {
|
|
if (!f.has(e)) {
|
|
var t = Object.create(i.EventDispatcher);
|
|
t.sendSignalingMessage = v;
|
|
var r = new a.default(s, n, e, t);
|
|
r.addEventListener("streamadded", function (e) {
|
|
p.dispatchEvent(e)
|
|
}),
|
|
r.addEventListener("messagereceived", function (e) {
|
|
p.dispatchEvent(e)
|
|
}),
|
|
r.addEventListener("ended", function () {
|
|
f.delete(e)
|
|
}),
|
|
f.set(e, r)
|
|
}
|
|
return f.get(e)
|
|
}
|
|
};
|
|
n.default = f
|
|
}
|
|
, {
|
|
"../base/event.js": 3,
|
|
"../base/logger.js": 5,
|
|
"../base/utils.js": 11,
|
|
"./error.js": 23,
|
|
"./peerconnection-channel.js": 26
|
|
}],
|
|
26: [function (e, t, n) {
|
|
"use strict";
|
|
Object.defineProperty(n, "__esModule", {
|
|
value: !0
|
|
}),
|
|
n.default = n.P2PPeerConnectionChannelEvent = void 0;
|
|
var r, i = (r = e("../base/logger.js")) && r.__esModule ? r : {
|
|
default: r
|
|
}, o = e("../base/event.js"), a = e("../base/publication.js"), s = l(e("../base/utils.js")), c = l(e("./error.js")), u = l(e("../base/stream.js")), d = l(e("../base/sdputils.js"));
|
|
function l(e) {
|
|
if (e && e.__esModule)
|
|
return e;
|
|
var t = {};
|
|
if (null != e)
|
|
for (var n in e)
|
|
if (Object.prototype.hasOwnProperty.call(e, n)) {
|
|
var r = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(e, n) : {};
|
|
r.get || r.set ? Object.defineProperty(t, n, r) : t[n] = e[n]
|
|
}
|
|
return t.default = e,
|
|
t
|
|
}
|
|
function f(e, t) {
|
|
return function (e) {
|
|
if (Array.isArray(e))
|
|
return e
|
|
}(e) || function (e, t) {
|
|
var n = []
|
|
, r = !0
|
|
, i = !1
|
|
, o = void 0;
|
|
try {
|
|
for (var a, s = e[Symbol.iterator](); !(r = (a = s.next()).done) && (n.push(a.value),
|
|
!t || n.length !== t); r = !0)
|
|
;
|
|
} catch (e) {
|
|
i = !0,
|
|
o = e
|
|
} finally {
|
|
try {
|
|
r || null == s.return || s.return()
|
|
} finally {
|
|
if (i)
|
|
throw o
|
|
}
|
|
}
|
|
return n
|
|
}(e, t) || function () {
|
|
throw new TypeError("Invalid attempt to destructure non-iterable instance")
|
|
}()
|
|
}
|
|
function p(e) {
|
|
return (p = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
|
|
return typeof e
|
|
}
|
|
: function (e) {
|
|
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
|
|
}
|
|
)(e)
|
|
}
|
|
function h(e, t) {
|
|
for (var n = 0; n < t.length; n++) {
|
|
var r = t[n];
|
|
r.enumerable = r.enumerable || !1,
|
|
r.configurable = !0,
|
|
"value" in r && (r.writable = !0),
|
|
Object.defineProperty(e, r.key, r)
|
|
}
|
|
}
|
|
function v(e, t) {
|
|
if (!(e instanceof t))
|
|
throw new TypeError("Cannot call a class as a function")
|
|
}
|
|
function m(e, t) {
|
|
return !t || "object" !== p(t) && "function" != typeof t ? function (e) {
|
|
if (void 0 === e)
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return e
|
|
}(e) : t
|
|
}
|
|
function _(e, t) {
|
|
if ("function" != typeof t && null !== t)
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
e.prototype = Object.create(t && t.prototype, {
|
|
constructor: {
|
|
value: e,
|
|
writable: !0,
|
|
configurable: !0
|
|
}
|
|
}),
|
|
t && y(e, t)
|
|
}
|
|
function g(e) {
|
|
var t = "function" == typeof Map ? new Map : void 0;
|
|
return (g = function (e) {
|
|
if (null === e || (n = e,
|
|
-1 === Function.toString.call(n).indexOf("[native code]")))
|
|
return e;
|
|
var n;
|
|
if ("function" != typeof e)
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
if (void 0 !== t) {
|
|
if (t.has(e))
|
|
return t.get(e);
|
|
t.set(e, r)
|
|
}
|
|
function r() {
|
|
return b(e, arguments, S(this).constructor)
|
|
}
|
|
return r.prototype = Object.create(e.prototype, {
|
|
constructor: {
|
|
value: r,
|
|
enumerable: !1,
|
|
writable: !0,
|
|
configurable: !0
|
|
}
|
|
}),
|
|
y(r, e)
|
|
}
|
|
)(e)
|
|
}
|
|
function b(e, t, n) {
|
|
return (b = function () {
|
|
if ("undefined" == typeof Reflect || !Reflect.construct)
|
|
return !1;
|
|
if (Reflect.construct.sham)
|
|
return !1;
|
|
if ("function" == typeof Proxy)
|
|
return !0;
|
|
try {
|
|
return Date.prototype.toString.call(Reflect.construct(Date, [], function () { })),
|
|
!0
|
|
} catch (e) {
|
|
return !1
|
|
}
|
|
}() ? Reflect.construct : function (e, t, n) {
|
|
var r = [null];
|
|
r.push.apply(r, t);
|
|
var i = new (Function.bind.apply(e, r));
|
|
return n && y(i, n.prototype),
|
|
i
|
|
}
|
|
).apply(null, arguments)
|
|
}
|
|
function y(e, t) {
|
|
return (y = Object.setPrototypeOf || function (e, t) {
|
|
return e.__proto__ = t,
|
|
e
|
|
}
|
|
)(e, t)
|
|
}
|
|
function S(e) {
|
|
return (S = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
|
|
return e.__proto__ || Object.getPrototypeOf(e)
|
|
}
|
|
)(e)
|
|
}
|
|
var P = function (e) {
|
|
function t(e) {
|
|
var n;
|
|
return v(this, t),
|
|
(n = m(this, S(t).call(this, e))).stream = e.stream,
|
|
n
|
|
}
|
|
return _(t, g(Event)),
|
|
t
|
|
}();
|
|
n.P2PPeerConnectionChannelEvent = P;
|
|
var w = "message"
|
|
, O = "chat-closed"
|
|
, E = "chat-track-sources"
|
|
, j = "chat-stream-info"
|
|
, C = "chat-signal"
|
|
, T = "chat-tracks-added"
|
|
, k = "chat-tracks-removed"
|
|
, I = "chat-data-received"
|
|
, R = "chat-ua"
|
|
, M = s.sysInfo()
|
|
, A = function (e) {
|
|
function t(e, n, r, i) {
|
|
var o;
|
|
return v(this, t),
|
|
(o = m(this, S(t).call(this)))._config = e,
|
|
o._localId = n,
|
|
o._remoteId = r,
|
|
o._signaling = i,
|
|
o._pc = null,
|
|
o._publishedStreams = new Map,
|
|
o._pendingStreams = [],
|
|
o._publishingStreams = [],
|
|
o._pendingUnpublishStreams = [],
|
|
o._remoteStreamInfo = new Map,
|
|
o._remoteStreams = [],
|
|
o._remoteTrackSourceInfo = new Map,
|
|
o._publishPromises = new Map,
|
|
o._unpublishPromises = new Map,
|
|
o._publishingStreamTracks = new Map,
|
|
o._publishedStreamTracks = new Map,
|
|
o._isNegotiationNeeded = !1,
|
|
o._remoteSideSupportsRemoveStream = !0,
|
|
o._remoteSideSupportsPlanB = !0,
|
|
o._remoteSideSupportsUnifiedPlan = !0,
|
|
o._remoteIceCandidates = [],
|
|
o._dataChannels = new Map,
|
|
o._pendingMessages = [],
|
|
o._dataSeq = 1,
|
|
o._sendDataPromises = new Map,
|
|
o._addedTrackIds = [],
|
|
o._isCaller = !0,
|
|
o._infoSent = !1,
|
|
o._disposed = !1,
|
|
o._createPeerConnection(),
|
|
o
|
|
}
|
|
var n, r, l;
|
|
return _(t, o.EventDispatcher),
|
|
n = t,
|
|
(r = [{
|
|
key: "publish",
|
|
value: function (e) {
|
|
var t = this;
|
|
return e instanceof u.LocalStream ? this._publishedStreams.has(e) ? Promise.reject(new c.P2PError(c.errors.P2P_CLIENT_ILLEGAL_ARGUMENT, "Duplicated stream.")) : this._areAllTracksEnded(e.mediaStream) ? Promise.reject(new c.P2PError(c.errors.P2P_CLIENT_INVALID_STATE, "All tracks are ended.")) : Promise.all([this._sendClosedMsgIfNecessary(), this._sendSysInfoIfNecessary(), this._sendStreamInfo(e)]).then(function () {
|
|
return new Promise(function (n, r) {
|
|
var i = !0
|
|
, o = !1
|
|
, a = void 0;
|
|
try {
|
|
for (var s, c = e.mediaStream.getTracks()[Symbol.iterator](); !(i = (s = c.next()).done); i = !0) {
|
|
var u = s.value;
|
|
t._pc.addTrack(u, e.mediaStream)
|
|
}
|
|
} catch (e) {
|
|
o = !0,
|
|
a = e
|
|
} finally {
|
|
try {
|
|
i || null == c.return || c.return()
|
|
} finally {
|
|
if (o)
|
|
throw a
|
|
}
|
|
}
|
|
t._onNegotiationneeded(),
|
|
t._publishingStreams.push(e);
|
|
var d = Array.from(e.mediaStream.getTracks(), function (e) {
|
|
return e.id
|
|
});
|
|
t._publishingStreamTracks.set(e.mediaStream.id, d),
|
|
t._publishPromises.set(e.mediaStream.id, {
|
|
resolve: n,
|
|
reject: r
|
|
})
|
|
}
|
|
)
|
|
}) : Promise.reject(new TypeError("Invalid stream."))
|
|
}
|
|
}, {
|
|
key: "send",
|
|
value: function (e) {
|
|
var t = this;
|
|
if ("string" != typeof e)
|
|
return Promise.reject(new TypeError("Invalid message."));
|
|
var n = {
|
|
id: this._dataSeq++,
|
|
data: e
|
|
}
|
|
, r = new Promise(function (e, r) {
|
|
t._sendDataPromises.set(n.id, {
|
|
resolve: e,
|
|
reject: r
|
|
})
|
|
}
|
|
);
|
|
return this._dataChannels.has(w) || this._createDataChannel(w),
|
|
this._sendClosedMsgIfNecessary().catch(function (e) {
|
|
i.default.debug("Failed to send closed message." + e.message)
|
|
}),
|
|
this._sendSysInfoIfNecessary().catch(function (e) {
|
|
i.default.debug("Failed to send sysInfo." + e.message)
|
|
}),
|
|
"open" === this._dataChannels.get(w).readyState ? this._dataChannels.get(w).send(JSON.stringify(n)) : this._pendingMessages.push(n),
|
|
r
|
|
}
|
|
}, {
|
|
key: "stop",
|
|
value: function () {
|
|
this._stop(void 0, !0)
|
|
}
|
|
}, {
|
|
key: "getStats",
|
|
value: function (e) {
|
|
var t = this;
|
|
if (this._pc) {
|
|
if (void 0 === e)
|
|
return this._pc.getStats();
|
|
var n = [];
|
|
return Promise.all([e.getTracks().forEach(function (e) {
|
|
t._getStats(e, n)
|
|
})]).then(function () {
|
|
return new Promise(function (e, t) {
|
|
e(n)
|
|
}
|
|
)
|
|
})
|
|
}
|
|
return Promise.reject(new c.P2PError(c.errors.P2P_CLIENT_INVALID_STATE))
|
|
}
|
|
}, {
|
|
key: "_getStats",
|
|
value: function (e, t) {
|
|
return this._pc.getStats(e).then(function (e) {
|
|
t.push(e)
|
|
})
|
|
}
|
|
}, {
|
|
key: "onMessage",
|
|
value: function (e) {
|
|
this._SignalingMesssageHandler(e)
|
|
}
|
|
}, {
|
|
key: "_sendSdp",
|
|
value: function (e) {
|
|
return this._signaling.sendSignalingMessage(this._remoteId, C, e)
|
|
}
|
|
}, {
|
|
key: "_sendSignalingMessage",
|
|
value: function (e, t) {
|
|
return this._signaling.sendSignalingMessage(this._remoteId, e, t)
|
|
}
|
|
}, {
|
|
key: "_SignalingMesssageHandler",
|
|
value: function (e) {
|
|
switch (i.default.debug("Channel received message: " + e),
|
|
e.type) {
|
|
case R:
|
|
this._handleRemoteCapability(e.data),
|
|
this._sendSysInfoIfNecessary();
|
|
break;
|
|
case E:
|
|
this._trackSourcesHandler(e.data);
|
|
break;
|
|
case j:
|
|
this._streamInfoHandler(e.data);
|
|
break;
|
|
case C:
|
|
this._sdpHandler(e.data);
|
|
break;
|
|
case T:
|
|
this._tracksAddedHandler(e.data);
|
|
break;
|
|
case k:
|
|
this._tracksRemovedHandler(e.data);
|
|
break;
|
|
case I:
|
|
this._dataReceivedHandler(e.data);
|
|
break;
|
|
case O:
|
|
this._chatClosedHandler(e.data);
|
|
break;
|
|
default:
|
|
i.default.error("Invalid signaling message received. Type: " + e.type)
|
|
}
|
|
}
|
|
}, {
|
|
key: "_tracksAddedHandler",
|
|
value: function (e) {
|
|
var t = this
|
|
, n = !0
|
|
, r = !1
|
|
, s = void 0;
|
|
try {
|
|
for (var u, d = function () {
|
|
var e = u.value;
|
|
t._publishingStreamTracks.forEach(function (n, r) {
|
|
for (var s = 0; s < n.length; s++) {
|
|
if (n[s] === e && (t._publishedStreamTracks.has(r) || t._publishedStreamTracks.set(r, []),
|
|
t._publishedStreamTracks.get(r).push(n[s]),
|
|
n.splice(s, 1)),
|
|
0 == n.length)
|
|
if ("continue" === function () {
|
|
if (!t._publishPromises.has(r))
|
|
return i.default.warning("Cannot find the promise for publishing " + r),
|
|
"continue";
|
|
var n = t._publishingStreams.findIndex(function (e) {
|
|
return e.mediaStream.id == r
|
|
})
|
|
, s = t._publishingStreams[n];
|
|
t._publishingStreams.splice(n, 1);
|
|
var u = new a.Publication(e, function () {
|
|
t._unpublish(s).then(function () {
|
|
u.dispatchEvent(new o.OwtEvent("ended"))
|
|
}, function (e) {
|
|
i.default.debug("Something wrong happened during stopping a publication. " + e.message)
|
|
})
|
|
}
|
|
, function () {
|
|
return s && s.mediaStream ? t.getStats(s.mediaStream) : Promise.reject(new c.P2PError(c.errors.P2P_CLIENT_INVALID_STATE, "Publication is not available."))
|
|
}
|
|
);
|
|
t._publishedStreams.set(s, u),
|
|
t._publishPromises.get(r).resolve(u),
|
|
t._publishPromises.delete(r)
|
|
}())
|
|
continue
|
|
}
|
|
})
|
|
}, l = e[Symbol.iterator](); !(n = (u = l.next()).done); n = !0)
|
|
d()
|
|
} catch (e) {
|
|
r = !0,
|
|
s = e
|
|
} finally {
|
|
try {
|
|
n || null == l.return || l.return()
|
|
} finally {
|
|
if (r)
|
|
throw s
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: "_tracksRemovedHandler",
|
|
value: function (e) {
|
|
var t = this
|
|
, n = !0
|
|
, r = !1
|
|
, i = void 0;
|
|
try {
|
|
for (var o, a = function () {
|
|
var e = o.value;
|
|
t._publishedStreamTracks.forEach(function (t, n) {
|
|
for (var r = 0; r < t.length; r++)
|
|
t[r] === e && t.splice(r, 1)
|
|
})
|
|
}, s = e[Symbol.iterator](); !(n = (o = s.next()).done); n = !0)
|
|
a()
|
|
} catch (e) {
|
|
r = !0,
|
|
i = e
|
|
} finally {
|
|
try {
|
|
n || null == s.return || s.return()
|
|
} finally {
|
|
if (r)
|
|
throw i
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: "_dataReceivedHandler",
|
|
value: function (e) {
|
|
this._sendDataPromises.has(e) ? this._sendDataPromises.get(e).resolve() : i.default.warning("Received unknown data received message. ID: " + e)
|
|
}
|
|
}, {
|
|
key: "_sdpHandler",
|
|
value: function (e) {
|
|
"offer" === e.type ? this._onOffer(e) : "answer" === e.type ? this._onAnswer(e) : "candidates" === e.type && this._onRemoteIceCandidate(e)
|
|
}
|
|
}, {
|
|
key: "_trackSourcesHandler",
|
|
value: function (e) {
|
|
var t = !0
|
|
, n = !1
|
|
, r = void 0;
|
|
try {
|
|
for (var i, o = e[Symbol.iterator](); !(t = (i = o.next()).done); t = !0) {
|
|
var a = i.value;
|
|
this._remoteTrackSourceInfo.set(a.id, a.source)
|
|
}
|
|
} catch (e) {
|
|
n = !0,
|
|
r = e
|
|
} finally {
|
|
try {
|
|
t || null == o.return || o.return()
|
|
} finally {
|
|
if (n)
|
|
throw r
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: "_streamInfoHandler",
|
|
value: function (e) {
|
|
e ? this._remoteStreamInfo.set(e.id, {
|
|
source: e.source,
|
|
attributes: e.attributes,
|
|
stream: null,
|
|
mediaStream: null,
|
|
trackIds: e.tracks
|
|
}) : i.default.warning("Unexpected stream info.")
|
|
}
|
|
}, {
|
|
key: "_chatClosedHandler",
|
|
value: function (e) {
|
|
this._disposed = !0,
|
|
this._stop(e, !1)
|
|
}
|
|
}, {
|
|
key: "_onOffer",
|
|
value: function (e) {
|
|
var t = this;
|
|
i.default.debug("About to set remote description. Signaling state: " + this._pc.signalingState),
|
|
e.sdp = this._setRtpSenderOptions(e.sdp, this._config),
|
|
s.isFirefox() && (e.sdp = this._setCodecOrder(e.sdp));
|
|
var n = new RTCSessionDescription(e);
|
|
this._pc.setRemoteDescription(n).then(function () {
|
|
t._createAndSendAnswer()
|
|
}, function (e) {
|
|
i.default.debug("Set remote description failed. Message: " + e.message),
|
|
t._stop(e, !0)
|
|
})
|
|
}
|
|
}, {
|
|
key: "_onAnswer",
|
|
value: function (e) {
|
|
var t = this;
|
|
i.default.debug("About to set remote description. Signaling state: " + this._pc.signalingState),
|
|
e.sdp = this._setRtpSenderOptions(e.sdp, this._config);
|
|
var n = new RTCSessionDescription(e);
|
|
this._pc.setRemoteDescription(new RTCSessionDescription(n)).then(function () {
|
|
i.default.debug("Set remote descripiton successfully."),
|
|
t._drainPendingMessages()
|
|
}, function (e) {
|
|
i.default.debug("Set remote description failed. Message: " + e.message),
|
|
t._stop(e, !0)
|
|
})
|
|
}
|
|
}, {
|
|
key: "_onLocalIceCandidate",
|
|
value: function (e) {
|
|
e.candidate ? this._sendSdp({
|
|
type: "candidates",
|
|
candidate: e.candidate.candidate,
|
|
sdpMid: e.candidate.sdpMid,
|
|
sdpMLineIndex: e.candidate.sdpMLineIndex
|
|
}).catch(function (e) {
|
|
i.default.warning("Failed to send candidate.")
|
|
}) : i.default.debug("Empty candidate.")
|
|
}
|
|
}, {
|
|
key: "_onRemoteTrackAdded",
|
|
value: function (e) {
|
|
i.default.debug("Remote track added.");
|
|
var t = !0
|
|
, n = !1
|
|
, r = void 0;
|
|
try {
|
|
for (var o, a = e.streams[Symbol.iterator](); !(t = (o = a.next()).done); t = !0) {
|
|
var s = o.value;
|
|
if (!this._remoteStreamInfo.has(s.id))
|
|
return void i.default.warning("Missing stream info.");
|
|
this._remoteStreamInfo.get(s.id).stream || this._setStreamToRemoteStreamInfo(s)
|
|
}
|
|
} catch (e) {
|
|
n = !0,
|
|
r = e
|
|
} finally {
|
|
try {
|
|
t || null == a.return || a.return()
|
|
} finally {
|
|
if (n)
|
|
throw r
|
|
}
|
|
}
|
|
"connected" === this._pc.iceConnectionState || "completed" === this._pc.iceConnectionState ? this._checkIceConnectionStateAndFireEvent() : this._addedTrackIds.concat(e.track.id)
|
|
}
|
|
}, {
|
|
key: "_onRemoteStreamAdded",
|
|
value: function (e) {
|
|
if (i.default.debug("Remote stream added."),
|
|
this._remoteStreamInfo.has(e.stream.id)) {
|
|
"connected" === this._pc.iceConnectionState || "completed" === this._pc.iceConnectionState ? this._sendSignalingMessage(T, this._remoteStreamInfo.get(e.stream.id).trackIds) : this._addedTrackIds = this._addedTrackIds.concat(this._remoteStreamInfo.get(e.stream.id).trackIds);
|
|
var t = this._remoteStreamInfo.get(e.stream.id).source.audio
|
|
, n = this._remoteStreamInfo.get(e.stream.id).source.video
|
|
, r = new u.StreamSourceInfo(t, n);
|
|
s.isSafari() && (r.audio || e.stream.getAudioTracks().forEach(function (t) {
|
|
e.stream.removeTrack(t)
|
|
}),
|
|
r.video || e.stream.getVideoTracks().forEach(function (t) {
|
|
e.stream.removeTrack(t)
|
|
}));
|
|
var o = this._remoteStreamInfo.get(e.stream.id).attributes
|
|
, a = new u.RemoteStream(void 0, this._remoteId, e.stream, r, o);
|
|
if (a) {
|
|
this._remoteStreams.push(a);
|
|
var c = new u.StreamEvent("streamadded", {
|
|
stream: a
|
|
});
|
|
this.dispatchEvent(c)
|
|
}
|
|
} else
|
|
i.default.warning("Cannot find source info for stream " + e.stream.id)
|
|
}
|
|
}, {
|
|
key: "_onRemoteStreamRemoved",
|
|
value: function (e) {
|
|
i.default.debug("Remote stream removed.");
|
|
var t = this._remoteStreams.findIndex(function (t) {
|
|
return t.mediaStream.id === e.stream.id
|
|
});
|
|
if (-1 !== t) {
|
|
var n = this._remoteStreams[t];
|
|
this._streamRemoved(n),
|
|
this._remoteStreams.splice(t, 1)
|
|
}
|
|
}
|
|
}, {
|
|
key: "_onNegotiationneeded",
|
|
value: function () {
|
|
i.default.debug("On negotiation needed."),
|
|
"stable" === this._pc.signalingState ? this._doNegotiate() : this._isNegotiationNeeded = !0
|
|
}
|
|
}, {
|
|
key: "_onRemoteIceCandidate",
|
|
value: function (e) {
|
|
var t = new RTCIceCandidate({
|
|
candidate: e.candidate,
|
|
sdpMid: e.sdpMid,
|
|
sdpMLineIndex: e.sdpMLineIndex
|
|
});
|
|
this._pc.remoteDescription && "" !== this._pc.remoteDescription.sdp ? (i.default.debug("Add remote ice candidates."),
|
|
this._pc.addIceCandidate(t).catch(function (e) {
|
|
i.default.warning("Error processing ICE candidate: " + e)
|
|
})) : (i.default.debug("Cache remote ice candidates."),
|
|
this._remoteIceCandidates.push(t))
|
|
}
|
|
}, {
|
|
key: "_onSignalingStateChange",
|
|
value: function (e) {
|
|
i.default.debug("Signaling state changed: " + this._pc.signalingState),
|
|
"closed" === this._pc.signalingState || ("stable" === this._pc.signalingState ? (this._negotiating = !1,
|
|
this._isNegotiationNeeded ? this._onNegotiationneeded() : (this._drainPendingStreams(),
|
|
this._drainPendingMessages())) : "have-remote-offer" === this._pc.signalingState && this._drainPendingRemoteIceCandidates())
|
|
}
|
|
}, {
|
|
key: "_onIceConnectionStateChange",
|
|
value: function (e) {
|
|
if ("closed" === e.currentTarget.iceConnectionState || "failed" === e.currentTarget.iceConnectionState) {
|
|
var t = new c.P2PError(c.errors.P2P_WEBRTC_UNKNOWN, "ICE connection failed or closed.");
|
|
this._stop(t, !0)
|
|
} else
|
|
"connected" !== e.currentTarget.iceConnectionState && "completed" !== e.currentTarget.iceConnectionState || (this._sendSignalingMessage(T, this._addedTrackIds),
|
|
this._addedTrackIds = [],
|
|
this._checkIceConnectionStateAndFireEvent())
|
|
}
|
|
}, {
|
|
key: "_onDataChannelMessage",
|
|
value: function (e) {
|
|
var t = JSON.parse(e.data);
|
|
i.default.debug("Data channel message received: " + t.data),
|
|
this._sendSignalingMessage(I, t.id);
|
|
var n = new o.MessageEvent("messagereceived", {
|
|
message: t.data,
|
|
origin: this._remoteId
|
|
});
|
|
this.dispatchEvent(n)
|
|
}
|
|
}, {
|
|
key: "_onDataChannelOpen",
|
|
value: function (e) {
|
|
i.default.debug("Data Channel is opened."),
|
|
e.target.label === w && (i.default.debug("Data channel for messages is opened."),
|
|
this._drainPendingMessages())
|
|
}
|
|
}, {
|
|
key: "_onDataChannelClose",
|
|
value: function (e) {
|
|
i.default.debug("Data Channel is closed.")
|
|
}
|
|
}, {
|
|
key: "_streamRemoved",
|
|
value: function (e) {
|
|
this._remoteStreamInfo.has(e.mediaStream.id) || i.default.warning("Cannot find stream info."),
|
|
this._sendSignalingMessage(k, this._remoteStreamInfo.get(e.mediaStream.id).trackIds);
|
|
var t = new o.OwtEvent("ended");
|
|
e.dispatchEvent(t)
|
|
}
|
|
}, {
|
|
key: "_isUnifiedPlan",
|
|
value: function () {
|
|
if (s.isFirefox())
|
|
return !0;
|
|
var e = new RTCPeerConnection({
|
|
sdpSemantics: "unified-plan"
|
|
});
|
|
return e.getConfiguration() && "plan-b" === e.getConfiguration().sdpSemantics
|
|
}
|
|
}, {
|
|
key: "_createPeerConnection",
|
|
value: function () {
|
|
var e = this
|
|
, t = this._config.rtcConfiguration || {};
|
|
s.isChrome() && (t.sdpSemantics = "unified-plan"),
|
|
this._pc = new RTCPeerConnection(t),
|
|
"function" == typeof this._pc.addTransceiver && s.isSafari() && (this._pc.addTransceiver("audio"),
|
|
this._pc.addTransceiver("video")),
|
|
this._isUnifiedPlan() ? this._pc.ontrack = function (t) {
|
|
e._onRemoteTrackAdded.apply(e, [t])
|
|
}
|
|
: (this._pc.onaddstream = function (t) {
|
|
e._onRemoteStreamAdded.apply(e, [t])
|
|
}
|
|
,
|
|
this._pc.onremovestream = function (t) {
|
|
e._onRemoteStreamRemoved.apply(e, [t])
|
|
}
|
|
),
|
|
this._pc.onicecandidate = function (t) {
|
|
e._onLocalIceCandidate.apply(e, [t])
|
|
}
|
|
,
|
|
this._pc.onsignalingstatechange = function (t) {
|
|
e._onSignalingStateChange.apply(e, [t])
|
|
}
|
|
,
|
|
this._pc.ondatachannel = function (t) {
|
|
i.default.debug("On data channel."),
|
|
e._dataChannels.has(t.channel.label) || (e._dataChannels.set(t.channel.label, t.channel),
|
|
i.default.debug("Save remote created data channel.")),
|
|
e._bindEventsToDataChannel(t.channel)
|
|
}
|
|
,
|
|
this._pc.oniceconnectionstatechange = function (t) {
|
|
e._onIceConnectionStateChange.apply(e, [t])
|
|
}
|
|
}
|
|
}, {
|
|
key: "_drainPendingStreams",
|
|
value: function () {
|
|
var e = !1;
|
|
if (i.default.debug("Draining pending streams."),
|
|
this._pc && "stable" === this._pc.signalingState) {
|
|
i.default.debug("Peer connection is ready for draining pending streams.");
|
|
for (var t = 0; t < this._pendingStreams.length; t++) {
|
|
var n = this._pendingStreams[t];
|
|
if (this._pendingStreams.shift(),
|
|
n.mediaStream) {
|
|
var r = !0
|
|
, o = !1
|
|
, a = void 0;
|
|
try {
|
|
for (var s, c = n.mediaStream.getTracks()[Symbol.iterator](); !(r = (s = c.next()).done); r = !0) {
|
|
var u = s.value;
|
|
this._pc.addTrack(u, n.mediaStream),
|
|
e = !0
|
|
}
|
|
} catch (e) {
|
|
o = !0,
|
|
a = e
|
|
} finally {
|
|
try {
|
|
r || null == c.return || c.return()
|
|
} finally {
|
|
if (o)
|
|
throw a
|
|
}
|
|
}
|
|
i.default.debug("Added stream to peer connection."),
|
|
this._publishingStreams.push(n)
|
|
}
|
|
}
|
|
this._pendingStreams.length = 0;
|
|
for (var d = 0; d < this._pendingUnpublishStreams.length; d++)
|
|
this._pendingUnpublishStreams[d].mediaStream && (this._pc.removeStream(this._pendingUnpublishStreams[d].mediaStream),
|
|
e = !0,
|
|
this._unpublishPromises.get(this._pendingUnpublishStreams[d].mediaStream.id).resolve(),
|
|
this._publishedStreams.delete(this._pendingUnpublishStreams[d]),
|
|
i.default.debug("Remove stream."));
|
|
this._pendingUnpublishStreams.length = 0
|
|
}
|
|
e && this._onNegotiationneeded()
|
|
}
|
|
}, {
|
|
key: "_drainPendingRemoteIceCandidates",
|
|
value: function () {
|
|
for (var e = 0; e < this._remoteIceCandidates.length; e++)
|
|
i.default.debug("Add candidate"),
|
|
this._pc.addIceCandidate(this._remoteIceCandidates[e]).catch(function (e) {
|
|
i.default.warning("Error processing ICE candidate: " + e)
|
|
});
|
|
this._remoteIceCandidates.length = 0
|
|
}
|
|
}, {
|
|
key: "_drainPendingMessages",
|
|
value: function () {
|
|
if (i.default.debug("Draining pending messages."),
|
|
0 != this._pendingMessages.length) {
|
|
var e = this._dataChannels.get(w);
|
|
if (e && "open" === e.readyState) {
|
|
for (var t = 0; t < this._pendingMessages.length; t++)
|
|
i.default.debug("Sending message via data channel: " + this._pendingMessages[t]),
|
|
e.send(JSON.stringify(this._pendingMessages[t]));
|
|
this._pendingMessages.length = 0
|
|
} else
|
|
this._pc && !e && this._createDataChannel(w)
|
|
}
|
|
}
|
|
}, {
|
|
key: "_sendStreamInfo",
|
|
value: function (e) {
|
|
if (!e || !e.mediaStream)
|
|
return new c.P2PError(c.errors.P2P_CLIENT_ILLEGAL_ARGUMENT);
|
|
var t = [];
|
|
return e.mediaStream.getTracks().map(function (n) {
|
|
t.push({
|
|
id: n.id,
|
|
source: e.source[n.kind]
|
|
})
|
|
}),
|
|
Promise.all([this._sendSignalingMessage(E, t), this._sendSignalingMessage(j, {
|
|
id: e.mediaStream.id,
|
|
attributes: e.attributes,
|
|
tracks: Array.from(t, function (e) {
|
|
return e.id
|
|
}),
|
|
source: e.source
|
|
})])
|
|
}
|
|
}, {
|
|
key: "_sendSysInfoIfNecessary",
|
|
value: function () {
|
|
return this._infoSent ? Promise.resolve() : (this._infoSent = !0,
|
|
this._sendSignalingMessage(R, M))
|
|
}
|
|
}, {
|
|
key: "_sendClosedMsgIfNecessary",
|
|
value: function () {
|
|
return null === this._pc.remoteDescription || "" === this._pc.remoteDescription.sdp ? this._sendSignalingMessage(O) : Promise.resolve()
|
|
}
|
|
}, {
|
|
key: "_handleRemoteCapability",
|
|
value: function (e) {
|
|
e.sdk && e.sdk && "JavaScript" === e.sdk.type && e.runtime && "Firefox" === e.runtime.name ? (this._remoteSideSupportsRemoveStream = !1,
|
|
this._remoteSideSupportsPlanB = !1,
|
|
this._remoteSideSupportsUnifiedPlan = !0) : (this._remoteSideSupportsRemoveStream = !0,
|
|
this._remoteSideSupportsPlanB = !0,
|
|
this._remoteSideSupportsUnifiedPlan = !1)
|
|
}
|
|
}, {
|
|
key: "_doNegotiate",
|
|
value: function () {
|
|
this._createAndSendOffer()
|
|
}
|
|
}, {
|
|
key: "_setCodecOrder",
|
|
value: function (e) {
|
|
if (this._config.audioEncodings) {
|
|
var t = Array.from(this._config.audioEncodings, function (e) {
|
|
return e.codec.name
|
|
});
|
|
e = d.reorderCodecs(e, "audio", t)
|
|
}
|
|
if (this._config.videoEncodings) {
|
|
var n = Array.from(this._config.videoEncodings, function (e) {
|
|
return e.codec.name
|
|
});
|
|
e = d.reorderCodecs(e, "video", n)
|
|
}
|
|
return e
|
|
}
|
|
}, {
|
|
key: "_setMaxBitrate",
|
|
value: function (e, t) {
|
|
return "object" === p(t.audioEncodings) && (e = d.setMaxBitrate(e, t.audioEncodings)),
|
|
"object" === p(t.videoEncodings) && (e = d.setMaxBitrate(e, t.videoEncodings)),
|
|
e
|
|
}
|
|
}, {
|
|
key: "_setRtpSenderOptions",
|
|
value: function (e, t) {
|
|
return e = this._setMaxBitrate(e, t)
|
|
}
|
|
}, {
|
|
key: "_setRtpReceiverOptions",
|
|
value: function (e) {
|
|
return e = this._setCodecOrder(e)
|
|
}
|
|
}, {
|
|
key: "_createAndSendOffer",
|
|
value: function () {
|
|
var e, t = this;
|
|
this._pc ? (this._isNegotiationNeeded = !1,
|
|
this._isCaller = !0,
|
|
this._pc.createOffer().then(function (n) {
|
|
if (n.sdp = t._setRtpReceiverOptions(n.sdp),
|
|
e = n,
|
|
"stable" === t._pc.signalingState)
|
|
return t._pc.setLocalDescription(n).then(function () {
|
|
return t._sendSdp(e)
|
|
})
|
|
}).catch(function (e) {
|
|
i.default.error(e.message + " Please check your codec settings.");
|
|
var n = new c.P2PError(c.errors.P2P_WEBRTC_SDP, e.message);
|
|
t._stop(n, !0)
|
|
})) : i.default.error("Peer connection have not been created.")
|
|
}
|
|
}, {
|
|
key: "_createAndSendAnswer",
|
|
value: function () {
|
|
var e, t = this;
|
|
this._drainPendingStreams(),
|
|
this._isNegotiationNeeded = !1,
|
|
this._isCaller = !1,
|
|
this._pc.createAnswer().then(function (n) {
|
|
return n.sdp = t._setRtpReceiverOptions(n.sdp),
|
|
e = n,
|
|
t._logCurrentAndPendingLocalDescription(),
|
|
t._pc.setLocalDescription(n)
|
|
}).then(function () {
|
|
return t._sendSdp(e)
|
|
}).catch(function (e) {
|
|
i.default.error(e.message + " Please check your codec settings.");
|
|
var n = new c.P2PError(c.errors.P2P_WEBRTC_SDP, e.message);
|
|
t._stop(n, !0)
|
|
})
|
|
}
|
|
}, {
|
|
key: "_logCurrentAndPendingLocalDescription",
|
|
value: function () {
|
|
i.default.info("Current description: " + this._pc.currentLocalDescription),
|
|
i.default.info("Pending description: " + this._pc.pendingLocalDescription)
|
|
}
|
|
}, {
|
|
key: "_getAndDeleteTrackSourceInfo",
|
|
value: function (e) {
|
|
if (e.length > 0) {
|
|
var t = e[0].id;
|
|
if (this._remoteTrackSourceInfo.has(t)) {
|
|
var n = this._remoteTrackSourceInfo.get(t);
|
|
return this._remoteTrackSourceInfo.delete(t),
|
|
n
|
|
}
|
|
i.default.warning("Cannot find source info for " + t)
|
|
}
|
|
}
|
|
}, {
|
|
key: "_unpublish",
|
|
value: function (e) {
|
|
var t = this;
|
|
return navigator.mozGetUserMedia || !this._remoteSideSupportsRemoveStream ? (i.default.error("Stopping a publication is not supported on Firefox. Please use P2PClient.stop() to stop the connection with remote endpoint."),
|
|
Promise.reject(new c.P2PError(c.errors.P2P_CLIENT_UNSUPPORTED_METHOD))) : this._publishedStreams.has(e) ? (this._pendingUnpublishStreams.push(e),
|
|
new Promise(function (n, r) {
|
|
t._unpublishPromises.set(e.mediaStream.id, {
|
|
resolve: n,
|
|
reject: r
|
|
}),
|
|
t._drainPendingStreams()
|
|
}
|
|
)) : Promise.reject(new c.P2PError(c.errors.P2P_CLIENT_ILLEGAL_ARGUMENT))
|
|
}
|
|
}, {
|
|
key: "_createDataChannel",
|
|
value: function (e) {
|
|
if (this._dataChannels.has(e))
|
|
i.default.warning("Data channel labeled " + e + " already exists.");
|
|
else if (this._pc) {
|
|
i.default.debug("Create data channel.");
|
|
var t = this._pc.createDataChannel(e);
|
|
this._bindEventsToDataChannel(t),
|
|
this._dataChannels.set(w, t),
|
|
this._onNegotiationneeded()
|
|
} else
|
|
i.default.debug("PeerConnection is not available before creating DataChannel.")
|
|
}
|
|
}, {
|
|
key: "_bindEventsToDataChannel",
|
|
value: function (e) {
|
|
var t = this;
|
|
e.onmessage = function (e) {
|
|
t._onDataChannelMessage.apply(t, [e])
|
|
}
|
|
,
|
|
e.onopen = function (e) {
|
|
t._onDataChannelOpen.apply(t, [e])
|
|
}
|
|
,
|
|
e.onclose = function (e) {
|
|
t._onDataChannelClose.apply(t, [e])
|
|
}
|
|
,
|
|
e.onerror = function (e) {
|
|
i.default.debug("Data Channel Error:", error)
|
|
}
|
|
}
|
|
}, {
|
|
key: "_getStreamByTrack",
|
|
value: function (e) {
|
|
var t = []
|
|
, n = !0
|
|
, r = !1
|
|
, i = void 0;
|
|
try {
|
|
for (var o, a = this._remoteStreamInfo[Symbol.iterator](); !(n = (o = a.next()).done); n = !0) {
|
|
var s = f(o.value, 2)
|
|
, c = (s[0],
|
|
s[1]);
|
|
if (c.stream && c.stream.mediaStream) {
|
|
var u = !0
|
|
, d = !1
|
|
, l = void 0;
|
|
try {
|
|
for (var p, h = c.stream.mediaStream.getTracks()[Symbol.iterator](); !(u = (p = h.next()).done); u = !0) {
|
|
e === p.value && t.push(c.stream.mediaStream)
|
|
}
|
|
} catch (e) {
|
|
d = !0,
|
|
l = e
|
|
} finally {
|
|
try {
|
|
u || null == h.return || h.return()
|
|
} finally {
|
|
if (d)
|
|
throw l
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} catch (e) {
|
|
r = !0,
|
|
i = e
|
|
} finally {
|
|
try {
|
|
n || null == a.return || a.return()
|
|
} finally {
|
|
if (r)
|
|
throw i
|
|
}
|
|
}
|
|
return t
|
|
}
|
|
}, {
|
|
key: "_areAllTracksEnded",
|
|
value: function (e) {
|
|
var t = !0
|
|
, n = !1
|
|
, r = void 0;
|
|
try {
|
|
for (var i, o = e.getTracks()[Symbol.iterator](); !(t = (i = o.next()).done); t = !0) {
|
|
if ("live" === i.value.readyState)
|
|
return !1
|
|
}
|
|
} catch (e) {
|
|
n = !0,
|
|
r = e
|
|
} finally {
|
|
try {
|
|
t || null == o.return || o.return()
|
|
} finally {
|
|
if (n)
|
|
throw r
|
|
}
|
|
}
|
|
return !0
|
|
}
|
|
}, {
|
|
key: "_stop",
|
|
value: function (e, t) {
|
|
var n = e;
|
|
n || (n = new c.P2PError(c.errors.P2P_CLIENT_UNKNOWN));
|
|
var r = !0
|
|
, a = !1
|
|
, s = void 0;
|
|
try {
|
|
for (var u, d = this._dataChannels[Symbol.iterator](); !(r = (u = d.next()).done); r = !0) {
|
|
var l = f(u.value, 2);
|
|
l[0];
|
|
l[1].close()
|
|
}
|
|
} catch (e) {
|
|
a = !0,
|
|
s = e
|
|
} finally {
|
|
try {
|
|
r || null == d.return || d.return()
|
|
} finally {
|
|
if (a)
|
|
throw s
|
|
}
|
|
}
|
|
this._dataChannels.clear(),
|
|
this._pc && "closed" !== this._pc.iceConnectionState && this._pc.close();
|
|
var p = !0
|
|
, h = !1
|
|
, v = void 0;
|
|
try {
|
|
for (var m, _ = this._publishPromises[Symbol.iterator](); !(p = (m = _.next()).done); p = !0) {
|
|
var g = f(m.value, 2);
|
|
g[0];
|
|
g[1].reject(n)
|
|
}
|
|
} catch (e) {
|
|
h = !0,
|
|
v = e
|
|
} finally {
|
|
try {
|
|
p || null == _.return || _.return()
|
|
} finally {
|
|
if (h)
|
|
throw v
|
|
}
|
|
}
|
|
this._publishPromises.clear();
|
|
var b = !0
|
|
, y = !1
|
|
, S = void 0;
|
|
try {
|
|
for (var P, w = this._unpublishPromises[Symbol.iterator](); !(b = (P = w.next()).done); b = !0) {
|
|
var E = f(P.value, 2);
|
|
E[0];
|
|
E[1].reject(n)
|
|
}
|
|
} catch (e) {
|
|
y = !0,
|
|
S = e
|
|
} finally {
|
|
try {
|
|
b || null == w.return || w.return()
|
|
} finally {
|
|
if (y)
|
|
throw S
|
|
}
|
|
}
|
|
this._unpublishPromises.clear();
|
|
var j = !0
|
|
, C = !1
|
|
, T = void 0;
|
|
try {
|
|
for (var k, I = this._sendDataPromises[Symbol.iterator](); !(j = (k = I.next()).done); j = !0) {
|
|
var R = f(k.value, 2);
|
|
R[0];
|
|
R[1].reject(n)
|
|
}
|
|
} catch (e) {
|
|
C = !0,
|
|
T = e
|
|
} finally {
|
|
try {
|
|
j || null == I.return || I.return()
|
|
} finally {
|
|
if (C)
|
|
throw T
|
|
}
|
|
}
|
|
if (this._sendDataPromises.clear(),
|
|
this._publishedStreams.forEach(function (e) {
|
|
e.dispatchEvent(new o.OwtEvent("ended"))
|
|
}),
|
|
this._publishedStreams.clear(),
|
|
this._remoteStreams.forEach(function (e) {
|
|
e.dispatchEvent(new o.OwtEvent("ended"))
|
|
}),
|
|
this._remoteStreams = [],
|
|
!this._disposed) {
|
|
var M;
|
|
if (t)
|
|
e && ((M = JSON.parse(JSON.stringify(e))).message = "Error happened at remote side."),
|
|
this._sendSignalingMessage(O, M).catch(function (e) {
|
|
i.default.debug("Failed to send close." + e.message)
|
|
});
|
|
this.dispatchEvent(new Event("ended"))
|
|
}
|
|
}
|
|
}, {
|
|
key: "_setStreamToRemoteStreamInfo",
|
|
value: function (e) {
|
|
var t = this._remoteStreamInfo.get(e.id)
|
|
, n = t.attributes
|
|
, r = new u.StreamSourceInfo(this._remoteStreamInfo.get(e.id).source.audio, this._remoteStreamInfo.get(e.id).source.video);
|
|
t.stream = new u.RemoteStream(void 0, this._remoteId, e, r, n),
|
|
t.mediaStream = e;
|
|
var o = t.stream;
|
|
o ? this._remoteStreams.push(o) : i.default.warning("Failed to create RemoteStream.")
|
|
}
|
|
}, {
|
|
key: "_checkIceConnectionStateAndFireEvent",
|
|
value: function () {
|
|
var e = this;
|
|
if ("connected" === this._pc.iceConnectionState || "completed" === this._pc.iceConnectionState) {
|
|
var t = !0
|
|
, n = !1
|
|
, r = void 0;
|
|
try {
|
|
for (var i, o = this._remoteStreamInfo[Symbol.iterator](); !(t = (i = o.next()).done); t = !0) {
|
|
var a = f(i.value, 2)
|
|
, s = (a[0],
|
|
a[1]);
|
|
if (s.mediaStream) {
|
|
var c = new u.StreamEvent("streamadded", {
|
|
stream: s.stream
|
|
});
|
|
if (this._isUnifiedPlan()) {
|
|
var d = !0
|
|
, l = !1
|
|
, p = void 0;
|
|
try {
|
|
for (var h, v = s.mediaStream.getTracks()[Symbol.iterator](); !(d = (h = v.next()).done); d = !0) {
|
|
h.value.addEventListener("ended", function (t) {
|
|
var n = e._getStreamByTrack(t.target)
|
|
, r = !0
|
|
, i = !1
|
|
, o = void 0;
|
|
try {
|
|
for (var a, s = n[Symbol.iterator](); !(r = (a = s.next()).done); r = !0) {
|
|
var c = a.value;
|
|
e._areAllTracksEnded(c) && e._onRemoteStreamRemoved(c)
|
|
}
|
|
} catch (e) {
|
|
i = !0,
|
|
o = e
|
|
} finally {
|
|
try {
|
|
r || null == s.return || s.return()
|
|
} finally {
|
|
if (i)
|
|
throw o
|
|
}
|
|
}
|
|
})
|
|
}
|
|
} catch (e) {
|
|
l = !0,
|
|
p = e
|
|
} finally {
|
|
try {
|
|
d || null == v.return || v.return()
|
|
} finally {
|
|
if (l)
|
|
throw p
|
|
}
|
|
}
|
|
}
|
|
this._sendSignalingMessage(T, s.trackIds),
|
|
this._remoteStreamInfo.get(s.mediaStream.id).mediaStream = null,
|
|
this.dispatchEvent(c)
|
|
}
|
|
}
|
|
} catch (e) {
|
|
n = !0,
|
|
r = e
|
|
} finally {
|
|
try {
|
|
t || null == o.return || o.return()
|
|
} finally {
|
|
if (n)
|
|
throw r
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}]) && h(n.prototype, r),
|
|
l && h(n, l),
|
|
t
|
|
}();
|
|
n.default = A
|
|
}
|
|
, {
|
|
"../base/event.js": 3,
|
|
"../base/logger.js": 5,
|
|
"../base/publication.js": 8,
|
|
"../base/sdputils.js": 9,
|
|
"../base/stream.js": 10,
|
|
"../base/utils.js": 11,
|
|
"./error.js": 23
|
|
}]
|
|
}, {}, [22])(22)
|
|
}));
|