@techsee/techsee-media-service 6.1.0 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -28
- package/lib/LocalStreamManager.d.ts.map +1 -1
- package/lib/LocalStreamManager.js +9 -8
- package/lib/LocalStreamManager.js.map +1 -1
- package/lib/MediaContracts.d.ts.map +1 -1
- package/lib/MediaPublisher.d.ts.map +1 -1
- package/lib/MediaPublisher.js.map +1 -1
- package/lib/MediaServiceBase.d.ts.map +1 -1
- package/lib/MediaServiceBase.js +2 -0
- package/lib/MediaServiceBase.js.map +1 -1
- package/lib/MediaSession/MediaServer.d.ts.map +1 -1
- package/lib/MediaSession/MediaServer.js.map +1 -1
- package/lib/MediaSession/MediaSessionBase.d.ts.map +1 -1
- package/lib/MediaSession/MediaSessionBase.js.map +1 -1
- package/lib/MediaSession/SessionOpentok.d.ts.map +1 -1
- package/lib/MediaSession/SessionOpentok.js.map +1 -1
- package/lib/MediaSession/SessionTurn.d.ts.map +1 -1
- package/lib/MediaSession/SessionTurn.js +5 -5
- package/lib/MediaSession/SessionTurn.js.map +1 -1
- package/lib/MediaSubscriber.d.ts.map +1 -1
- package/lib/MediaSubscriber.js.map +1 -1
- package/lib/MediaUtils/Compatibility.d.ts.map +1 -1
- package/lib/MediaUtils/Compatibility.js +2 -1
- package/lib/MediaUtils/Compatibility.js.map +1 -1
- package/lib/MediaUtils/MediaDomUtils.d.ts.map +1 -1
- package/lib/MediaUtils/MediaDomUtils.js +2 -1
- package/lib/MediaUtils/MediaDomUtils.js.map +1 -1
- package/lib/MultiParty/Contracts.d.ts.map +1 -1
- package/lib/MultiParty/DetectWebRtcService.d.ts.map +1 -1
- package/lib/MultiParty/MediaCapabilitiesService.d.ts.map +1 -1
- package/lib/MultiParty/MediaCapabilitiesService.js +42 -23
- package/lib/MultiParty/MediaCapabilitiesService.js.map +1 -1
- package/lib/MultiParty/MediaCapabilitiesUtils.d.ts.map +1 -1
- package/lib/MultiParty/MultiPartyService.d.ts.map +1 -1
- package/lib/MultiParty/MultiPartyServiceFactory.d.ts.map +1 -1
- package/lib/MultiParty/OpentokMultiPartyService.d.ts.map +1 -1
- package/lib/MultiParty/OpentokMultiPartyService.js +27 -29
- package/lib/MultiParty/OpentokMultiPartyService.js.map +1 -1
- package/lib/MultiParty/VideoLayoutType.d.ts.map +1 -1
- package/lib/MultiParty/index.d.ts +1 -1
- package/lib/MultiParty/index.d.ts.map +1 -1
- package/lib/MultiParty/index.js +3 -16
- package/lib/MultiParty/index.js.map +1 -1
- package/lib/MultiParty/opentok.d.ts +407 -457
- package/lib/TechseeMediaStream.d.ts.map +1 -1
- package/lib/TechseeMediaStream.js.map +1 -1
- package/lib/qos/raw-qos.js.map +1 -1
- package/package.json +21 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MultiParty/MediaCapabilitiesService.js"],"names":["__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","apply","__generator","body","_","label","sent","t","trys","ops","f","y","g","verb","Symbol","iterator","n","v","op","TypeError","call","pop","length","push","__importDefault","mod","__esModule","Object","defineProperty","exports","MediaCapabilitiesService","MediaTracer_1","require","DetectWebRtcService_1","filter_1","ts_environment_detect_1","MediaConstants_1","last_1","first_1","get_1","trace","getMediaTracer","enumerateMediaDevices","navigator","mediaDevices","enumerateDevices","environmentService","TsEnvironmentDetect","getInstance","_a","instance","_initPromise","init","err","error","JSON","stringify","err_1","_b","detectWebRtcService","DetectWebRtcService","DETECT_RTC_ADVISED_TIMEOUT","getWebRtcInfo","webRtcSupportInfo","setDevicesList","info","prototype","hasCamera","devicesList","video","hasGetUserMediaSupported","hasMicrophone","isIOS","audio","hasWebRTC","isWebRTCSupported","isGetUserMediaSupported","setGroupedDevices","groupedDevices","CameraTypes","BACK","FRONT","_supportSwitchCamera","_backCameraDeviceId","_frontCameraDeviceId","localDevicesList","device","kind","toLowerCase","get","enumerable","configurable"],"mappings":"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","file":"MediaCapabilitiesService.js","sourcesContent":["\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MediaCapabilitiesService = void 0;\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar DetectWebRtcService_1 = require(\"./DetectWebRtcService\");\nvar filter_1 = __importDefault(require(\"lodash/filter\"));\nvar ts_environment_detect_1 = require(\"@techsee/techsee-common/lib/helpers/ts-environment-detect\");\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar last_1 = __importDefault(require(\"lodash/last\"));\nvar first_1 = __importDefault(require(\"lodash/first\"));\nvar get_1 = __importDefault(require(\"lodash/get\"));\nvar trace = MediaTracer_1.getMediaTracer('MediaCapabilitiesService');\nfunction enumerateMediaDevices() {\n return new Promise(function (resolve, reject) {\n if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices().then(resolve).catch(reject);\n }\n return resolve([]);\n });\n}\nvar MediaCapabilitiesService = /** @class */ (function () {\n function MediaCapabilitiesService() {\n this.environmentService = new ts_environment_detect_1.TsEnvironmentDetect();\n }\n MediaCapabilitiesService.getInstance = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n try {\n if (this.instance) {\n return [2 /*return*/, this.instance];\n }\n if (this._initPromise) {\n return [2 /*return*/, this._initPromise];\n }\n this._initPromise = this.init();\n return [2 /*return*/, this._initPromise];\n }\n catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n return [2 /*return*/];\n });\n });\n };\n MediaCapabilitiesService.init = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, err_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 3, , 4]);\n this.instance = new MediaCapabilitiesService();\n this.detectWebRtcService = new DetectWebRtcService_1.DetectWebRtcService(DetectWebRtcService_1.DETECT_RTC_ADVISED_TIMEOUT);\n _a = this;\n return [4 /*yield*/, this.detectWebRtcService.getWebRtcInfo()];\n case 1:\n _a.webRtcSupportInfo = _b.sent();\n return [4 /*yield*/, this.setDevicesList()];\n case 2:\n _b.sent();\n trace.info('initialize media capabilities helper successfully');\n return [2 /*return*/, this.instance];\n case 3:\n err_1 = _b.sent();\n trace.error(JSON.stringify(err_1));\n throw err_1;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n MediaCapabilitiesService.prototype.hasCamera = function () {\n return MediaCapabilitiesService.devicesList.video.length > 0 && this.hasGetUserMediaSupported();\n };\n MediaCapabilitiesService.prototype.hasMicrophone = function () {\n return this.environmentService.isIOS()\n ? this.hasGetUserMediaSupported()\n : MediaCapabilitiesService.devicesList.audio.length > 0 && this.hasGetUserMediaSupported();\n };\n MediaCapabilitiesService.prototype.hasWebRTC = function () {\n return MediaCapabilitiesService.webRtcSupportInfo.isWebRTCSupported;\n };\n MediaCapabilitiesService.prototype.hasGetUserMediaSupported = function () {\n return MediaCapabilitiesService.webRtcSupportInfo.isGetUserMediaSupported;\n };\n MediaCapabilitiesService.setGroupedDevices = function () {\n var _a;\n trace.info('setGroupedDevices', this.devicesList);\n this.groupedDevices = {\n video: this.devicesList.video\n ? (_a = {}, _a[MediaConstants_1.CameraTypes.BACK] = last_1.default(this.devicesList.video), _a[MediaConstants_1.CameraTypes.FRONT] = first_1.default(this.devicesList.video), _a) : null,\n audio: last_1.default(this.devicesList.audio) || null\n };\n this._supportSwitchCamera = this.devicesList.video.length > 1;\n this._backCameraDeviceId = get_1.default(this.groupedDevices, \"video.\" + MediaConstants_1.CameraTypes.BACK + \".deviceId\") || '';\n this._frontCameraDeviceId = get_1.default(this.groupedDevices, \"video.\" + MediaConstants_1.CameraTypes.FRONT + \".deviceId\") || '';\n };\n MediaCapabilitiesService.setDevicesList = function () {\n return __awaiter(this, void 0, void 0, function () {\n var localDevicesList, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this.webRtcSupportInfo.isWebRTCSupported) return [3 /*break*/, 2];\n return [4 /*yield*/, enumerateMediaDevices()];\n case 1:\n _a = _b.sent();\n return [3 /*break*/, 3];\n case 2:\n _a = [];\n _b.label = 3;\n case 3:\n localDevicesList = _a;\n this.devicesList = {\n video: filter_1.default(localDevicesList, function (device) { return device.kind.toLowerCase() === 'videoinput'; }),\n audio: filter_1.default(localDevicesList, function (device) { return device.kind.toLowerCase() === 'audioinput'; })\n };\n this.setGroupedDevices();\n return [2 /*return*/];\n }\n });\n });\n };\n Object.defineProperty(MediaCapabilitiesService.prototype, \"supportSwitchCamera\", {\n get: function () {\n return MediaCapabilitiesService._supportSwitchCamera;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MediaCapabilitiesService.prototype, \"backCameraDeviceId\", {\n get: function () {\n return MediaCapabilitiesService._backCameraDeviceId;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MediaCapabilitiesService.prototype, \"frontCameraDeviceId\", {\n get: function () {\n return MediaCapabilitiesService._frontCameraDeviceId;\n },\n enumerable: false,\n configurable: true\n });\n MediaCapabilitiesService.groupedDevices = { video: null, audio: null };\n return MediaCapabilitiesService;\n}());\nexports.MediaCapabilitiesService = MediaCapabilitiesService;\n\n//# sourceMappingURL=MediaCapabilitiesService.js.map\n"]}
|
|
1
|
+
{"version":3,"sources":["MultiParty/MediaCapabilitiesService.js"],"names":["__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","apply","__generator","body","_","label","sent","t","trys","ops","f","y","g","verb","Symbol","iterator","n","v","op","TypeError","call","pop","length","push","__importDefault","mod","__esModule","Object","defineProperty","exports","MediaCapabilitiesService","MediaTracer_1","require","DetectWebRtcService_1","filter_1","ts_environment_detect_1","MediaConstants_1","last_1","first_1","get_1","trace","getMediaTracer","enumerateMediaDevices","navigator","mediaDevices","enumerateDevices","environmentService","TsEnvironmentDetect","getInstance","err_1","_a","instance","_initPromise","init","error","JSON","stringify","err_2","_b","detectWebRtcService","DetectWebRtcService","DETECT_RTC_ADVISED_TIMEOUT","getWebRtcInfo","webRtcSupportInfo","setDevicesList","info","prototype","hasCamera","devicesList","video","hasGetUserMediaSupported","hasMicrophone","isIOS","audio","hasWebRTC","isWebRTCSupported","isGetUserMediaSupported","setGroupedDevices","groupedDevices","CameraTypes","BACK","FRONT","_supportSwitchCamera","_backCameraDeviceId","_frontCameraDeviceId","localDevicesList","device","kind","toLowerCase","get","enumerable","configurable"],"mappings":"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","file":"MediaCapabilitiesService.js","sourcesContent":["\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MediaCapabilitiesService = void 0;\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar DetectWebRtcService_1 = require(\"./DetectWebRtcService\");\nvar filter_1 = __importDefault(require(\"lodash/filter\"));\nvar ts_environment_detect_1 = require(\"@techsee/techsee-common/lib/helpers/ts-environment-detect\");\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar last_1 = __importDefault(require(\"lodash/last\"));\nvar first_1 = __importDefault(require(\"lodash/first\"));\nvar get_1 = __importDefault(require(\"lodash/get\"));\nvar trace = MediaTracer_1.getMediaTracer('MediaCapabilitiesService');\nfunction enumerateMediaDevices() {\n return new Promise(function (resolve, reject) {\n if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices().then(resolve).catch(reject);\n }\n return resolve([]);\n });\n}\nvar MediaCapabilitiesService = /** @class */ (function () {\n function MediaCapabilitiesService() {\n this.environmentService = new ts_environment_detect_1.TsEnvironmentDetect();\n }\n MediaCapabilitiesService.getInstance = function () {\n return __awaiter(this, void 0, void 0, function () {\n var err_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 4, , 5]);\n if (this.instance) {\n return [2 /*return*/, this.instance];\n }\n if (!this._initPromise) return [3 /*break*/, 2];\n return [4 /*yield*/, this._initPromise];\n case 1: return [2 /*return*/, _a.sent()];\n case 2:\n this._initPromise = this.init();\n return [4 /*yield*/, this._initPromise];\n case 3: return [2 /*return*/, _a.sent()];\n case 4:\n err_1 = _a.sent();\n trace.error(JSON.stringify(err_1));\n throw err_1;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n MediaCapabilitiesService.init = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, err_2;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 3, , 4]);\n this.instance = new MediaCapabilitiesService();\n this.detectWebRtcService = new DetectWebRtcService_1.DetectWebRtcService(DetectWebRtcService_1.DETECT_RTC_ADVISED_TIMEOUT);\n _a = this;\n return [4 /*yield*/, this.detectWebRtcService.getWebRtcInfo()];\n case 1:\n _a.webRtcSupportInfo = _b.sent();\n return [4 /*yield*/, this.setDevicesList()];\n case 2:\n _b.sent();\n trace.info('initialize media capabilities helper successfully');\n return [2 /*return*/, this.instance];\n case 3:\n err_2 = _b.sent();\n trace.error(JSON.stringify(err_2));\n throw err_2;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n MediaCapabilitiesService.prototype.hasCamera = function () {\n return MediaCapabilitiesService.devicesList.video.length > 0 && this.hasGetUserMediaSupported();\n };\n MediaCapabilitiesService.prototype.hasMicrophone = function () {\n return this.environmentService.isIOS()\n ? this.hasGetUserMediaSupported()\n : MediaCapabilitiesService.devicesList.audio.length > 0 && this.hasGetUserMediaSupported();\n };\n MediaCapabilitiesService.prototype.hasWebRTC = function () {\n return MediaCapabilitiesService.webRtcSupportInfo.isWebRTCSupported;\n };\n MediaCapabilitiesService.prototype.hasGetUserMediaSupported = function () {\n return MediaCapabilitiesService.webRtcSupportInfo.isGetUserMediaSupported;\n };\n MediaCapabilitiesService.setGroupedDevices = function () {\n var _a;\n trace.info('setGroupedDevices', this.devicesList);\n this.groupedDevices = {\n video: this.devicesList.video\n ? (_a = {}, _a[MediaConstants_1.CameraTypes.BACK] = last_1.default(this.devicesList.video), _a[MediaConstants_1.CameraTypes.FRONT] = first_1.default(this.devicesList.video), _a) : null,\n audio: last_1.default(this.devicesList.audio) || null\n };\n this._supportSwitchCamera = this.devicesList.video.length > 1;\n this._backCameraDeviceId = get_1.default(this.groupedDevices, \"video.\" + MediaConstants_1.CameraTypes.BACK + \".deviceId\") || '';\n this._frontCameraDeviceId = get_1.default(this.groupedDevices, \"video.\" + MediaConstants_1.CameraTypes.FRONT + \".deviceId\") || '';\n };\n MediaCapabilitiesService.setDevicesList = function () {\n return __awaiter(this, void 0, void 0, function () {\n var localDevicesList, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this.webRtcSupportInfo.isWebRTCSupported) return [3 /*break*/, 2];\n return [4 /*yield*/, enumerateMediaDevices()];\n case 1:\n _a = _b.sent();\n return [3 /*break*/, 3];\n case 2:\n _a = [];\n _b.label = 3;\n case 3:\n localDevicesList = _a;\n this.devicesList = {\n video: filter_1.default(localDevicesList, function (device) { return device.kind.toLowerCase() === 'videoinput'; }),\n audio: filter_1.default(localDevicesList, function (device) { return device.kind.toLowerCase() === 'audioinput'; })\n };\n this.setGroupedDevices();\n return [2 /*return*/];\n }\n });\n });\n };\n Object.defineProperty(MediaCapabilitiesService.prototype, \"supportSwitchCamera\", {\n get: function () {\n return MediaCapabilitiesService._supportSwitchCamera;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MediaCapabilitiesService.prototype, \"backCameraDeviceId\", {\n get: function () {\n return MediaCapabilitiesService._backCameraDeviceId;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MediaCapabilitiesService.prototype, \"frontCameraDeviceId\", {\n get: function () {\n return MediaCapabilitiesService._frontCameraDeviceId;\n },\n enumerable: false,\n configurable: true\n });\n MediaCapabilitiesService.groupedDevices = { video: null, audio: null };\n return MediaCapabilitiesService;\n}());\nexports.MediaCapabilitiesService = MediaCapabilitiesService;\n\n//# sourceMappingURL=MediaCapabilitiesService.js.map\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MultiParty/MediaCapabilitiesUtils.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,QAAO,OAIhC,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/MultiParty/MediaCapabilitiesUtils.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,QAAO,OAIhC,CAAC;AAEF,eAAO,MAAM,WAAW,QAAa,QAAQ,OAAO,CAQnD,CAAC;AAEF,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAQ/D;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAQ/D;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,OAAO,CAAC,CAQjE","file":"MediaCapabilitiesUtils.d.ts","sourcesContent":["import {TsEnvironmentDetect} from '@techsee/techsee-common/lib/helpers/ts-environment-detect';\nimport {getMediaTracer} from '../MediaUtils';\nimport {MediaCapabilitiesService} from './MediaCapabilitiesService';\n\nconst trace = getMediaTracer('MediaCapabilitiesUtils');\n\nexport const checkIsMobile = (): boolean => {\n const environmentService = new TsEnvironmentDetect();\n\n return environmentService.isMobile();\n};\n\nexport const checkWebRtc = async (): Promise<boolean> => {\n try {\n return (await MediaCapabilitiesService.getInstance()).hasWebRTC();\n } catch (err) {\n trace.error(JSON.stringify(err));\n }\n\n return false;\n};\n\nexport async function checkVideoCapabilities(): Promise<boolean> {\n try {\n return (await MediaCapabilitiesService.getInstance()).hasCamera();\n } catch (err) {\n trace.error(JSON.stringify(err));\n }\n\n return false;\n}\n\nexport async function checkAudioCapabilities(): Promise<boolean> {\n try {\n return (await MediaCapabilitiesService.getInstance()).hasMicrophone();\n } catch (err) {\n trace.error(JSON.stringify(err));\n }\n\n return false;\n}\n\nexport async function checkSupportSwitchCamera(): Promise<boolean> {\n try {\n return (await MediaCapabilitiesService.getInstance()).supportSwitchCamera;\n } catch (err) {\n trace.error(JSON.stringify(err));\n }\n\n return false;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MultiParty/MultiPartyService.ts"],"names":[],"mappings":";AAAA,OAAO,
|
|
1
|
+
{"version":3,"sources":["../src/MultiParty/MultiPartyService.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAG5C,eAAO,MAAM,kBAAkB,uqLACyoL,CAAC;AAEzqL,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,oBAAY,kBAAkB;IAC1B,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,iBAAiB,sBAAsB;IACvC,mBAAmB,wBAAwB;IAC3C,aAAa,kBAAkB;IAC/B,mBAAmB,wBAAwB;IAC3C,yBAAyB,8BAA8B;IACvD,gBAAgB,qBAAqB;IACrC,uBAAuB,4BAA4B;IACnD,mBAAmB,wBAAwB;CAC9C;AAID,oBAAY,OAAO,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,kBAAkB,GAAG;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,oBAAY,eAAe,GAAG;IAC1B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,EAAE,kBAAkB,GAAG;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,CAAC;IAChD,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,aAAK,UAAU,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,eAAe,KAAK,IAAI,KAAK,IAAI,CAAC;AACzF,oBAAY,oBAAoB,GAAG;IAC/B,UAAU,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,oBAAY,cAAc,GAAG;IACzB,UAAU,EAAE,oBAAoB,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,iBAAiB,GAAG,SAAS,CAAC;CAC7C,CAAC;AAEF,8BAAsB,iBAAkB,SAAQ,YAAY;IAmB5C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAlBxD,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;IAEjD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAEjC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAEtC,QAAQ,CAAC,UAAU,IAAI,IAAI;IAE3B,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtE,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAEtC,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAEzD,QAAQ,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAEjE,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;gBAE3B,QAAQ,EAAE,eAAe;CAG3D","file":"MultiPartyService.d.ts","sourcesContent":["import {EventEmitter} from 'events';\nimport {SessionClientRole} from '../MediaConstants';\nimport {SessionSettings} from './Contracts';\n\n// eslint-disable-next-line max-len\nexport const DEFAULT_AVATAR_URI =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQcAAAFKCAYAAAAQbZoVAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABB+SURBVHgB7d3NbxzlAcfxJ9jrtXFiE4MdQhOE1NALnBJUQbjwciDJBfVC20NVVaIvEgf4r4C0asWFwqFApRIuJD006aExQoqjgu3EiZM4fo87v3FXMuufvbO7MzvPbL4fyUoxTYC1/d3neeaZZw689+4734at8EwAgB0eCQBgEAcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcA1mBAX3vkkUfCwMBAqA0NhaHaUPrXg4OD6ecaf18fzTY2NsKDBw/C1tZW8utmWFtbDxubG2FzczOsr62lfw/9jTj0mXq9HoaSENSSEOh/KwSdaP59IyM//PuKx/r6WlhdXQ1r6+thdWUloL8Qh4rTu/5w8pM7XB9OfoBH7CigCIqHPkZGHk3/WiOJ1dWVsLy8nH4wsqg+4lBBCoBGBYcOHUpHCL0Kwn7076BQNGKxvHw/jcTS0lJANRGHChkYHAgHRw+GgwcPRRGE/TRCMTY2nk49Fu/cDpsbmwHVQRwqQKOE8fHx5NfhUDWN6cfo6Gg6ili6v8T6REUQh4hVOQqOAqEPjSRuLtxgJBE54hAhTR8en3i8b6LQTNF76uiP0pEE0414EYeIaB1Bi4xVWFPIQ2MkcefOYlhcXAyIC3GIhN5NJ5LRQqf7EqpMi5aPPjoaFm4tsB4REeJQMo0QtK6g0cLDTFGcmpwKd+/eDbdv3wooH3EokdYWpiaPPJSjhb1oWqXNXHPzs6xFlIwbr0qiufaTR44SBkOviV4bhQLl4TuzBJpjayqBvWm69dhjh9NfWawsB3Hooe1v+MeSUcPBgGwU0lqtFhYWFrhfo8eYVvSI1hcmkwU3wtA+bcPWa6fXEL1DHHqgsfCoW6nRGb12eg0JRO8Qh4JxRSI/25c7CUSvEIcCEYb8EYjeIQ4F0eLjE49PEoYC6DXVa/swbDEvE69uQbQVmjWG4ui11ZUfFIc4FECX30aaD11E7nTlh/0ixSEOOdOuPr5he0ch1m5T5I845EiLZPpmRW9pJyULlPkjDjnSKjqLZL2n15zXPn+8mjk5fPgwVyZKpNeeUVu+iEMOdFDLw34eQwy03lMf7s+j9cpAHHKgy5aIw8ThCaYXOeFV7JKGskwn4qGvBedA5IM4dEEr5Fy2jI+meFy96B5x6ML4GDv0YqRpxeMTTwR0hzh0SO9MbL6JlxaJWZzsDnHo0MRhFiFjN86lza6wktYBPYlquA/elbSYOjU1lb7D1utD6X/XnTt30jMbV1dXwvzcXKiyxuiBZ2F0hjh0oMrTiWPHnw4nTpwIJ559tuWmoTtJJGZmZsI301fDdPJRRRo9zBGHjhCHNlV1rUFROH36dPprVmPJlZjn9PH882kovvrqy3Dl8uVQJRo96GvGMzDaRxzaVLUrFGNjY+HM2XNtRcH+OUkk3jhzLrz00svh/Ifvp9OPqjg4epDj7TvAgmSb9E5UFSdOPBt+9evfdB2GnRSJt3/3h/DS6ZdDVTwsDybOGyOHNmg6UZXdkCdPngqvvPb6vv+f68l6wtzcbJifn0//eiWZm2uhdXJyMlmoPJJE5fiev7cRh68ufBlipzAo6svLywHZEYc26PkJVfDcc8/vGYbV1dVw6eLX6Yf+9360YKn1Bn24xcsqBeLQoTHi0KaBF1/86XvJr2z1a0HvPlW4wUprDG/94pf272mk8Oc//TG9+rC52XqBTvHQ75m+Op1e5tRlz2bHkymL5vPz83Ff9tTXb2npXtja2grIholYRlU5E/Ktn/sw6N19eyGx/YU5/Z5PP/l4zxHCq8koRVGKmeIwzLmebSEOGVVhSqFh/pi5EUw/1HkM/ff6czSf1xWR2A3X2U7dDuKQUexXKfTO7a4g5BWGnX+e1iua6YrIfguYMeBE8PYQhww03479Uph2PDbTdKCIxcIvPv8sucqxe43hdOSXN9OrFtyMlRlxyGBoqBZid/LkC7s+98Vnn4Wi/P3zv+36nEYP9eG4R1i1wfi/lrEgDhnUI5+ral9C81qDRg1F3g+hey6uz1zb9XltvIoZTyHLjjhkUKvF/W5z3OyAvHTxYija9NXd8Tl2LL/dmEWo0g7XshGHFjRPjX1XpNsePWPe1fM2PT2963NTR6ZCzPS1ZCt1NrxKLdRq8Q9Dh808vxdnMWjq0rzLsgrPjhgcYGNwFsShhYGB+A8q3bXe0MM7EHUozE5VGLYPVmCBOQbEoQWOne8/QxUYDcaAOLTA6nb/Yc0hG16lFg4cOBBi1zyN0DSjV/sNmtcYWt3pGQNGg9kQhxaq8C6zaE5lmpws/qqB9lc0q8KhtFVYR4oBcWihCnGYn53d9bnjx4vfb+D+GTo8Bv2BOLRQhSGo229w8tQLoWjunzFzfSbEjjWHbHiV+oD2GzRvZdYlRZ3gVJT0dCizZfubq/EfYU8csuFV6hNuK/Mrr75eyMJkenv4S7vvwJy5Fv+oAdkRhz5x5crlXVcKNHp4882fhbzpfMq9DpVB/yAOfUJhuHDhH7s+r/suNILIiw6UcXdeKgydHEGHeBGHFh48eBCq4p8XL9rbqE+eOtX1FEOjkDfOnrOnTRV1qAzKxW6QFhSH2Bew9IM7OXUkfQbmXhQI/f2PPvpL23sRNPo4c+asnUrI6spqEp/Xtk+qrsAzNTc2NgJaO/Deu+98G7bCMwHW0aNPRXs5U1HQ5UR9tHPDk46mv7jHKGOnTp6vqd2aWv+4dOnrNBoxWltbC7Oz3wfsj5FDC3qXiTEOrd7N9/PjZM1AH1qnmJ+bTc+DbCxmKjJ6PoVGIp3cYal/H0099GCdTz75OB1NxIZnV2RDHFrI8vCXXtMP3hs5HAWvH/7tU6Pz302pSOgZGnmffp2HKq0jlYk4tBDbN1LWMDQ/BTuvh860++dqFNF4BF8sNK1Aa8ShhZi+kfSDuNczMLcXA/+TPrrOXVLU3ZPpcL/DXZP68y8kIwC3TqE/+9jTx9Oj6d1JUFqs1LF1sdyUtbHJgmQWLEi2UBuqhSePHA0xePu3v7drDHqORNZ3Zv3wnnj2RHLl4if7PoRmez1iLv2hzvLQ3QYFyF3uVFTOf/hBiMHcfLLGsrISsD9GDi1sbsSx5uDuZZBP//pxenUgK40qdDJ143Rq3do9PDwchv6/+LiWREAPxu10Q5PWFxaT33vmzA+nPlrX0IN3piO492KdaUUmxKEFrTnEcMVCaw3N9IPYThicIp6O/e/Ll8NUEp3muzZPnjxVehz0tWRBMht2SGZQ9ulGjasKO8W+K1H/bs2vWwxPxFpfXw/IhjhksL5e7jB0aurIrs/FfgekwnDl8r92ff7Y8XIferPCWkNmxCGDtbVy323GxndfLux2OtEL7srGcMlH169vMHLIijhkoGczlDlPdZcHm58XEaPFRX9JtSz6GnKVIjvikNHy8nKISaz3Ley0uhrXVYEqnIwdE+KQEXPV6ltevh+QHXHIaGVlmUtgbarX43ogUGyjv9gRh4wUhrK2UrsNSdpQFDt3dH1Zp0UpDMS9PWyCasO9e3fT3YS9NmeeS6EtytrdeD3So+DTQ2jNNuq5ku6vYErRPuLQBi1olXEy1Pz8fHpZcOcegcbR80UeP583jRrKuPlKuyKXlpYC2sO0og0Kw927d0MZ+uGMxvMflHPjFVcpOkMc2nT/fjnvQDMzM+nJSlWlG8TKWm/gVOzOMK1ok4aouqxZxtqDbmi6fm0mnDl7bt/brWOy3zkQvaDpBAfKdoY4dECnIZURh+1/9mI4/+H76U7Dyamp0v49spi5dq30d+2l+6w1dIo4dEBbl8saPTToh47h8v601sB26c6x5tCh5rMUEZ+FhZsBnSMOHWqMHhAn1hq6Rxy6cOvWArvuIsWUq3vEoQt6Zypr3wP2pjAwaugeceiStlTzjRgPfS3cORJoH3HokqYVCwsLAXFgETI/xCEHWpxkelE+fQ3YKp0f4pAT5rnl0mt/+/atgPwQh5xoeqFnQHD1ovcarz3yRRxyxLtXObQAyagtf8QhZ9p8w2p572g6pytGyB9xKIC+YZeW7gUUS0e/EeLiEIeC3L59u/QnZfUznefJZctiEYeCaJHsxo0bzIULoNf05s0bLP4WjDgUSN/EWkUnEPnhNe0d4lAwvpnzw2vZW8ShBxrf1KxBdE5rDISht4hDj+ibWs9s4KlL7dOVH8LQe8Shh7YXKee5/NYGXRbWjW0sPvYeZ0iWQN/wW1sP0kNie/2AnKpQDLTblIfRlIc4lER3EGqKoUfaDQ7yZdiJhcc48LZVIn3zf/fdf7ndewe9FrOz3xOGCPCWFQENnzWKmJiYeGhHEYqBdjxyHkM8iEMkdGCMRhFahxgfHw8Pi8bzR3XzFIuOcSEOkdFipZ7HqUiMjo6Gfqaj/XWCN1OIOBGHCDWG2ArF4cMTUT/yrhOKgv7bmELEjThErLFqX68Pp6OIqo8kiEK1EIcK0HqEPvSDpelGvV6vzMJlY01BUyWmD9VCHCqkMd0QjSJGRh5NPkZCbBQE3QuhRUaNElhorCbiUFHaOagP7bBUIBQKjSjK2nGpAOhy7IqeIZr8ShCqjzhUnH4IG6EQrU8MDdXSX2u1WmHTD41iNCrQnaYaJbCO0H+IQ59prE80dl1qJFGrDYWBwYEwODCYhGMoHDhwIP28Plw8FJzGO78isLm5uT1VSEKwsb6efo6RQf8jDn1OP8SKReCNHW3i3goAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGARBwAWcQBgEQcAFnEAYBEHABZxAGD9D7w3oqmvc81MAAAAAElFTkSuQmCC';\n\nexport const maxParticipantsNumber = 2;\n\nexport enum MULTI_PARTY_EVENTS {\n connectFailed = 'connectFailed',\n streamDestroyed = 'streamDestroyed',\n connectionCreated = 'connectionCreated',\n connectionDestroyed = 'connectionDestroyed',\n streamCreated = 'streamCreated',\n videoElementCreated = 'videoElementCreated',\n participantsNumberChanged = 'participantsNumberChanged',\n videoAudioStatus = 'videoAudioStatus',\n mediaDeviceAccessDenied = 'mediaDeviceAccessDenied',\n cameraSourceChanged = 'cameraSourceChanged'\n}\n\n// ToDo: SubscriberInfo and GetStatsCb will need to be abstracted. Right now they are OT specific.\n// As a quick temporary fix replace with local redefinition of OT types\nexport type OTError = {\n name: string;\n message: string;\n};\n\nexport type IncomingTrackStats = {\n bytesReceived: number;\n packetsLost: number;\n packetsReceived: number;\n};\n\nexport type SubscriberStats = {\n audio: IncomingTrackStats;\n video: IncomingTrackStats & {frameRate: number};\n timestamp: number;\n};\n\ntype GetStatsCb = (callback: (error?: OTError, stats?: SubscriberStats) => void) => void;\nexport type MultipartySubscriber = {\n getImgData: () => string | null;\n getStats: GetStatsCb;\n};\n\nexport type SubscriberInfo = {\n subscriber: MultipartySubscriber;\n connectionId: string;\n clientRole: SessionClientRole | 'default';\n};\n\nexport abstract class MultiPartyService extends EventEmitter {\n abstract subscribers: Readonly<SubscriberInfo>[];\n\n abstract ownConnectionId: string;\n\n abstract connect(...args: any[]): void;\n\n abstract disconnect(): void;\n\n abstract reinitializeStreams(settings: SessionSettings): Promise<void>;\n\n abstract switchCamera(): Promise<void>;\n\n abstract publishAudio(shouldMute: boolean): Promise<void>;\n\n abstract publishVideo(shouldPublishVideo: boolean): Promise<void>;\n\n abstract takeSnapshot(connectionId: string): string | null;\n\n constructor(protected readonly settings: SessionSettings) {\n super();\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MultiParty/MultiPartyServiceFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAGtD,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"sources":["../src/MultiParty/MultiPartyServiceFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAGtD,eAAO,MAAM,uBAAuB,aACtB,eAAe,8DACuB,MAAM,KACvD,iBAMF,CAAC","file":"MultiPartyServiceFactory.d.ts","sourcesContent":["import {MediaServiceType} from '../MediaConstants';\nimport {SessionSettings} from './Contracts';\nimport {MultiPartyService} from './MultiPartyService';\nimport {OpentokMultiPartyService} from './OpentokMultiPartyService';\n\nexport const createMultiPartyService = (\n settings: SessionSettings,\n getParticipantDomId: (connectionId?: string) => string\n): MultiPartyService => {\n if (settings.mediaServiceType === MediaServiceType.OPENTOK) {\n return new OpentokMultiPartyService(settings, getParticipantDomId);\n }\n\n throw new Error('NOT_SUPPORTED');\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MultiParty/OpentokMultiPartyService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAO7E,OAAO,EAGH,iBAAiB,EACjB,cAAc,EAEjB,MAAM,qBAAqB,CAAC;AAc7B,qBAAa,wBAAyB,SAAQ,iBAAiB;IAQvD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAPrC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,OAAO,CAAC,CAAa;IAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,CAAmB;gBAGhC,QAAQ,EAAE,eAAe,EACR,gBAAgB,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM;IAOxE,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,WAAW,IAAI,cAAc,EAAE,CAElC;IAEM,OAAO,gBAAiB,WAAW,KAAG,IAAI,CA2C/C;IAEK,UAAU,QAAO,IAAI,CAW1B;IAEK,YAAY,iBAAkB,MAAM,KAAG,MAAM,GAAG,IAAI,CAczD;IAEF,OAAO,CAAC,eAAe,CAmCrB;IAEK,YAAY,eAAsB,OAAO,KAAG,QAAQ,IAAI,CAAC,CAmB9D;IAEK,YAAY,uBACK,OAAO,KAC5B,QAAQ,IAAI,CAAC,CAiBd;IAEK,YAAY,QAAa,QAAQ,IAAI,CAAC,CAuC3C;IAEF,OAAO,CAAC,aAAa;IAOrB,aAAa,aAAoB,eAAe,KAAG,QAAQ,IAAI,CAAC,CAmH9D;IAEF,mBAAmB,aAAoB,eAAe,KAAG,QAAQ,IAAI,CAAC,CAkBpE;IAEF,oBAAoB,kBAIjB,QAAQ,IAAI,CAAC,CAyCd;IAEF,4BAA4B,UAAW,GAAG,KAAG,IAAI,CAe/C;IAEF,sBAAsB,kBAKnB,IAAI,CAgBL;IAEF,wBAAwB,kBAIrB,IAAI,CAsBL;IAEF,0BAA0B,kBAKvB,IAAI,CAyBL;IAEF,kBAAkB,iCAAoB,IAAI,CAExC;IAEF,OAAO,CAAC,0BAA0B,CAIhC;IAEF,OAAO,CAAC,gBAAgB,CA2BtB;CACL","file":"OpentokMultiPartyService.d.ts","sourcesContent":["import { MultiPartyCameraTypes, SessionClientRole } from '../MediaConstants';\nimport { getMediaTracer } from '../MediaUtils';\nimport { BrandingSettings, Credentials, SessionSettings } from './Contracts';\nimport { MediaCapabilitiesService } from './MediaCapabilitiesService';\nimport {\n checkAudioCapabilities,\n checkIsMobile,\n checkVideoCapabilities\n} from './MediaCapabilitiesUtils';\nimport {\n DEFAULT_AVATAR_URI,\n MULTI_PARTY_EVENTS,\n MultiPartyService,\n SubscriberInfo,\n maxParticipantsNumber\n} from './MultiPartyService';\n\nconst trace = getMediaTracer('Multiparty');\n\n// The preferred camera position to use for the video source\nenum OpentokFacingMode {\n USER = 'user',\n ENVIRONMENT = 'environment'\n}\n\ntype OpentokSubscriberInfo = SubscriberInfo & {\n subscriber: OT.Subscriber;\n};\n\nexport class OpentokMultiPartyService extends MultiPartyService {\n private subscriberList: OpentokSubscriberInfo[] = [];\n private session?: OT.Session;\n private currentPublisher?: OT.Publisher;\n private branding?: BrandingSettings;\n\n constructor(\n settings: SessionSettings,\n private readonly getParticipantId: (connectionId?: string) => string\n ) {\n super(settings);\n\n this.branding = settings.branding;\n }\n\n get ownConnectionId(): string {\n return this.session?.connection?.connectionId || '';\n }\n\n get subscribers(): SubscriberInfo[] {\n return [...this.subscriberList];\n }\n\n public connect = (credentials: Credentials): void => {\n try {\n this.session = OT.initSession(\n credentials.apiKey,\n credentials.sessionId\n );\n\n this.session.on('connectionCreated', this.connectionCreatedHandler);\n this.session.on(\n 'connectionDestroyed',\n this.connectionDestroyedHandler\n );\n this.session.on('streamCreated', this.streamCreatedHandler);\n this.session.on('streamDestroyed', this.streamDestroyedHandler);\n this.session.on(\n 'streamPropertyChanged',\n this.streamPropertyChangedHandler\n );\n this.session.on(\n 'sessionDisconnected',\n this.sessionDisconnectedHandler\n );\n\n this.session.connect(credentials.token, (error?: any) => {\n if (error) {\n this.session?.off();\n this.session = undefined;\n this.traceErrorCallback(error);\n this.emit(MULTI_PARTY_EVENTS.connectFailed, {\n meta: { err: JSON.stringify(error) }\n });\n\n return;\n }\n\n this.createPublisher(this.settings);\n });\n } catch (err) {\n trace.error(JSON.stringify(err));\n this.emit(MULTI_PARTY_EVENTS.connectFailed, {\n meta: { err: JSON.stringify(err) }\n });\n }\n };\n\n public disconnect = (): void => {\n try {\n trace.info('Disconnecting from session');\n\n if (this.session) {\n this.session.disconnect();\n trace.info('Disconnection from session completed');\n }\n } catch (err) {\n trace.error(JSON.stringify(err));\n }\n };\n\n public takeSnapshot = (connectionId: string): string | null => {\n if (!connectionId) {\n return null;\n }\n\n if (connectionId === this.ownConnectionId) {\n return this.currentPublisher?.getImgData() || null;\n }\n\n return (\n this.subscribers\n .find((s) => s.connectionId === connectionId)\n ?.subscriber.getImgData() || null\n );\n };\n\n private createPublisher = async (\n settings: Readonly<SessionSettings>\n ): Promise<void> => {\n const canStartWithAudio = await checkAudioCapabilities();\n const canStartWithVideo = await checkVideoCapabilities();\n\n if (!canStartWithAudio && !canStartWithVideo) {\n // FIXME: use emitter\n trace.error(\n 'Did not create publisher due to lack of media capabilities.'\n );\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.initPublisher({\n ...settings,\n cameraEnabled: settings.cameraEnabled && canStartWithVideo,\n startWithAudioMuted:\n settings.startWithAudioMuted && canStartWithAudio\n });\n\n if (!this.currentPublisher) {\n throw new Error(\n 'Creating session requires initialized publisher'\n );\n }\n\n this.currentPublisher &&\n this.session?.publish(\n this.currentPublisher,\n this.traceErrorCallback\n );\n }\n };\n\n public publishAudio = async (shouldMute: boolean): Promise<void> => {\n const canPublishAudio = await checkAudioCapabilities();\n\n // why do we care about audio if 'shouldMute' is true?\n if (shouldMute && !canPublishAudio) {\n trace.error('could not publish audio');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.createPublisher({\n ...this.settings,\n // so if 'shouldMute' is true then we DON't mute?\n startWithAudioMuted: !shouldMute\n });\n } else {\n this.currentPublisher.publishAudio(shouldMute);\n }\n };\n\n public publishVideo = async (\n shouldPublishVideo: boolean\n ): Promise<void> => {\n const canPublishVideo = await checkVideoCapabilities();\n\n if (shouldPublishVideo && !canPublishVideo) {\n trace.error('could not publish video');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.createPublisher({\n ...this.settings,\n cameraEnabled: shouldPublishVideo\n });\n } else {\n this.currentPublisher.publishVideo(shouldPublishVideo);\n }\n };\n\n public switchCamera = async (): Promise<void> => {\n try {\n const mediaCapabilitiesService = await MediaCapabilitiesService.getInstance();\n\n if (!mediaCapabilitiesService.supportSwitchCamera) {\n throw new Error('Not Support switch camera');\n }\n\n let deviceId = '';\n let cameraType: MultiPartyCameraTypes;\n\n switch (this.settings.selectedCamera) {\n case MultiPartyCameraTypes.BACK:\n cameraType = MultiPartyCameraTypes.FRONT;\n deviceId = mediaCapabilitiesService.frontCameraDeviceId;\n break;\n case MultiPartyCameraTypes.FRONT:\n cameraType = MultiPartyCameraTypes.BACK;\n deviceId = mediaCapabilitiesService.backCameraDeviceId;\n break;\n default:\n throw new Error(\n `cameraType not valid: ${this.settings.selectedCamera}`\n );\n }\n\n return this.currentPublisher?.setVideoSource(deviceId).then(() => {\n this.settings.selectedCamera = cameraType;\n this.emit(MULTI_PARTY_EVENTS.cameraSourceChanged, {\n cameraSource: cameraType\n });\n trace.info(\n `Success to switch camera to cameraType: ${cameraType}`\n );\n });\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n private getClientRole(connection?: any): SessionClientRole {\n return (\n (connection?.data && JSON.parse(connection.data).clientRole) ||\n SessionClientRole.USER\n );\n }\n\n initPublisher = async (settings: SessionSettings): Promise<void> => {\n try {\n const { selectedCamera } = settings;\n const isMobile = checkIsMobile();\n\n const mediaCapabilitiesService = await MediaCapabilitiesService.getInstance();\n const {\n frontCameraDeviceId,\n backCameraDeviceId\n } = mediaCapabilitiesService;\n\n const videoSourceId =\n (selectedCamera === MultiPartyCameraTypes.FRONT\n ? frontCameraDeviceId\n : backCameraDeviceId) || undefined;\n\n const mobileCameraType =\n settings.selectedCamera === MultiPartyCameraTypes.FRONT\n ? OpentokFacingMode.USER\n : OpentokFacingMode.ENVIRONMENT;\n\n this.currentPublisher = OT.initPublisher(\n this.getParticipantId(this.session?.connection?.connectionId || ''),\n {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n archiveStatusDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI:\n this.branding?.backgroundImageURI || DEFAULT_AVATAR_URI\n },\n publishAudio: !settings.startWithAudioMuted,\n publishVideo: settings.cameraEnabled,\n videoSource: !isMobile ? videoSourceId : undefined,\n facingMode:\n (isMobile || !videoSourceId) ? mobileCameraType : undefined\n },\n this.traceErrorCallback\n );\n if (!this.currentPublisher) {\n trace.error('failed to init publisher');\n } else {\n this.currentPublisher.on(\n 'videoElementCreated',\n (event: any) => {\n trace.info('videoElementCreated', event);\n\n this.emit(\n MULTI_PARTY_EVENTS.videoElementCreated,\n event\n );\n }\n );\n this.currentPublisher.on('streamDestroyed', (event: any) => {\n trace.info('Publisher stream destroyed', event);\n\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, {\n event: event,\n participantId: this.getParticipantId(\n event?.stream?.connection.connectionId\n )\n });\n });\n this.currentPublisher.on('accessDenied', (event: any) => {\n trace.info('Publisher denied media permissions', event);\n\n const connection = this.session?.connection;\n const connectionId = connection?.connectionId;\n const participantId = this.getParticipantId(connectionId);\n const isOwnConnection =\n this.ownConnectionId === connectionId;\n\n this.emit(MULTI_PARTY_EVENTS.mediaDeviceAccessDenied, {\n connectionId,\n isOwnConnection,\n participantId\n });\n });\n this.currentPublisher.on(\n 'streamCreated',\n async (event: any) => {\n await MediaCapabilitiesService.setDevicesList();\n\n const participantId = this.getParticipantId(\n event?.stream?.connection.connectionId\n );\n\n this.emit(MULTI_PARTY_EVENTS.streamCreated, {\n event: event,\n participantId: participantId,\n startWithAudioMuted: this.settings\n .startWithAudioMuted,\n hasAudio: event?.stream?.hasAudio,\n hasVideo: event?.stream?.hasVideo,\n isOwnConnection:\n this.ownConnectionId ===\n event?.stream?.connection?.connectionId\n });\n\n trace.info('publisher stream created', {\n event,\n hasAudio: this.currentPublisher?.stream?.hasAudio,\n participantId\n });\n }\n );\n }\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n reinitializeStreams = async (settings: SessionSettings): Promise<void> => {\n if (this.currentPublisher) {\n this.currentPublisher.destroy();\n this.currentPublisher = undefined;\n }\n await this.createPublisher(settings);\n\n this.subscriberList = this.subscriberList.map((s) => {\n const { connectionId, subscriber } = s;\n const { stream } = subscriber;\n\n this.session?.unsubscribe(subscriber);\n\n return {\n ...s,\n subscriber: this.createSubscriber(stream, connectionId)\n };\n });\n };\n\n streamCreatedHandler = async (\n event: any & {\n stream: any;\n }\n ): Promise<void> => {\n trace.info('streamCreatedHandler', event.stream);\n\n const { stream } = event;\n const { connection } = stream;\n const { connectionId } = connection;\n const participantId = this.getParticipantId(connectionId);\n\n await MediaCapabilitiesService.setDevicesList();\n\n this.emit(MULTI_PARTY_EVENTS.streamCreated, {\n event: event,\n participantId: participantId,\n startWithAudioMuted: this.settings.startWithAudioMuted,\n isOwnConnection: this.ownConnectionId === connectionId,\n hasVideo: event?.stream?.hasVideo,\n hasAudio: event?.stream?.hasAudio\n });\n\n if (\n !this.ownConnectionId ||\n !stream ||\n connectionId === this.ownConnectionId\n ) {\n return;\n }\n\n if (this.subscriberList.length >= maxParticipantsNumber - 1) {\n trace.info(\n `a new subscriber cannot be added, as the number of participants reached its limit: ${maxParticipantsNumber}`\n );\n\n return;\n }\n const subscriber = this.createSubscriber(stream, connectionId);\n\n this.subscriberList.push({\n subscriber,\n connectionId,\n clientRole: this.getClientRole(connection)\n });\n };\n\n streamPropertyChangedHandler = (event: any): void => {\n trace.info('streamPropertyChangedHandler', event);\n\n const { stream } = event;\n\n this.emit(MULTI_PARTY_EVENTS.videoAudioStatus, {\n hasVideo: stream?.hasVideo,\n hasAudio: stream?.hasAudio,\n participantId: this.getParticipantId(\n stream?.connection.connectionId\n ),\n isOwnConnection:\n this.ownConnectionId === stream?.connection?.connectionId,\n stream\n });\n };\n\n streamDestroyedHandler = (\n event: any & {\n stream: any;\n reason: string;\n }\n ): void => {\n trace.info('streamDestroyedHandler', event);\n\n const { stream } = event;\n const destroyedConnectionId =\n stream && stream.connection && stream.connection.connectionId;\n\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, {\n event: event,\n participantId: this.getParticipantId(\n event?.stream?.connection.connectionId\n )\n });\n this.subscriberList = this.subscriberList.filter(\n (subscriber) => subscriber.connectionId !== destroyedConnectionId\n );\n };\n\n connectionCreatedHandler = (\n event: any & {\n connection: any;\n }\n ): void => {\n trace.info('connectionCreatedHandler', event);\n\n const { connection } = event;\n\n if (!this.ownConnectionId || !connection) {\n return;\n }\n\n this.emit(\n MULTI_PARTY_EVENTS.participantsNumberChanged,\n this.subscriberList.length\n );\n\n const clientRole = this.getClientRole(connection);\n\n this.emit(MULTI_PARTY_EVENTS.connectionCreated, {\n clientRole,\n event,\n participantId: this.getParticipantId(connection.connectionId),\n isOwnConnection: this.ownConnectionId === connection.connectionId\n });\n };\n\n connectionDestroyedHandler = (\n event: any & {\n connection: any;\n reason: string;\n }\n ): void => {\n const { connection } = event;\n const clientRole = this.getClientRole(connection);\n\n trace.info('connectionDestroyedHandler', event);\n\n this.emit(MULTI_PARTY_EVENTS.connectionDestroyed, {\n clientRole,\n event,\n participantId: this.getParticipantId(event?.connection.connectionId)\n });\n\n if (\n !this.ownConnectionId ||\n !connection ||\n connection.connectionId !== this.ownConnectionId\n ) {\n return;\n }\n\n this.emit(\n MULTI_PARTY_EVENTS.participantsNumberChanged,\n this.subscriberList.length\n );\n this.session = undefined;\n };\n\n traceErrorCallback = (error?: Error): void => {\n trace.error(JSON.stringify(error));\n };\n\n private sessionDisconnectedHandler = (event: any) => {\n trace.info('sessionDisconnectedHandler', event);\n // ToDo: Below line makes no sense (according to the OT types). This is not how OT signals work.\n // this?.session?.signal({ retryAfterReconnect: true });\n };\n\n private createSubscriber = (stream: any, connectionId: string): OT.Subscriber => {\n // ToDo: OT session can be undefined. This needs to be fixed.\n const subscriber = this.session!.subscribe(\n stream,\n this.getParticipantId(connectionId),\n {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n videoDisabledDisplayMode: 'off',\n backgroundImageURI:\n this.branding?.backgroundImageURI || DEFAULT_AVATAR_URI\n }\n },\n (err: any) => {\n this.traceErrorCallback(err);\n subscriber?.on('videoElementCreated', (event: any) => {\n trace.info('videoElementCreated', event);\n });\n }\n );\n\n return subscriber;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/MultiParty/OpentokMultiPartyService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,WAAW,EAAE,eAAe,EAAC,MAAM,aAAa,CAAC;AAG3E,OAAO,EAGH,iBAAiB,EACjB,cAAc,EAEjB,MAAM,qBAAqB,CAAC;AAc7B,qBAAa,wBAAyB,SAAQ,iBAAiB;IASpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IARxE,OAAO,CAAC,cAAc,CAA+B;IAErD,OAAO,CAAC,OAAO,CAAC,CAAa;IAE7B,OAAO,CAAC,gBAAgB,CAAC,CAAe;IAExC,OAAO,CAAC,QAAQ,CAAC,CAAmB;gBAExB,QAAQ,EAAE,eAAe,EAAmB,gBAAgB,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM;IAM3G,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,WAAW,IAAI,cAAc,EAAE,CAElC;IAEM,OAAO,gBAAiB,WAAW,KAAG,IAAI,CA+B/C;IAEK,UAAU,QAAO,IAAI,CAW1B;IAEK,YAAY,iBAAkB,MAAM,KAAG,MAAM,GAAG,IAAI,CAUzD;IAEF,OAAO,CAAC,eAAe,CAwBrB;IAEK,YAAY,eAAsB,OAAO,KAAG,QAAQ,IAAI,CAAC,CAmB9D;IAEK,YAAY,uBAA8B,OAAO,KAAG,QAAQ,IAAI,CAAC,CAiBtE;IAEK,YAAY,QAAa,QAAQ,IAAI,CAAC,CAmC3C;IAEF,OAAO,CAAC,aAAa;IAIrB,aAAa,aAAoB,eAAe,KAAG,QAAQ,IAAI,CAAC,CA4F9D;IAEF,mBAAmB,aAAoB,eAAe,KAAG,QAAQ,IAAI,CAAC,CAkBpE;IAEF,oBAAoB,kBAIjB,QAAQ,IAAI,CAAC,CAkCd;IAEF,4BAA4B,UAAW,GAAG,KAAG,IAAI,CAY/C;IAEF,sBAAsB,kBAKnB,IAAI,CAcL;IAEF,wBAAwB,kBAIrB,IAAI,CAmBL;IAEF,0BAA0B,kBAKvB,IAAI,CAmBL;IAEF,kBAAkB,iCAAoB,IAAI,CAExC;IAEF,OAAO,CAAC,0BAA0B,CAIhC;IAEF,OAAO,CAAC,gBAAgB,CA0BtB;CACL","file":"OpentokMultiPartyService.d.ts","sourcesContent":["import {MultiPartyCameraTypes, SessionClientRole} from '../MediaConstants';\nimport {getMediaTracer} from '../MediaUtils';\nimport {BrandingSettings, Credentials, SessionSettings} from './Contracts';\nimport {MediaCapabilitiesService} from './MediaCapabilitiesService';\nimport {checkAudioCapabilities, checkIsMobile, checkVideoCapabilities} from './MediaCapabilitiesUtils';\nimport {\n DEFAULT_AVATAR_URI,\n MULTI_PARTY_EVENTS,\n MultiPartyService,\n SubscriberInfo,\n maxParticipantsNumber\n} from './MultiPartyService';\n\nconst trace = getMediaTracer('Multiparty');\n\n// The preferred camera position to use for the video source\nenum OpentokFacingMode {\n USER = 'user',\n ENVIRONMENT = 'environment'\n}\n\ntype OpentokSubscriberInfo = SubscriberInfo & {\n subscriber: OT.Subscriber;\n};\n\nexport class OpentokMultiPartyService extends MultiPartyService {\n private subscriberList: OpentokSubscriberInfo[] = [];\n\n private session?: OT.Session;\n\n private currentPublisher?: OT.Publisher;\n\n private branding?: BrandingSettings;\n\n constructor(settings: SessionSettings, private readonly getParticipantId: (connectionId?: string) => string) {\n super(settings);\n\n this.branding = settings.branding;\n }\n\n get ownConnectionId(): string {\n return this.session?.connection?.connectionId || '';\n }\n\n get subscribers(): SubscriberInfo[] {\n return [...this.subscriberList];\n }\n\n public connect = (credentials: Credentials): void => {\n try {\n this.session = OT.initSession(credentials.apiKey, credentials.sessionId);\n\n this.session.on('connectionCreated', this.connectionCreatedHandler);\n this.session.on('connectionDestroyed', this.connectionDestroyedHandler);\n this.session.on('streamCreated', this.streamCreatedHandler);\n this.session.on('streamDestroyed', this.streamDestroyedHandler);\n this.session.on('streamPropertyChanged', this.streamPropertyChangedHandler);\n this.session.on('sessionDisconnected', this.sessionDisconnectedHandler);\n\n this.session.connect(credentials.token, (error?: any) => {\n if (error) {\n this.session?.off();\n this.session = undefined;\n this.traceErrorCallback(error);\n this.emit(MULTI_PARTY_EVENTS.connectFailed, {\n meta: {err: JSON.stringify(error)}\n });\n\n return;\n }\n\n this.createPublisher(this.settings);\n });\n } catch (err) {\n trace.error(JSON.stringify(err));\n this.emit(MULTI_PARTY_EVENTS.connectFailed, {\n meta: {err: JSON.stringify(err)}\n });\n }\n };\n\n public disconnect = (): void => {\n try {\n trace.info('Disconnecting from session');\n\n if (this.session) {\n this.session.disconnect();\n trace.info('Disconnection from session completed');\n }\n } catch (err) {\n trace.error(JSON.stringify(err));\n }\n };\n\n public takeSnapshot = (connectionId: string): string | null => {\n if (!connectionId) {\n return null;\n }\n\n if (connectionId === this.ownConnectionId) {\n return this.currentPublisher?.getImgData() || null;\n }\n\n return this.subscribers.find((s) => s.connectionId === connectionId)?.subscriber.getImgData() || null;\n };\n\n private createPublisher = async (settings: Readonly<SessionSettings>): Promise<void> => {\n const canStartWithAudio = await checkAudioCapabilities();\n const canStartWithVideo = await checkVideoCapabilities();\n\n if (!canStartWithAudio && !canStartWithVideo) {\n // FIXME: use emitter\n trace.error('Did not create publisher due to lack of media capabilities.');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.initPublisher({\n ...settings,\n cameraEnabled: settings.cameraEnabled && canStartWithVideo,\n startWithAudioMuted: settings.startWithAudioMuted && canStartWithAudio\n });\n\n if (!this.currentPublisher) {\n throw new Error('Creating session requires initialized publisher');\n }\n\n this.currentPublisher && this.session?.publish(this.currentPublisher, this.traceErrorCallback);\n }\n };\n\n public publishAudio = async (shouldMute: boolean): Promise<void> => {\n const canPublishAudio = await checkAudioCapabilities();\n\n // why do we care about audio if 'shouldMute' is true?\n if (shouldMute && !canPublishAudio) {\n trace.error('could not publish audio');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.createPublisher({\n ...this.settings,\n // so if 'shouldMute' is true then we DON't mute?\n startWithAudioMuted: !shouldMute\n });\n } else {\n this.currentPublisher.publishAudio(shouldMute);\n }\n };\n\n public publishVideo = async (shouldPublishVideo: boolean): Promise<void> => {\n const canPublishVideo = await checkVideoCapabilities();\n\n if (shouldPublishVideo && !canPublishVideo) {\n trace.error('could not publish video');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.createPublisher({\n ...this.settings,\n cameraEnabled: shouldPublishVideo\n });\n } else {\n this.currentPublisher.publishVideo(shouldPublishVideo);\n }\n };\n\n public switchCamera = async (): Promise<void> => {\n try {\n const mediaCapabilitiesService = await MediaCapabilitiesService.getInstance();\n\n if (!mediaCapabilitiesService.supportSwitchCamera) {\n throw new Error('Not Support switch camera');\n }\n\n let deviceId = '';\n let cameraType: MultiPartyCameraTypes;\n\n switch (this.settings.selectedCamera) {\n case MultiPartyCameraTypes.BACK:\n cameraType = MultiPartyCameraTypes.FRONT;\n deviceId = mediaCapabilitiesService.frontCameraDeviceId;\n break;\n case MultiPartyCameraTypes.FRONT:\n cameraType = MultiPartyCameraTypes.BACK;\n deviceId = mediaCapabilitiesService.backCameraDeviceId;\n break;\n default:\n throw new Error(`cameraType not valid: ${this.settings.selectedCamera}`);\n }\n\n return await this.currentPublisher?.setVideoSource(deviceId).then(() => {\n this.settings.selectedCamera = cameraType;\n this.emit(MULTI_PARTY_EVENTS.cameraSourceChanged, {\n cameraSource: cameraType\n });\n trace.info(`Success to switch camera to cameraType: ${cameraType}`);\n });\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n private getClientRole(connection?: any): SessionClientRole {\n return (connection?.data && JSON.parse(connection.data).clientRole) || SessionClientRole.USER;\n }\n\n initPublisher = async (settings: SessionSettings): Promise<void> => {\n try {\n const {selectedCamera} = settings;\n const isMobile = checkIsMobile();\n\n const mediaCapabilitiesService = await MediaCapabilitiesService.getInstance();\n const {frontCameraDeviceId, backCameraDeviceId} = mediaCapabilitiesService;\n\n const videoSourceId =\n (selectedCamera === MultiPartyCameraTypes.FRONT ? frontCameraDeviceId : backCameraDeviceId) ||\n undefined;\n\n const mobileCameraType =\n settings.selectedCamera === MultiPartyCameraTypes.FRONT\n ? OpentokFacingMode.USER\n : OpentokFacingMode.ENVIRONMENT;\n\n this.currentPublisher = OT.initPublisher(\n this.getParticipantId(this.session?.connection?.connectionId || ''),\n {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n archiveStatusDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI: this.branding?.backgroundImageURI || DEFAULT_AVATAR_URI\n },\n publishAudio: !settings.startWithAudioMuted,\n publishVideo: settings.cameraEnabled,\n videoSource: !isMobile ? videoSourceId : undefined,\n facingMode: isMobile || !videoSourceId ? mobileCameraType : undefined\n },\n this.traceErrorCallback\n );\n if (!this.currentPublisher) {\n trace.error('failed to init publisher');\n } else {\n this.currentPublisher.on('videoElementCreated', (event: any) => {\n trace.info('videoElementCreated', event);\n\n this.emit(MULTI_PARTY_EVENTS.videoElementCreated, event);\n });\n this.currentPublisher.on('streamDestroyed', (event: any) => {\n trace.info('Publisher stream destroyed', event);\n\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, {\n event: event,\n participantId: this.getParticipantId(event?.stream?.connection.connectionId)\n });\n });\n this.currentPublisher.on('accessDenied', (event: any) => {\n trace.info('Publisher denied media permissions', event);\n\n const connection = this.session?.connection;\n const connectionId = connection?.connectionId;\n const participantId = this.getParticipantId(connectionId);\n const isOwnConnection = this.ownConnectionId === connectionId;\n\n this.emit(MULTI_PARTY_EVENTS.mediaDeviceAccessDenied, {\n connectionId,\n isOwnConnection,\n participantId\n });\n });\n this.currentPublisher.on('streamCreated', async (event: any) => {\n await MediaCapabilitiesService.setDevicesList();\n\n const participantId = this.getParticipantId(event?.stream?.connection.connectionId);\n\n this.emit(MULTI_PARTY_EVENTS.streamCreated, {\n event: event,\n participantId: participantId,\n startWithAudioMuted: this.settings.startWithAudioMuted,\n hasAudio: event?.stream?.hasAudio,\n hasVideo: event?.stream?.hasVideo,\n isOwnConnection: this.ownConnectionId === event?.stream?.connection?.connectionId\n });\n\n trace.info('publisher stream created', {\n event,\n hasAudio: this.currentPublisher?.stream?.hasAudio,\n participantId\n });\n });\n }\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n reinitializeStreams = async (settings: SessionSettings): Promise<void> => {\n if (this.currentPublisher) {\n this.currentPublisher.destroy();\n this.currentPublisher = undefined;\n }\n await this.createPublisher(settings);\n\n this.subscriberList = this.subscriberList.map((s) => {\n const {connectionId, subscriber} = s;\n const {stream} = subscriber;\n\n this.session?.unsubscribe(subscriber);\n\n return {\n ...s,\n subscriber: this.createSubscriber(stream, connectionId)\n };\n });\n };\n\n streamCreatedHandler = async (\n event: any & {\n stream: any;\n }\n ): Promise<void> => {\n trace.info('streamCreatedHandler', event.stream);\n\n const {stream} = event;\n const {connection} = stream;\n const {connectionId} = connection;\n const participantId = this.getParticipantId(connectionId);\n\n await MediaCapabilitiesService.setDevicesList();\n\n if (this.ownConnectionId && stream && connectionId !== this.ownConnectionId) {\n if (this.subscriberList.length < maxParticipantsNumber - 1) {\n const subscriber = this.createSubscriber(stream, connectionId);\n\n this.subscriberList.push({\n subscriber,\n connectionId,\n clientRole: this.getClientRole(connection)\n });\n } else {\n trace.info(\n `a new subscriber cannot be added, as the number of participants reached its limit: ${maxParticipantsNumber}`\n );\n }\n }\n\n this.emit(MULTI_PARTY_EVENTS.streamCreated, {\n event: event,\n participantId: participantId,\n startWithAudioMuted: this.settings.startWithAudioMuted,\n isOwnConnection: this.ownConnectionId === connectionId,\n hasVideo: event?.stream?.hasVideo,\n hasAudio: event?.stream?.hasAudio\n });\n };\n\n streamPropertyChangedHandler = (event: any): void => {\n trace.info('streamPropertyChangedHandler', event);\n\n const {stream} = event;\n\n this.emit(MULTI_PARTY_EVENTS.videoAudioStatus, {\n hasVideo: stream?.hasVideo,\n hasAudio: stream?.hasAudio,\n participantId: this.getParticipantId(stream?.connection.connectionId),\n isOwnConnection: this.ownConnectionId === stream?.connection?.connectionId,\n stream\n });\n };\n\n streamDestroyedHandler = (\n event: any & {\n stream: any;\n reason: string;\n }\n ): void => {\n trace.info('streamDestroyedHandler', event);\n\n const {stream} = event;\n const destroyedConnectionId = stream && stream.connection && stream.connection.connectionId;\n\n this.subscriberList = this.subscriberList.filter(\n (subscriber) => subscriber.connectionId !== destroyedConnectionId\n );\n\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, {\n event: event,\n participantId: this.getParticipantId(event?.stream?.connection.connectionId)\n });\n };\n\n connectionCreatedHandler = (\n event: any & {\n connection: any;\n }\n ): void => {\n trace.info('connectionCreatedHandler', event);\n\n const {connection} = event;\n\n if (!this.ownConnectionId || !connection) {\n return;\n }\n\n this.emit(MULTI_PARTY_EVENTS.participantsNumberChanged, this.subscriberList.length);\n\n const clientRole = this.getClientRole(connection);\n\n this.emit(MULTI_PARTY_EVENTS.connectionCreated, {\n clientRole,\n event,\n participantId: this.getParticipantId(connection.connectionId),\n isOwnConnection: this.ownConnectionId === connection.connectionId\n });\n };\n\n connectionDestroyedHandler = (\n event: any & {\n connection: any;\n reason: string;\n }\n ): void => {\n const {connection} = event;\n const clientRole = this.getClientRole(connection);\n\n trace.info('connectionDestroyedHandler', event);\n\n this.emit(MULTI_PARTY_EVENTS.connectionDestroyed, {\n clientRole,\n event,\n participantId: this.getParticipantId(event?.connection.connectionId),\n isOwnConnection: this.ownConnectionId === connection.connectionId\n });\n\n if (!this.ownConnectionId || !connection || connection.connectionId !== this.ownConnectionId) {\n return;\n }\n\n this.emit(MULTI_PARTY_EVENTS.participantsNumberChanged, this.subscriberList.length);\n this.session = undefined;\n };\n\n traceErrorCallback = (error?: Error): void => {\n trace.error(JSON.stringify(error));\n };\n\n private sessionDisconnectedHandler = (event: any) => {\n trace.info('sessionDisconnectedHandler', event);\n // ToDo: Below line makes no sense (according to the OT types). This is not how OT signals work.\n // this?.session?.signal({ retryAfterReconnect: true });\n };\n\n private createSubscriber = (stream: any, connectionId: string): OT.Subscriber => {\n // ToDo: OT session can be undefined. This needs to be fixed.\n const subscriber = this.session!.subscribe(\n stream,\n this.getParticipantId(connectionId),\n {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n videoDisabledDisplayMode: 'off',\n backgroundImageURI: this.branding?.backgroundImageURI || DEFAULT_AVATAR_URI\n }\n },\n (err: any) => {\n this.traceErrorCallback(err);\n subscriber?.on('videoElementCreated', (event: any) => {\n trace.info('videoElementCreated', event);\n });\n }\n );\n\n return subscriber;\n };\n}\n"]}
|
|
@@ -480,7 +480,7 @@ function (_super) {
|
|
|
480
480
|
return __generator(this, function (_b) {
|
|
481
481
|
switch (_b.label) {
|
|
482
482
|
case 0:
|
|
483
|
-
_b.trys.push([0,
|
|
483
|
+
_b.trys.push([0, 3,, 4]);
|
|
484
484
|
|
|
485
485
|
return [4
|
|
486
486
|
/*yield*/
|
|
@@ -510,8 +510,8 @@ function (_super) {
|
|
|
510
510
|
throw new Error("cameraType not valid: " + this.settings.selectedCamera);
|
|
511
511
|
}
|
|
512
512
|
|
|
513
|
-
return [
|
|
514
|
-
/*
|
|
513
|
+
return [4
|
|
514
|
+
/*yield*/
|
|
515
515
|
, (_a = this.currentPublisher) === null || _a === void 0 ? void 0 : _a.setVideoSource(deviceId).then(function () {
|
|
516
516
|
_this.settings.selectedCamera = cameraType_1;
|
|
517
517
|
|
|
@@ -523,11 +523,16 @@ function (_super) {
|
|
|
523
523
|
})];
|
|
524
524
|
|
|
525
525
|
case 2:
|
|
526
|
+
return [2
|
|
527
|
+
/*return*/
|
|
528
|
+
, _b.sent()];
|
|
529
|
+
|
|
530
|
+
case 3:
|
|
526
531
|
err_1 = _b.sent();
|
|
527
532
|
trace.error(JSON.stringify(err_1));
|
|
528
533
|
throw err_1;
|
|
529
534
|
|
|
530
|
-
case
|
|
535
|
+
case 4:
|
|
531
536
|
return [2
|
|
532
537
|
/*return*/
|
|
533
538
|
];
|
|
@@ -728,6 +733,19 @@ function (_super) {
|
|
|
728
733
|
case 1:
|
|
729
734
|
_c.sent();
|
|
730
735
|
|
|
736
|
+
if (this.ownConnectionId && stream && connectionId !== this.ownConnectionId) {
|
|
737
|
+
if (this.subscriberList.length < MultiPartyService_1.maxParticipantsNumber - 1) {
|
|
738
|
+
subscriber = this.createSubscriber(stream, connectionId);
|
|
739
|
+
this.subscriberList.push({
|
|
740
|
+
subscriber: subscriber,
|
|
741
|
+
connectionId: connectionId,
|
|
742
|
+
clientRole: this.getClientRole(connection)
|
|
743
|
+
});
|
|
744
|
+
} else {
|
|
745
|
+
trace.info("a new subscriber cannot be added, as the number of participants reached its limit: " + MultiPartyService_1.maxParticipantsNumber);
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
|
|
731
749
|
this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamCreated, {
|
|
732
750
|
event: event,
|
|
733
751
|
participantId: participantId,
|
|
@@ -736,26 +754,6 @@ function (_super) {
|
|
|
736
754
|
hasVideo: (_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.hasVideo,
|
|
737
755
|
hasAudio: (_b = event === null || event === void 0 ? void 0 : event.stream) === null || _b === void 0 ? void 0 : _b.hasAudio
|
|
738
756
|
});
|
|
739
|
-
|
|
740
|
-
if (!this.ownConnectionId || !stream || connectionId === this.ownConnectionId) {
|
|
741
|
-
return [2
|
|
742
|
-
/*return*/
|
|
743
|
-
];
|
|
744
|
-
}
|
|
745
|
-
|
|
746
|
-
if (this.subscriberList.length >= MultiPartyService_1.maxParticipantsNumber - 1) {
|
|
747
|
-
trace.info("a new subscriber cannot be added, as the number of participants reached its limit: " + MultiPartyService_1.maxParticipantsNumber);
|
|
748
|
-
return [2
|
|
749
|
-
/*return*/
|
|
750
|
-
];
|
|
751
|
-
}
|
|
752
|
-
|
|
753
|
-
subscriber = this.createSubscriber(stream, connectionId);
|
|
754
|
-
this.subscriberList.push({
|
|
755
|
-
subscriber: subscriber,
|
|
756
|
-
connectionId: connectionId,
|
|
757
|
-
clientRole: this.getClientRole(connection)
|
|
758
|
-
});
|
|
759
757
|
return [2
|
|
760
758
|
/*return*/
|
|
761
759
|
];
|
|
@@ -785,15 +783,14 @@ function (_super) {
|
|
|
785
783
|
trace.info('streamDestroyedHandler', event);
|
|
786
784
|
var stream = event.stream;
|
|
787
785
|
var destroyedConnectionId = stream && stream.connection && stream.connection.connectionId;
|
|
786
|
+
_this.subscriberList = _this.subscriberList.filter(function (subscriber) {
|
|
787
|
+
return subscriber.connectionId !== destroyedConnectionId;
|
|
788
|
+
});
|
|
788
789
|
|
|
789
790
|
_this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamDestroyed, {
|
|
790
791
|
event: event,
|
|
791
792
|
participantId: _this.getParticipantId((_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection.connectionId)
|
|
792
793
|
});
|
|
793
|
-
|
|
794
|
-
_this.subscriberList = _this.subscriberList.filter(function (subscriber) {
|
|
795
|
-
return subscriber.connectionId !== destroyedConnectionId;
|
|
796
|
-
});
|
|
797
794
|
};
|
|
798
795
|
|
|
799
796
|
_this.connectionCreatedHandler = function (event) {
|
|
@@ -826,7 +823,8 @@ function (_super) {
|
|
|
826
823
|
_this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectionDestroyed, {
|
|
827
824
|
clientRole: clientRole,
|
|
828
825
|
event: event,
|
|
829
|
-
participantId: _this.getParticipantId(event === null || event === void 0 ? void 0 : event.connection.connectionId)
|
|
826
|
+
participantId: _this.getParticipantId(event === null || event === void 0 ? void 0 : event.connection.connectionId),
|
|
827
|
+
isOwnConnection: _this.ownConnectionId === connection.connectionId
|
|
830
828
|
});
|
|
831
829
|
|
|
832
830
|
if (!_this.ownConnectionId || !connection || connection.connectionId !== _this.ownConnectionId) {
|