@flashphoner/websdk 2.0.210 → 2.0.215
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/docTemplate/README.md +1 -1
- package/examples/demo/streaming/conference/conference.html +10 -0
- package/examples/demo/streaming/conference/conference.js +236 -35
- package/examples/demo/streaming/video-chat/video-chat.html +5 -0
- package/flashphoner-no-flash.js +331 -231
- package/flashphoner-no-flash.min.js +2 -2
- package/flashphoner-no-webrtc.js +322 -224
- package/flashphoner-no-webrtc.min.js +2 -2
- package/flashphoner-no-wsplayer.js +331 -231
- package/flashphoner-no-wsplayer.min.js +2 -2
- package/flashphoner-room-api.js +340 -223
- package/flashphoner-room-api.min.js +2 -2
- package/flashphoner-temasys-flash-websocket-without-adapterjs.js +329 -226
- package/flashphoner-temasys-flash-websocket.js +328 -225
- package/flashphoner-temasys-flash-websocket.min.js +1 -1
- package/flashphoner-webrtc-only.js +325 -230
- package/flashphoner-webrtc-only.min.js +1 -1
- package/flashphoner.js +337 -232
- package/flashphoner.min.js +2 -2
- package/package.json +1 -1
- package/src/flash-media-provider.js +5 -0
- package/src/flashphoner-core.d.ts +7 -4
- package/src/flashphoner-core.js +98 -29
- package/src/room-module.js +9 -2
- package/src/temasys-media-provider.js +5 -0
- package/src/util.js +204 -185
- package/src/webrtc-media-provider.js +14 -7
- package/src/websocket-media-provider.js +5 -0
package/flashphoner-no-flash.js
CHANGED
|
@@ -9555,8 +9555,9 @@ var constants = require("./constants");
|
|
|
9555
9555
|
|
|
9556
9556
|
var util = require('./util');
|
|
9557
9557
|
|
|
9558
|
-
var
|
|
9558
|
+
var LoggerObject = require('./util').logger;
|
|
9559
9559
|
|
|
9560
|
+
var coreLogger;
|
|
9560
9561
|
var loggerConf = {
|
|
9561
9562
|
push: false,
|
|
9562
9563
|
severity: "INFO"
|
|
@@ -9604,7 +9605,7 @@ var disableConnectionQualityCalculation;
|
|
|
9604
9605
|
* @param {String=} options.decoderLocation Location of video-worker2.js file
|
|
9605
9606
|
* @param {String=} options.screenSharingExtensionId Chrome screen sharing extension id
|
|
9606
9607
|
* @param {Object=} options.constraints Default local media constraints
|
|
9607
|
-
* @param {Object=} options.logger
|
|
9608
|
+
* @param {Object=} options.logger Core logger options
|
|
9608
9609
|
* @throws {Error} Error if none of MediaProviders available
|
|
9609
9610
|
* @memberof Flashphoner
|
|
9610
9611
|
*/
|
|
@@ -9613,16 +9614,10 @@ var init = function init(options) {
|
|
|
9613
9614
|
if (!initialized) {
|
|
9614
9615
|
if (!options) {
|
|
9615
9616
|
options = {};
|
|
9616
|
-
}
|
|
9617
|
-
|
|
9618
|
-
loggerConf = options.logger || loggerConf;
|
|
9617
|
+
} // init global logger
|
|
9619
9618
|
|
|
9620
|
-
if (options.logger !== null) {
|
|
9621
|
-
loggerConf.enableLogs = true;
|
|
9622
|
-
} // init logger
|
|
9623
9619
|
|
|
9624
|
-
|
|
9625
|
-
logger.init(loggerConf.severity || "INFO", loggerConf.push || false, loggerConf.customLogger, loggerConf.enableLogs);
|
|
9620
|
+
coreLogger = createLogger(options.logger);
|
|
9626
9621
|
var waitingTemasys = false;
|
|
9627
9622
|
|
|
9628
9623
|
try {
|
|
@@ -9643,7 +9638,7 @@ var init = function init(options) {
|
|
|
9643
9638
|
constraints: options.constraints || getDefaultMediaConstraints(),
|
|
9644
9639
|
extensionId: options.screenSharingExtensionId,
|
|
9645
9640
|
audioContext: audioContext,
|
|
9646
|
-
logger:
|
|
9641
|
+
logger: coreLogger,
|
|
9647
9642
|
createMicGainNode: enableGainNode
|
|
9648
9643
|
};
|
|
9649
9644
|
webRtcProvider.configure(webRtcConf);
|
|
@@ -9660,7 +9655,7 @@ var init = function init(options) {
|
|
|
9660
9655
|
var webRtcConf = {
|
|
9661
9656
|
constraints: options.constraints || getDefaultMediaConstraints(),
|
|
9662
9657
|
extensionId: options.screenSharingExtensionId,
|
|
9663
|
-
logger:
|
|
9658
|
+
logger: coreLogger
|
|
9664
9659
|
};
|
|
9665
9660
|
webRtcProvider.configure(webRtcConf); // Just reorder media provider list
|
|
9666
9661
|
|
|
@@ -9688,7 +9683,7 @@ var init = function init(options) {
|
|
|
9688
9683
|
var flashConf = {
|
|
9689
9684
|
constraints: options.constraints || getDefaultMediaConstraints(),
|
|
9690
9685
|
flashMediaProviderSwfLocation: options.flashMediaProviderSwfLocation,
|
|
9691
|
-
logger:
|
|
9686
|
+
logger: coreLogger
|
|
9692
9687
|
};
|
|
9693
9688
|
flashProvider.configure(flashConf);
|
|
9694
9689
|
}
|
|
@@ -9712,7 +9707,7 @@ var init = function init(options) {
|
|
|
9712
9707
|
receiverLocation: options.receiverLocation,
|
|
9713
9708
|
decoderLocation: options.decoderLocation,
|
|
9714
9709
|
audioContext: audioContext,
|
|
9715
|
-
logger:
|
|
9710
|
+
logger: coreLogger
|
|
9716
9711
|
};
|
|
9717
9712
|
websocketProvider.configure(wsConf);
|
|
9718
9713
|
} //check at least 1 provider available
|
|
@@ -9734,7 +9729,7 @@ var init = function init(options) {
|
|
|
9734
9729
|
MediaProvider = _MediaProvider;
|
|
9735
9730
|
}
|
|
9736
9731
|
} else {
|
|
9737
|
-
|
|
9732
|
+
corelogger.warn(LOG_PREFIX, "Preferred media provider is not available.");
|
|
9738
9733
|
}
|
|
9739
9734
|
}
|
|
9740
9735
|
|
|
@@ -9762,7 +9757,7 @@ var init = function init(options) {
|
|
|
9762
9757
|
options.mediaProvidersReadyCallback(Object.keys(MediaProvider));
|
|
9763
9758
|
}
|
|
9764
9759
|
|
|
9765
|
-
|
|
9760
|
+
coreLogger.info(LOG_PREFIX, "Initialized");
|
|
9766
9761
|
initialized = true;
|
|
9767
9762
|
}
|
|
9768
9763
|
};
|
|
@@ -9801,7 +9796,7 @@ var playFirstVideo = function playFirstVideo(display, isLocal, src) {
|
|
|
9801
9796
|
}
|
|
9802
9797
|
};
|
|
9803
9798
|
/**
|
|
9804
|
-
* Get logger
|
|
9799
|
+
* Get core logger
|
|
9805
9800
|
*
|
|
9806
9801
|
* @returns {Object} Logger
|
|
9807
9802
|
* @memberof Flashphoner
|
|
@@ -9812,7 +9807,7 @@ var getLogger = function getLogger() {
|
|
|
9812
9807
|
if (!initialized) {
|
|
9813
9808
|
console.warn("Initialize API first.");
|
|
9814
9809
|
} else {
|
|
9815
|
-
return
|
|
9810
|
+
return coreLogger;
|
|
9816
9811
|
}
|
|
9817
9812
|
};
|
|
9818
9813
|
/**
|
|
@@ -9985,6 +9980,31 @@ var getSessions = function getSessions() {
|
|
|
9985
9980
|
|
|
9986
9981
|
var getSession = function getSession(id) {
|
|
9987
9982
|
return sessions[id];
|
|
9983
|
+
}; // Get logger configuration from options
|
|
9984
|
+
|
|
9985
|
+
|
|
9986
|
+
var getLoggerConf = function getLoggerConf(loggerOptions) {
|
|
9987
|
+
var conf = loggerOptions || loggerConf;
|
|
9988
|
+
|
|
9989
|
+
if (loggerOptions !== null) {
|
|
9990
|
+
conf.enableLogs = true;
|
|
9991
|
+
}
|
|
9992
|
+
|
|
9993
|
+
return conf;
|
|
9994
|
+
}; // Create a new logger object
|
|
9995
|
+
|
|
9996
|
+
|
|
9997
|
+
var createLogger = function createLogger(loggerOptions) {
|
|
9998
|
+
var parentLogger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : coreLogger;
|
|
9999
|
+
var newLogger = parentLogger;
|
|
10000
|
+
|
|
10001
|
+
if (newLogger === undefined || loggerOptions != undefined) {
|
|
10002
|
+
var loggerConf = getLoggerConf(loggerOptions);
|
|
10003
|
+
newLogger = new LoggerObject();
|
|
10004
|
+
newLogger.init(loggerConf.severity || "INFO", loggerConf.push || false, loggerConf.customLogger, loggerConf.enableLogs);
|
|
10005
|
+
}
|
|
10006
|
+
|
|
10007
|
+
return newLogger;
|
|
9988
10008
|
};
|
|
9989
10009
|
/**
|
|
9990
10010
|
* Create new session and connect to server.
|
|
@@ -10004,6 +10024,7 @@ var getSession = function getSession(id) {
|
|
|
10004
10024
|
* @param {Integer=} options.pingInterval Server ping interval in milliseconds [0]
|
|
10005
10025
|
* @param {Integer=} options.receiveProbes A maximum subsequental pings received missing count [0]
|
|
10006
10026
|
* @param {Integer=} options.probesInterval Interval to check subsequental pings received [0]
|
|
10027
|
+
* @param {Object=} options.logger Session logger options
|
|
10007
10028
|
* @returns {Session} Created session
|
|
10008
10029
|
* @throws {Error} Error if API is not initialized
|
|
10009
10030
|
* @throws {TypeError} Error if options.urlServer is not specified
|
|
@@ -10018,8 +10039,12 @@ var createSession = function createSession(options) {
|
|
|
10018
10039
|
|
|
10019
10040
|
if (!options || !options.urlServer) {
|
|
10020
10041
|
throw new TypeError("options.urlServer must be provided");
|
|
10021
|
-
}
|
|
10042
|
+
} // Set session logger #WCS-2434
|
|
10022
10043
|
|
|
10044
|
+
|
|
10045
|
+
var sessionLogger = createLogger(options.logger); // Override logger for all low level operations
|
|
10046
|
+
|
|
10047
|
+
var logger = sessionLogger;
|
|
10023
10048
|
var id_ = uuid_v1();
|
|
10024
10049
|
var sessionStatus = SESSION_STATUS.PENDING;
|
|
10025
10050
|
var urlServer = options.urlServer;
|
|
@@ -10125,7 +10150,7 @@ var createSession = function createSession(options) {
|
|
|
10125
10150
|
if (timeout != undefined && timeout > 0) {
|
|
10126
10151
|
connectionTimeout = setTimeout(function () {
|
|
10127
10152
|
if (wsConnection.readyState == 0) {
|
|
10128
|
-
|
|
10153
|
+
logger.warn(LOG_PREFIX, "WS connection timeout");
|
|
10129
10154
|
wsConnection.close();
|
|
10130
10155
|
}
|
|
10131
10156
|
}, timeout);
|
|
@@ -10149,7 +10174,7 @@ var createSession = function createSession(options) {
|
|
|
10149
10174
|
mediaProviders: Object.keys(MediaProvider),
|
|
10150
10175
|
keepAlive: keepAlive,
|
|
10151
10176
|
authToken: authToken,
|
|
10152
|
-
clientVersion: "2.0.
|
|
10177
|
+
clientVersion: "2.0.215",
|
|
10153
10178
|
clientOSVersion: window.navigator.appVersion,
|
|
10154
10179
|
clientBrowserVersion: window.navigator.userAgent,
|
|
10155
10180
|
msePacketizationVersion: 2,
|
|
@@ -10455,6 +10480,7 @@ var createSession = function createSession(options) {
|
|
|
10455
10480
|
* @param {Array<string>=} options.sipSDP Array of custom SDP params (ex. bandwidth (b=))
|
|
10456
10481
|
* @param {Array<string>=} options.sipHeaders Array of custom SIP headers
|
|
10457
10482
|
* @param {string=} options.videoContentHint Video content hint for browser ('detail' by default to maintain resolution), {@link Flashphoner.constants.CONTENT_HINT_TYPE}
|
|
10483
|
+
* @param {Object=} options.logger Call logger options
|
|
10458
10484
|
* @param {sdpHook} sdpHook The callback that handles sdp from the server
|
|
10459
10485
|
* @returns {Call} Call
|
|
10460
10486
|
* @throws {TypeError} Error if no options provided
|
|
@@ -10467,15 +10493,18 @@ var createSession = function createSession(options) {
|
|
|
10467
10493
|
var createCall = function createCall(options) {
|
|
10468
10494
|
//check session state
|
|
10469
10495
|
if (sessionStatus !== SESSION_STATUS.REGISTERED && sessionStatus !== SESSION_STATUS.ESTABLISHED) {
|
|
10470
|
-
|
|
10471
|
-
throw new Error('Invalid session state');
|
|
10496
|
+
throw new Error('Invalid session state ' + sessionStatus);
|
|
10472
10497
|
} //check options
|
|
10473
10498
|
|
|
10474
10499
|
|
|
10475
10500
|
if (!options) {
|
|
10476
10501
|
throw new TypeError("options must be provided");
|
|
10477
|
-
}
|
|
10502
|
+
} // Set call logger #WCS-2434
|
|
10478
10503
|
|
|
10504
|
+
|
|
10505
|
+
var callLogger = createLogger(options.logger, sessionLogger); // Override logger for all low level operations
|
|
10506
|
+
|
|
10507
|
+
var logger = callLogger;
|
|
10479
10508
|
var login = appKey == 'clickToCallApp' ? '' : cConfig.sipLogin;
|
|
10480
10509
|
var caller_ = options.incoming ? options.caller : login;
|
|
10481
10510
|
var callee_ = options.callee;
|
|
@@ -10621,7 +10650,8 @@ var createSession = function createSession(options) {
|
|
|
10621
10650
|
constraints: constraints,
|
|
10622
10651
|
connectionConfig: mediaOptions,
|
|
10623
10652
|
audioOutputId: audioOutputId,
|
|
10624
|
-
videoContentHint: videoContentHint
|
|
10653
|
+
videoContentHint: videoContentHint,
|
|
10654
|
+
logger: logger
|
|
10625
10655
|
}).then(function (newConnection) {
|
|
10626
10656
|
mediaConnection = newConnection;
|
|
10627
10657
|
return mediaConnection.createOffer({
|
|
@@ -11207,7 +11237,7 @@ var createSession = function createSession(options) {
|
|
|
11207
11237
|
/**
|
|
11208
11238
|
* Get call info
|
|
11209
11239
|
* @returns {string} Info
|
|
11210
|
-
* @memberof
|
|
11240
|
+
* @memberof Call
|
|
11211
11241
|
* @inner
|
|
11212
11242
|
*/
|
|
11213
11243
|
|
|
@@ -11218,7 +11248,7 @@ var createSession = function createSession(options) {
|
|
|
11218
11248
|
/**
|
|
11219
11249
|
* Get stream error info
|
|
11220
11250
|
* @returns {string} Error info
|
|
11221
|
-
* @memberof
|
|
11251
|
+
* @memberof Call
|
|
11222
11252
|
* @inner
|
|
11223
11253
|
*/
|
|
11224
11254
|
|
|
@@ -11226,6 +11256,17 @@ var createSession = function createSession(options) {
|
|
|
11226
11256
|
var getErrorInfo = function getErrorInfo() {
|
|
11227
11257
|
return errorInfo_;
|
|
11228
11258
|
};
|
|
11259
|
+
/**
|
|
11260
|
+
* Get call logger
|
|
11261
|
+
*
|
|
11262
|
+
* @returns {Object} Logger
|
|
11263
|
+
* @memberof Call
|
|
11264
|
+
*/
|
|
11265
|
+
|
|
11266
|
+
|
|
11267
|
+
var getLogger = function getLogger() {
|
|
11268
|
+
return callLogger;
|
|
11269
|
+
};
|
|
11229
11270
|
|
|
11230
11271
|
call.call = call_;
|
|
11231
11272
|
call.answer = answer;
|
|
@@ -11257,6 +11298,7 @@ var createSession = function createSession(options) {
|
|
|
11257
11298
|
call.switchMic = switchMic;
|
|
11258
11299
|
call.switchToScreen = switchToScreen;
|
|
11259
11300
|
call.switchToCam = switchToCam;
|
|
11301
|
+
call.getLogger = getLogger;
|
|
11260
11302
|
calls[id_] = call;
|
|
11261
11303
|
return call;
|
|
11262
11304
|
};
|
|
@@ -11303,6 +11345,7 @@ var createSession = function createSession(options) {
|
|
|
11303
11345
|
* @param {string=} options.useCanvasMediaStream EXPERIMENTAL: when publish bind browser's media stream to the canvas. It can be useful for image filtering
|
|
11304
11346
|
* @param {string=} options.videoContentHint Video content hint for browser ('detail' by default to maintain resolution), {@link Flashphoner.constants.CONTENT_HINT_TYPE}
|
|
11305
11347
|
* @param {Boolean=} options.unmutePlayOnStart Unmute playback on start. May be used after user gesture only, so set 'unmutePlayOnStart: false' for autoplay
|
|
11348
|
+
* @param {Object=} options.logger Stream logger options
|
|
11306
11349
|
* @param {sdpHook} sdpHook The callback that handles sdp from the server
|
|
11307
11350
|
* @returns {Stream} Stream
|
|
11308
11351
|
* @throws {TypeError} Error if no options provided
|
|
@@ -11318,7 +11361,7 @@ var createSession = function createSession(options) {
|
|
|
11318
11361
|
var availableCallbacks = []; //check session state
|
|
11319
11362
|
|
|
11320
11363
|
if (sessionStatus !== SESSION_STATUS.ESTABLISHED) {
|
|
11321
|
-
throw new Error('Invalid session state');
|
|
11364
|
+
throw new Error('Invalid session state ' + sessionStatus);
|
|
11322
11365
|
} //check options
|
|
11323
11366
|
|
|
11324
11367
|
|
|
@@ -11328,8 +11371,12 @@ var createSession = function createSession(options) {
|
|
|
11328
11371
|
|
|
11329
11372
|
if (!options.name) {
|
|
11330
11373
|
throw new TypeError("options.name must be provided");
|
|
11331
|
-
}
|
|
11374
|
+
} // Set stream logger #WCS-2434
|
|
11375
|
+
|
|
11376
|
+
|
|
11377
|
+
var streamLogger = createLogger(options.logger, sessionLogger); // Override logger for all low level operations
|
|
11332
11378
|
|
|
11379
|
+
var logger = streamLogger;
|
|
11333
11380
|
var clientKf = new KalmanFilter();
|
|
11334
11381
|
var serverKf = new KalmanFilter();
|
|
11335
11382
|
var id_ = uuid_v1();
|
|
@@ -11573,7 +11620,7 @@ var createSession = function createSession(options) {
|
|
|
11573
11620
|
logger.debug(LOG_PREFIX, "Play stream " + name_);
|
|
11574
11621
|
|
|
11575
11622
|
if (status_ !== STREAM_STATUS.NEW) {
|
|
11576
|
-
throw new Error("Invalid stream state");
|
|
11623
|
+
throw new Error("Invalid stream state " + status_);
|
|
11577
11624
|
}
|
|
11578
11625
|
|
|
11579
11626
|
status_ = STREAM_STATUS.PENDING; //create mediaProvider connection
|
|
@@ -11592,7 +11639,8 @@ var createSession = function createSession(options) {
|
|
|
11592
11639
|
audioOutputId: audioOutputId,
|
|
11593
11640
|
remoteVideo: remoteVideo,
|
|
11594
11641
|
playoutDelay: playoutDelay,
|
|
11595
|
-
unmutePlayOnStart: unmutePlayOnStart
|
|
11642
|
+
unmutePlayOnStart: unmutePlayOnStart,
|
|
11643
|
+
logger: logger
|
|
11596
11644
|
}, streamRefreshHandlers[id_]).then(function (newConnection) {
|
|
11597
11645
|
mediaConnection = newConnection;
|
|
11598
11646
|
|
|
@@ -11656,7 +11704,7 @@ var createSession = function createSession(options) {
|
|
|
11656
11704
|
logger.debug(LOG_PREFIX, "Publish stream " + name_);
|
|
11657
11705
|
|
|
11658
11706
|
if (status_ !== STREAM_STATUS.NEW) {
|
|
11659
|
-
throw new Error("Invalid stream state");
|
|
11707
|
+
throw new Error("Invalid stream state " + status_);
|
|
11660
11708
|
}
|
|
11661
11709
|
|
|
11662
11710
|
status_ = STREAM_STATUS.PENDING;
|
|
@@ -11690,7 +11738,8 @@ var createSession = function createSession(options) {
|
|
|
11690
11738
|
connectionConfig: mediaOptions,
|
|
11691
11739
|
connectionConstraints: mediaConnectionConstraints,
|
|
11692
11740
|
customStream: constraints && constraints.customStream ? constraints.customStream : false,
|
|
11693
|
-
videoContentHint: videoContentHint
|
|
11741
|
+
videoContentHint: videoContentHint,
|
|
11742
|
+
logger: logger
|
|
11694
11743
|
}).then(function (newConnection) {
|
|
11695
11744
|
mediaConnection = newConnection;
|
|
11696
11745
|
return mediaConnection.createOffer({
|
|
@@ -12320,6 +12369,17 @@ var createSession = function createSession(options) {
|
|
|
12320
12369
|
availableCallbacks.push(promise);
|
|
12321
12370
|
});
|
|
12322
12371
|
};
|
|
12372
|
+
/**
|
|
12373
|
+
* Get stream logger
|
|
12374
|
+
*
|
|
12375
|
+
* @returns {Object} Logger
|
|
12376
|
+
* @memberof Stream
|
|
12377
|
+
*/
|
|
12378
|
+
|
|
12379
|
+
|
|
12380
|
+
var getLogger = function getLogger() {
|
|
12381
|
+
return streamLogger;
|
|
12382
|
+
};
|
|
12323
12383
|
|
|
12324
12384
|
stream.play = play;
|
|
12325
12385
|
stream.publish = publish;
|
|
@@ -12359,6 +12419,7 @@ var createSession = function createSession(options) {
|
|
|
12359
12419
|
stream.switchToScreen = switchToScreen;
|
|
12360
12420
|
stream.switchToCam = switchToCam;
|
|
12361
12421
|
stream.sendData = sendData;
|
|
12422
|
+
stream.getLogger = getLogger;
|
|
12362
12423
|
streams[id_] = stream;
|
|
12363
12424
|
return stream;
|
|
12364
12425
|
};
|
|
@@ -12567,6 +12628,17 @@ var createSession = function createSession(options) {
|
|
|
12567
12628
|
}
|
|
12568
12629
|
|
|
12569
12630
|
return sdp;
|
|
12631
|
+
};
|
|
12632
|
+
/**
|
|
12633
|
+
* Get session logger
|
|
12634
|
+
*
|
|
12635
|
+
* @returns {Object} Logger
|
|
12636
|
+
* @memberof Session
|
|
12637
|
+
*/
|
|
12638
|
+
|
|
12639
|
+
|
|
12640
|
+
var getLogger = function getLogger() {
|
|
12641
|
+
return sessionLogger;
|
|
12570
12642
|
}; //export Session
|
|
12571
12643
|
|
|
12572
12644
|
|
|
@@ -12582,7 +12654,8 @@ var createSession = function createSession(options) {
|
|
|
12582
12654
|
session.submitBugReport = submitBugReport;
|
|
12583
12655
|
session.startDebug = startDebug;
|
|
12584
12656
|
session.stopDebug = stopDebug;
|
|
12585
|
-
session.on = on;
|
|
12657
|
+
session.on = on;
|
|
12658
|
+
session.getLogger = getLogger; //save interface to global map
|
|
12586
12659
|
|
|
12587
12660
|
sessions[id_] = session;
|
|
12588
12661
|
return session;
|
|
@@ -12628,165 +12701,168 @@ function _typeof(obj){"@babel/helpers - typeof";return _typeof="function"==typeo
|
|
|
12628
12701
|
},{}],42:[function(require,module,exports){
|
|
12629
12702
|
'use strict';
|
|
12630
12703
|
|
|
12631
|
-
|
|
12632
|
-
|
|
12633
|
-
|
|
12634
|
-
|
|
12635
|
-
}
|
|
12704
|
+
var isEmptyObject = function isEmptyObject(obj) {
|
|
12705
|
+
for (var name in obj) {
|
|
12706
|
+
return false;
|
|
12707
|
+
}
|
|
12636
12708
|
|
|
12637
|
-
|
|
12638
|
-
|
|
12709
|
+
return true;
|
|
12710
|
+
};
|
|
12711
|
+
/**
|
|
12712
|
+
* Copy values of object own properties to array.
|
|
12713
|
+
*
|
|
12714
|
+
* @param obj
|
|
12715
|
+
* @returns {Array}
|
|
12716
|
+
*/
|
|
12639
12717
|
|
|
12640
|
-
/**
|
|
12641
|
-
* Copy values of object own properties to array.
|
|
12642
|
-
*
|
|
12643
|
-
* @param obj
|
|
12644
|
-
* @returns {Array}
|
|
12645
|
-
*/
|
|
12646
|
-
copyObjectToArray: function copyObjectToArray(obj) {
|
|
12647
|
-
var ret = [];
|
|
12648
12718
|
|
|
12649
|
-
|
|
12650
|
-
|
|
12651
|
-
|
|
12652
|
-
|
|
12719
|
+
var copyObjectToArray = function copyObjectToArray(obj) {
|
|
12720
|
+
var ret = [];
|
|
12721
|
+
|
|
12722
|
+
for (var prop in obj) {
|
|
12723
|
+
if (obj.hasOwnProperty(prop)) {
|
|
12724
|
+
ret.push(obj[prop]);
|
|
12653
12725
|
}
|
|
12726
|
+
}
|
|
12654
12727
|
|
|
12655
|
-
|
|
12656
|
-
|
|
12728
|
+
return ret;
|
|
12729
|
+
};
|
|
12730
|
+
/**
|
|
12731
|
+
* Copy src properties to dst object.
|
|
12732
|
+
* Will overwrite dst prop with src prop in case of dst prop exist.
|
|
12733
|
+
*/
|
|
12657
12734
|
|
|
12658
|
-
|
|
12659
|
-
|
|
12660
|
-
|
|
12661
|
-
|
|
12662
|
-
|
|
12663
|
-
for (var prop in src) {
|
|
12664
|
-
if (src.hasOwnProperty(prop)) {
|
|
12665
|
-
dst[prop] = src[prop];
|
|
12666
|
-
}
|
|
12735
|
+
|
|
12736
|
+
var copyObjectPropsToAnotherObject = function copyObjectPropsToAnotherObject(src, dst) {
|
|
12737
|
+
for (var prop in src) {
|
|
12738
|
+
if (src.hasOwnProperty(prop)) {
|
|
12739
|
+
dst[prop] = src[prop];
|
|
12667
12740
|
}
|
|
12668
|
-
}
|
|
12669
|
-
|
|
12670
|
-
var result = {};
|
|
12741
|
+
}
|
|
12742
|
+
};
|
|
12671
12743
|
|
|
12672
|
-
|
|
12673
|
-
|
|
12674
|
-
* Report types: googComponent, googCandidatePair, googCertificate, googLibjingleSession, googTrack, ssrc
|
|
12675
|
-
*/
|
|
12676
|
-
var gotResult = false;
|
|
12744
|
+
var processRtcStatsReport = function processRtcStatsReport(browser, report) {
|
|
12745
|
+
var result = {};
|
|
12677
12746
|
|
|
12678
|
-
|
|
12679
|
-
|
|
12680
|
-
|
|
12681
|
-
|
|
12682
|
-
|
|
12683
|
-
}
|
|
12747
|
+
if (browser == "chrome") {
|
|
12748
|
+
/**
|
|
12749
|
+
* Report types: googComponent, googCandidatePair, googCertificate, googLibjingleSession, googTrack, ssrc
|
|
12750
|
+
*/
|
|
12751
|
+
var gotResult = false;
|
|
12684
12752
|
|
|
12685
|
-
|
|
12753
|
+
if (report.type && report.type == "googCandidatePair") {
|
|
12754
|
+
//check if this is active pair
|
|
12755
|
+
if (report.googActiveConnection == "true") {
|
|
12686
12756
|
gotResult = true;
|
|
12687
12757
|
}
|
|
12758
|
+
}
|
|
12688
12759
|
|
|
12689
|
-
|
|
12690
|
-
|
|
12691
|
-
|
|
12692
|
-
|
|
12693
|
-
|
|
12760
|
+
if (report.type && report.type == "ssrc") {
|
|
12761
|
+
gotResult = true;
|
|
12762
|
+
}
|
|
12763
|
+
|
|
12764
|
+
if (gotResult) {
|
|
12765
|
+
for (var k in report) {
|
|
12766
|
+
if (report.hasOwnProperty(k)) {
|
|
12767
|
+
result[k] = report[k];
|
|
12694
12768
|
}
|
|
12695
12769
|
}
|
|
12770
|
+
}
|
|
12696
12771
|
|
|
12697
|
-
|
|
12698
|
-
|
|
12699
|
-
|
|
12700
|
-
|
|
12701
|
-
|
|
12702
|
-
|
|
12703
|
-
|
|
12772
|
+
return result;
|
|
12773
|
+
} else if (browser == "firefox") {
|
|
12774
|
+
/**
|
|
12775
|
+
* RTCStatsReport http://mxr.mozilla.org/mozilla-central/source/dom/webidl/RTCStatsReport.webidl
|
|
12776
|
+
*/
|
|
12777
|
+
if (report.type && (report.type == "outboundrtp" || report.type == "inboundrtp") && report.id.indexOf("rtcp") == -1) {
|
|
12778
|
+
result = {};
|
|
12704
12779
|
|
|
12705
|
-
|
|
12706
|
-
|
|
12707
|
-
|
|
12708
|
-
}
|
|
12780
|
+
for (var k in report) {
|
|
12781
|
+
if (report.hasOwnProperty(k)) {
|
|
12782
|
+
result[k] = report[k];
|
|
12709
12783
|
}
|
|
12710
12784
|
}
|
|
12711
|
-
|
|
12712
|
-
return result;
|
|
12713
|
-
} else {
|
|
12714
|
-
return result;
|
|
12715
12785
|
}
|
|
12716
12786
|
|
|
12717
|
-
;
|
|
12787
|
+
return result;
|
|
12788
|
+
} else {
|
|
12789
|
+
return result;
|
|
12790
|
+
}
|
|
12791
|
+
};
|
|
12792
|
+
|
|
12793
|
+
var Browser = {
|
|
12794
|
+
isIE: function isIE() {
|
|
12795
|
+
return (
|
|
12796
|
+
/*@cc_on!@*/
|
|
12797
|
+
false || !!document.documentMode
|
|
12798
|
+
);
|
|
12718
12799
|
},
|
|
12719
|
-
|
|
12720
|
-
|
|
12721
|
-
return (
|
|
12722
|
-
/*@cc_on!@*/
|
|
12723
|
-
false || !!document.documentMode
|
|
12724
|
-
);
|
|
12725
|
-
},
|
|
12726
|
-
isFirefox: function isFirefox() {
|
|
12727
|
-
return typeof InstallTrigger !== 'undefined';
|
|
12728
|
-
},
|
|
12729
|
-
isChrome: function isChrome() {
|
|
12730
|
-
return !!window.chrome && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent);
|
|
12731
|
-
},
|
|
12732
|
-
isEdge: function isEdge() {
|
|
12733
|
-
return !isIE && !!window.StyleMedia;
|
|
12734
|
-
},
|
|
12735
|
-
isOpera: function isOpera() {
|
|
12736
|
-
return !!window.opr && !!opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
|
12737
|
-
},
|
|
12738
|
-
isiOS: function isiOS() {
|
|
12739
|
-
return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
|
|
12740
|
-
},
|
|
12741
|
-
isSafari: function isSafari() {
|
|
12742
|
-
var userAgent = navigator.userAgent.toLowerCase();
|
|
12743
|
-
return /(safari|applewebkit)/i.test(userAgent) && !userAgent.includes("chrome") && !userAgent.includes("android");
|
|
12744
|
-
},
|
|
12745
|
-
isAndroid: function isAndroid() {
|
|
12746
|
-
return navigator.userAgent.toLowerCase().indexOf("android") > -1;
|
|
12747
|
-
},
|
|
12748
|
-
isSafariWebRTC: function isSafariWebRTC() {
|
|
12749
|
-
return navigator.mediaDevices && this.isSafari();
|
|
12750
|
-
},
|
|
12751
|
-
isSamsungBrowser: function isSamsungBrowser() {
|
|
12752
|
-
return /SamsungBrowser/i.test(navigator.userAgent);
|
|
12753
|
-
},
|
|
12754
|
-
isAndroidFirefox: function isAndroidFirefox() {
|
|
12755
|
-
return this.isAndroid() && /Firefox/i.test(navigator.userAgent);
|
|
12756
|
-
}
|
|
12800
|
+
isFirefox: function isFirefox() {
|
|
12801
|
+
return typeof InstallTrigger !== 'undefined';
|
|
12757
12802
|
},
|
|
12758
|
-
|
|
12759
|
-
|
|
12760
|
-
|
|
12761
|
-
|
|
12762
|
-
|
|
12763
|
-
|
|
12764
|
-
|
|
12765
|
-
|
|
12766
|
-
|
|
12767
|
-
|
|
12768
|
-
|
|
12769
|
-
|
|
12803
|
+
isChrome: function isChrome() {
|
|
12804
|
+
return !!window.chrome && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent);
|
|
12805
|
+
},
|
|
12806
|
+
isEdge: function isEdge() {
|
|
12807
|
+
return !isIE && !!window.StyleMedia;
|
|
12808
|
+
},
|
|
12809
|
+
isOpera: function isOpera() {
|
|
12810
|
+
return !!window.opr && !!opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
|
12811
|
+
},
|
|
12812
|
+
isiOS: function isiOS() {
|
|
12813
|
+
return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
|
|
12814
|
+
},
|
|
12815
|
+
isSafari: function isSafari() {
|
|
12816
|
+
var userAgent = navigator.userAgent.toLowerCase();
|
|
12817
|
+
return /(safari|applewebkit)/i.test(userAgent) && !userAgent.includes("chrome") && !userAgent.includes("android");
|
|
12818
|
+
},
|
|
12819
|
+
isAndroid: function isAndroid() {
|
|
12820
|
+
return navigator.userAgent.toLowerCase().indexOf("android") > -1;
|
|
12821
|
+
},
|
|
12822
|
+
isSafariWebRTC: function isSafariWebRTC() {
|
|
12823
|
+
return navigator.mediaDevices && this.isSafari();
|
|
12824
|
+
},
|
|
12825
|
+
isSamsungBrowser: function isSamsungBrowser() {
|
|
12826
|
+
return /SamsungBrowser/i.test(navigator.userAgent);
|
|
12827
|
+
},
|
|
12828
|
+
isAndroidFirefox: function isAndroidFirefox() {
|
|
12829
|
+
return this.isAndroid() && /Firefox/i.test(navigator.userAgent);
|
|
12830
|
+
}
|
|
12831
|
+
};
|
|
12832
|
+
var SDP = {
|
|
12833
|
+
matchPrefix: function matchPrefix(sdp, prefix) {
|
|
12834
|
+
var parts = sdp.trim().split('\n').map(function (line) {
|
|
12835
|
+
return line.trim();
|
|
12836
|
+
});
|
|
12837
|
+
return parts.filter(function (line) {
|
|
12838
|
+
return line.indexOf(prefix) === 0;
|
|
12839
|
+
});
|
|
12840
|
+
},
|
|
12841
|
+
writeFmtp: function writeFmtp(sdp, param, codec) {
|
|
12842
|
+
var sdpArray = sdp.split("\n");
|
|
12843
|
+
var i;
|
|
12770
12844
|
|
|
12771
|
-
|
|
12772
|
-
|
|
12773
|
-
|
|
12774
|
-
|
|
12775
|
-
|
|
12845
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
12846
|
+
if (sdpArray[i].search(codec) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
|
|
12847
|
+
sdpArray[i] += "\na=fmtp:" + sdpArray[i].match(/[0-9]+/)[0] + " " + param + "\r";
|
|
12848
|
+
}
|
|
12849
|
+
} //normalize sdp after modifications
|
|
12776
12850
|
|
|
12777
12851
|
|
|
12778
|
-
|
|
12852
|
+
var result = "";
|
|
12779
12853
|
|
|
12780
|
-
|
|
12781
|
-
|
|
12782
|
-
|
|
12783
|
-
}
|
|
12854
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
12855
|
+
if (sdpArray[i] != "") {
|
|
12856
|
+
result += sdpArray[i] + "\n";
|
|
12784
12857
|
}
|
|
12785
|
-
|
|
12786
|
-
return result;
|
|
12787
12858
|
}
|
|
12788
|
-
|
|
12789
|
-
|
|
12859
|
+
|
|
12860
|
+
return result;
|
|
12861
|
+
}
|
|
12862
|
+
};
|
|
12863
|
+
|
|
12864
|
+
var logger = function logger() {
|
|
12865
|
+
return {
|
|
12790
12866
|
init: function init(verbosity, enablePushLogs, customLogger, enableLogs) {
|
|
12791
12867
|
switch (verbosity.toUpperCase()) {
|
|
12792
12868
|
case "DEBUG":
|
|
@@ -12967,92 +13043,104 @@ module.exports = {
|
|
|
12967
13043
|
default:
|
|
12968
13044
|
this.verbosity = 2;
|
|
12969
13045
|
}
|
|
12970
|
-
|
|
12971
|
-
;
|
|
12972
13046
|
}
|
|
12973
|
-
}
|
|
12974
|
-
|
|
12975
|
-
if (!codecs.length) return sdp;
|
|
12976
|
-
var sdpArray = sdp.split("\n");
|
|
12977
|
-
var codecsArray = codecs.split(","); //search and delete codecs line
|
|
13047
|
+
};
|
|
13048
|
+
};
|
|
12978
13049
|
|
|
12979
|
-
|
|
12980
|
-
|
|
13050
|
+
var stripCodecs = function stripCodecs(sdp, codecs) {
|
|
13051
|
+
if (!codecs.length) return sdp;
|
|
13052
|
+
var sdpArray = sdp.split("\n");
|
|
13053
|
+
var codecsArray = codecs.split(","); //search and delete codecs line
|
|
12981
13054
|
|
|
12982
|
-
|
|
12983
|
-
|
|
13055
|
+
var pt = [];
|
|
13056
|
+
var i;
|
|
12984
13057
|
|
|
12985
|
-
|
|
12986
|
-
|
|
12987
|
-
|
|
12988
|
-
|
|
12989
|
-
|
|
12990
|
-
|
|
13058
|
+
for (var p = 0; p < codecsArray.length; p++) {
|
|
13059
|
+
console.log("Searching for codec " + codecsArray[p]);
|
|
13060
|
+
|
|
13061
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
13062
|
+
if (sdpArray[i].search(new RegExp(codecsArray[p], 'i')) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
|
|
13063
|
+
console.log(codecsArray[p] + " detected");
|
|
13064
|
+
pt.push(sdpArray[i].match(/[0-9]+/)[0]);
|
|
13065
|
+
sdpArray[i] = "";
|
|
12991
13066
|
}
|
|
12992
13067
|
}
|
|
13068
|
+
}
|
|
12993
13069
|
|
|
12994
|
-
|
|
12995
|
-
|
|
12996
|
-
|
|
12997
|
-
|
|
12998
|
-
|
|
12999
|
-
|
|
13000
|
-
}
|
|
13070
|
+
if (pt.length) {
|
|
13071
|
+
//searching for fmtp
|
|
13072
|
+
for (p = 0; p < pt.length; p++) {
|
|
13073
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
13074
|
+
if (sdpArray[i].search("a=fmtp:" + pt[p]) != -1 || sdpArray[i].search("a=rtcp-fb:" + pt[p]) != -1) {
|
|
13075
|
+
sdpArray[i] = "";
|
|
13001
13076
|
}
|
|
13002
|
-
}
|
|
13077
|
+
}
|
|
13078
|
+
} //delete entries from m= line
|
|
13003
13079
|
|
|
13004
13080
|
|
|
13005
|
-
|
|
13006
|
-
|
|
13007
|
-
|
|
13008
|
-
|
|
13081
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
13082
|
+
if (sdpArray[i].search("m=audio") != -1 || sdpArray[i].search("m=video") != -1) {
|
|
13083
|
+
var mLineSplitted = sdpArray[i].split(" ");
|
|
13084
|
+
var newMLine = "";
|
|
13009
13085
|
|
|
13010
|
-
|
|
13011
|
-
|
|
13012
|
-
|
|
13086
|
+
for (var m = 0; m < mLineSplitted.length; m++) {
|
|
13087
|
+
if (pt.indexOf(mLineSplitted[m].trim()) == -1 || m <= 2) {
|
|
13088
|
+
newMLine += mLineSplitted[m];
|
|
13013
13089
|
|
|
13014
|
-
|
|
13015
|
-
|
|
13016
|
-
}
|
|
13090
|
+
if (m < mLineSplitted.length - 1) {
|
|
13091
|
+
newMLine = newMLine + " ";
|
|
13017
13092
|
}
|
|
13018
13093
|
}
|
|
13019
|
-
|
|
13020
|
-
sdpArray[i] = newMLine;
|
|
13021
13094
|
}
|
|
13095
|
+
|
|
13096
|
+
sdpArray[i] = newMLine;
|
|
13022
13097
|
}
|
|
13023
|
-
}
|
|
13098
|
+
}
|
|
13099
|
+
} //normalize sdp after modifications
|
|
13024
13100
|
|
|
13025
13101
|
|
|
13026
|
-
|
|
13102
|
+
var result = "";
|
|
13027
13103
|
|
|
13028
|
-
|
|
13029
|
-
|
|
13030
|
-
|
|
13031
|
-
}
|
|
13104
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
13105
|
+
if (sdpArray[i] != "") {
|
|
13106
|
+
result += sdpArray[i] + "\n";
|
|
13032
13107
|
}
|
|
13108
|
+
}
|
|
13033
13109
|
|
|
13034
|
-
|
|
13035
|
-
|
|
13036
|
-
getCurrentCodecAndSampleRate: function getCurrentCodecAndSampleRate(sdp, mediaType) {
|
|
13037
|
-
var rows = sdp.split("\n");
|
|
13038
|
-
var codecPt;
|
|
13110
|
+
return result;
|
|
13111
|
+
};
|
|
13039
13112
|
|
|
13040
|
-
|
|
13041
|
-
|
|
13042
|
-
|
|
13043
|
-
ret.name = rows[i].split(" ")[1].split("/")[0];
|
|
13044
|
-
ret.sampleRate = rows[i].split(" ")[1].split("/")[1];
|
|
13045
|
-
return ret;
|
|
13046
|
-
} //WCS-2136. WebRTC statistics doesn't work for VP8
|
|
13113
|
+
var getCurrentCodecAndSampleRate = function getCurrentCodecAndSampleRate(sdp, mediaType) {
|
|
13114
|
+
var rows = sdp.split("\n");
|
|
13115
|
+
var codecPt;
|
|
13047
13116
|
|
|
13117
|
+
for (var i = 0; i < rows.length; i++) {
|
|
13118
|
+
if (codecPt && rows[i].indexOf("a=rtpmap:" + codecPt) != -1) {
|
|
13119
|
+
var ret = {};
|
|
13120
|
+
ret.name = rows[i].split(" ")[1].split("/")[0];
|
|
13121
|
+
ret.sampleRate = rows[i].split(" ")[1].split("/")[1];
|
|
13122
|
+
return ret;
|
|
13123
|
+
} //WCS-2136. WebRTC statistics doesn't work for VP8
|
|
13048
13124
|
|
|
13049
|
-
|
|
13050
|
-
|
|
13051
|
-
|
|
13125
|
+
|
|
13126
|
+
if (rows[i].indexOf("m=" + mediaType) != -1) {
|
|
13127
|
+
codecPt = rows[i].split(" ")[3].trim();
|
|
13052
13128
|
}
|
|
13053
13129
|
}
|
|
13054
13130
|
};
|
|
13055
13131
|
|
|
13132
|
+
module.exports = {
|
|
13133
|
+
isEmptyObject: isEmptyObject,
|
|
13134
|
+
copyObjectToArray: copyObjectToArray,
|
|
13135
|
+
copyObjectPropsToAnotherObject: copyObjectPropsToAnotherObject,
|
|
13136
|
+
processRtcStatsReport: processRtcStatsReport,
|
|
13137
|
+
Browser: Browser,
|
|
13138
|
+
SDP: SDP,
|
|
13139
|
+
logger: logger,
|
|
13140
|
+
stripCodecs: stripCodecs,
|
|
13141
|
+
getCurrentCodecAndSampleRate: getCurrentCodecAndSampleRate
|
|
13142
|
+
};
|
|
13143
|
+
|
|
13056
13144
|
},{}],43:[function(require,module,exports){
|
|
13057
13145
|
'use strict';
|
|
13058
13146
|
|
|
@@ -13086,6 +13174,11 @@ var mics = [];
|
|
|
13086
13174
|
|
|
13087
13175
|
var createConnection = function createConnection(options) {
|
|
13088
13176
|
return new Promise(function (resolve, reject) {
|
|
13177
|
+
// Set connection logger #WCS-2434
|
|
13178
|
+
if (options.logger) {
|
|
13179
|
+
logger = options.logger;
|
|
13180
|
+
}
|
|
13181
|
+
|
|
13089
13182
|
var id = options.id;
|
|
13090
13183
|
var connectionConfig = options.connectionConfig || {
|
|
13091
13184
|
"iceServers": []
|
|
@@ -13216,9 +13309,9 @@ var createConnection = function createConnection(options) {
|
|
|
13216
13309
|
function setContentHint(stream, hint) {
|
|
13217
13310
|
stream.getVideoTracks().forEach(function (track) {
|
|
13218
13311
|
if (track.contentHint === undefined) {
|
|
13219
|
-
logger.warn("contentHint unsupported");
|
|
13312
|
+
logger.warn(LOG_PREFIX, "Track contentHint unsupported");
|
|
13220
13313
|
} else {
|
|
13221
|
-
logger.info("Set video track contentHint to " + hint);
|
|
13314
|
+
logger.info(LOG_PREFIX, "Set video track contentHint to " + hint);
|
|
13222
13315
|
track.contentHint = hint;
|
|
13223
13316
|
}
|
|
13224
13317
|
});
|
|
@@ -13255,7 +13348,7 @@ var createConnection = function createConnection(options) {
|
|
|
13255
13348
|
//WCS-2771 add playback delay
|
|
13256
13349
|
connection.getReceivers().forEach(function (track) {
|
|
13257
13350
|
if (track.playoutDelayHint === undefined) {
|
|
13258
|
-
logger.warn("
|
|
13351
|
+
logger.warn(LOG_PREFIX, "Playout delay unsupported");
|
|
13259
13352
|
}
|
|
13260
13353
|
|
|
13261
13354
|
track.playoutDelayHint = playoutDelay;
|
|
@@ -13648,7 +13741,7 @@ var createConnection = function createConnection(options) {
|
|
|
13648
13741
|
localVideo.srcObject.addTrack(audioTrack);
|
|
13649
13742
|
}
|
|
13650
13743
|
|
|
13651
|
-
logger.info("Switch camera to " + cam);
|
|
13744
|
+
logger.info(LOG_PREFIX, "Switch camera to " + cam);
|
|
13652
13745
|
resolve(cam);
|
|
13653
13746
|
})["catch"](function (reason) {
|
|
13654
13747
|
logger.error(LOG_PREFIX, reason);
|
|
@@ -13706,7 +13799,7 @@ var createConnection = function createConnection(options) {
|
|
|
13706
13799
|
localVideo.srcObject.addTrack(videoTrack);
|
|
13707
13800
|
}
|
|
13708
13801
|
|
|
13709
|
-
logger.info("Switch mic to " + mic);
|
|
13802
|
+
logger.info(LOG_PREFIX, "Switch mic to " + mic);
|
|
13710
13803
|
resolve(mic);
|
|
13711
13804
|
})["catch"](function (reason) {
|
|
13712
13805
|
logger.error(LOG_PREFIX, reason);
|
|
@@ -13800,7 +13893,7 @@ var createConnection = function createConnection(options) {
|
|
|
13800
13893
|
localVideo.srcObject.addTrack(currentAudioTrack);
|
|
13801
13894
|
}
|
|
13802
13895
|
});
|
|
13803
|
-
logger.info("Switch to screen");
|
|
13896
|
+
logger.info(LOG_PREFIX, "Switch to screen");
|
|
13804
13897
|
screenShare = true;
|
|
13805
13898
|
resolve();
|
|
13806
13899
|
};
|
|
@@ -13832,7 +13925,7 @@ var createConnection = function createConnection(options) {
|
|
|
13832
13925
|
});
|
|
13833
13926
|
}
|
|
13834
13927
|
|
|
13835
|
-
logger.info("Switch to cam");
|
|
13928
|
+
logger.info(LOG_PREFIX, "Switch to cam");
|
|
13836
13929
|
screenShare = false;
|
|
13837
13930
|
};
|
|
13838
13931
|
|
|
@@ -14631,7 +14724,9 @@ var playFirstVideo = function playFirstVideo(display, isLocal, src) {
|
|
|
14631
14724
|
if (!getCacheInstance(display)) {
|
|
14632
14725
|
var video = document.createElement('video');
|
|
14633
14726
|
video.setAttribute("playsinline", "");
|
|
14634
|
-
video.setAttribute("webkit-playsinline", "");
|
|
14727
|
+
video.setAttribute("webkit-playsinline", ""); //Mute video tag to prevent local audio playback in Safari #WCS-3430
|
|
14728
|
+
|
|
14729
|
+
video.muted = true;
|
|
14635
14730
|
video.id = uuid_v1() + (isLocal ? LOCAL_CACHED_VIDEO : REMOTE_CACHED_VIDEO); //in WCS-1560 we removed video.play() call, because it triggers the “Unhandled Promise Rejection” exception in iOS Safari
|
|
14636
14731
|
//in WCS-2160 we rolled back the changes made in WCS-1560 due to no audio on first playback in iOS Safari
|
|
14637
14732
|
|
|
@@ -14702,7 +14797,12 @@ var audioContext;
|
|
|
14702
14797
|
var createConnection = function createConnection(options, handlers) {
|
|
14703
14798
|
return new Promise(function (resolve, reject) {
|
|
14704
14799
|
var id = options.id;
|
|
14705
|
-
var display = options.display;
|
|
14800
|
+
var display = options.display; // Set connection logger #WCS-2434
|
|
14801
|
+
|
|
14802
|
+
if (options.logger) {
|
|
14803
|
+
logger = options.logger;
|
|
14804
|
+
}
|
|
14805
|
+
|
|
14706
14806
|
var canvas = document.createElement("canvas");
|
|
14707
14807
|
display.appendChild(canvas);
|
|
14708
14808
|
canvas.id = id;
|