@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-room-api.js
CHANGED
|
@@ -9071,6 +9071,11 @@ var createConnection = function(options) {
|
|
|
9071
9071
|
var display = options.display || options.localDisplay;
|
|
9072
9072
|
var flashBufferTime = options.flashBufferTime || 0;
|
|
9073
9073
|
|
|
9074
|
+
// Set connection logger #WCS-2434
|
|
9075
|
+
if (options.logger) {
|
|
9076
|
+
logger = options.logger;
|
|
9077
|
+
}
|
|
9078
|
+
|
|
9074
9079
|
var url = getConnectionUrl(options.mainUrl, options.flashProto, options.flashPort);
|
|
9075
9080
|
|
|
9076
9081
|
//todo state from flash instance
|
|
@@ -9635,7 +9640,8 @@ module.exports = {
|
|
|
9635
9640
|
const { v1: uuid_v1 } = require('uuid');
|
|
9636
9641
|
var constants = require("./constants");
|
|
9637
9642
|
var util = require('./util');
|
|
9638
|
-
var
|
|
9643
|
+
var LoggerObject = require('./util').logger;
|
|
9644
|
+
var coreLogger;
|
|
9639
9645
|
var loggerConf = {push: false, severity: "INFO"};
|
|
9640
9646
|
var Promise = require('promise-polyfill');
|
|
9641
9647
|
var KalmanFilter = require('kalmanjs');
|
|
@@ -9678,7 +9684,7 @@ var disableConnectionQualityCalculation;
|
|
|
9678
9684
|
* @param {String=} options.decoderLocation Location of video-worker2.js file
|
|
9679
9685
|
* @param {String=} options.screenSharingExtensionId Chrome screen sharing extension id
|
|
9680
9686
|
* @param {Object=} options.constraints Default local media constraints
|
|
9681
|
-
* @param {Object=} options.logger
|
|
9687
|
+
* @param {Object=} options.logger Core logger options
|
|
9682
9688
|
* @throws {Error} Error if none of MediaProviders available
|
|
9683
9689
|
* @memberof Flashphoner
|
|
9684
9690
|
*/
|
|
@@ -9687,12 +9693,8 @@ var init = function (options) {
|
|
|
9687
9693
|
if (!options) {
|
|
9688
9694
|
options = {};
|
|
9689
9695
|
}
|
|
9690
|
-
|
|
9691
|
-
|
|
9692
|
-
loggerConf.enableLogs = true;
|
|
9693
|
-
}
|
|
9694
|
-
// init logger
|
|
9695
|
-
logger.init(loggerConf.severity || "INFO", loggerConf.push || false, loggerConf.customLogger, loggerConf.enableLogs);
|
|
9696
|
+
// init global logger
|
|
9697
|
+
coreLogger = createLogger(options.logger);
|
|
9696
9698
|
var waitingTemasys = false;
|
|
9697
9699
|
try {
|
|
9698
9700
|
var audioContext = new (window.AudioContext || window.webkitAudioContext)();
|
|
@@ -9709,7 +9711,7 @@ var init = function (options) {
|
|
|
9709
9711
|
constraints: options.constraints || getDefaultMediaConstraints(),
|
|
9710
9712
|
extensionId: options.screenSharingExtensionId,
|
|
9711
9713
|
audioContext: audioContext,
|
|
9712
|
-
logger:
|
|
9714
|
+
logger: coreLogger,
|
|
9713
9715
|
createMicGainNode: enableGainNode
|
|
9714
9716
|
};
|
|
9715
9717
|
webRtcProvider.configure(webRtcConf);
|
|
@@ -9724,7 +9726,7 @@ var init = function (options) {
|
|
|
9724
9726
|
var webRtcConf = {
|
|
9725
9727
|
constraints: options.constraints || getDefaultMediaConstraints(),
|
|
9726
9728
|
extensionId: options.screenSharingExtensionId,
|
|
9727
|
-
logger:
|
|
9729
|
+
logger: coreLogger
|
|
9728
9730
|
};
|
|
9729
9731
|
webRtcProvider.configure(webRtcConf);
|
|
9730
9732
|
|
|
@@ -9750,7 +9752,7 @@ var init = function (options) {
|
|
|
9750
9752
|
var flashConf = {
|
|
9751
9753
|
constraints: options.constraints || getDefaultMediaConstraints(),
|
|
9752
9754
|
flashMediaProviderSwfLocation: options.flashMediaProviderSwfLocation,
|
|
9753
|
-
logger:
|
|
9755
|
+
logger: coreLogger
|
|
9754
9756
|
};
|
|
9755
9757
|
flashProvider.configure(flashConf);
|
|
9756
9758
|
}
|
|
@@ -9770,7 +9772,7 @@ var init = function (options) {
|
|
|
9770
9772
|
receiverLocation: options.receiverLocation,
|
|
9771
9773
|
decoderLocation: options.decoderLocation,
|
|
9772
9774
|
audioContext: audioContext,
|
|
9773
|
-
logger:
|
|
9775
|
+
logger: coreLogger
|
|
9774
9776
|
};
|
|
9775
9777
|
websocketProvider.configure(wsConf);
|
|
9776
9778
|
}
|
|
@@ -9790,7 +9792,7 @@ var init = function (options) {
|
|
|
9790
9792
|
MediaProvider = _MediaProvider;
|
|
9791
9793
|
}
|
|
9792
9794
|
} else {
|
|
9793
|
-
|
|
9795
|
+
corelogger.warn(LOG_PREFIX, "Preferred media provider is not available.");
|
|
9794
9796
|
}
|
|
9795
9797
|
}
|
|
9796
9798
|
if (options.preferredMediaProviders && options.preferredMediaProviders.length > 0) {
|
|
@@ -9813,7 +9815,7 @@ var init = function (options) {
|
|
|
9813
9815
|
if (!waitingTemasys && options.mediaProvidersReadyCallback) {
|
|
9814
9816
|
options.mediaProvidersReadyCallback(Object.keys(MediaProvider));
|
|
9815
9817
|
}
|
|
9816
|
-
|
|
9818
|
+
coreLogger.info(LOG_PREFIX, "Initialized");
|
|
9817
9819
|
initialized = true;
|
|
9818
9820
|
}
|
|
9819
9821
|
};
|
|
@@ -9851,17 +9853,16 @@ var playFirstVideo = function (display, isLocal, src) {
|
|
|
9851
9853
|
};
|
|
9852
9854
|
|
|
9853
9855
|
/**
|
|
9854
|
-
* Get logger
|
|
9856
|
+
* Get core logger
|
|
9855
9857
|
*
|
|
9856
9858
|
* @returns {Object} Logger
|
|
9857
9859
|
* @memberof Flashphoner
|
|
9858
9860
|
*/
|
|
9859
|
-
|
|
9860
9861
|
var getLogger = function () {
|
|
9861
9862
|
if (!initialized) {
|
|
9862
9863
|
console.warn("Initialize API first.");
|
|
9863
9864
|
} else {
|
|
9864
|
-
return
|
|
9865
|
+
return coreLogger;
|
|
9865
9866
|
}
|
|
9866
9867
|
}
|
|
9867
9868
|
|
|
@@ -10020,6 +10021,26 @@ var getSession = function (id) {
|
|
|
10020
10021
|
return sessions[id];
|
|
10021
10022
|
};
|
|
10022
10023
|
|
|
10024
|
+
// Get logger configuration from options
|
|
10025
|
+
var getLoggerConf = function(loggerOptions) {
|
|
10026
|
+
var conf = loggerOptions || loggerConf;
|
|
10027
|
+
if (loggerOptions !== null) {
|
|
10028
|
+
conf.enableLogs = true;
|
|
10029
|
+
}
|
|
10030
|
+
return conf;
|
|
10031
|
+
}
|
|
10032
|
+
|
|
10033
|
+
// Create a new logger object
|
|
10034
|
+
var createLogger = function(loggerOptions, parentLogger = coreLogger) {
|
|
10035
|
+
var newLogger = parentLogger;
|
|
10036
|
+
if (newLogger === undefined || loggerOptions != undefined) {
|
|
10037
|
+
var loggerConf = getLoggerConf(loggerOptions);
|
|
10038
|
+
newLogger = new LoggerObject;
|
|
10039
|
+
newLogger.init(loggerConf.severity || "INFO", loggerConf.push || false, loggerConf.customLogger, loggerConf.enableLogs);
|
|
10040
|
+
}
|
|
10041
|
+
return newLogger;
|
|
10042
|
+
}
|
|
10043
|
+
|
|
10023
10044
|
/**
|
|
10024
10045
|
* Create new session and connect to server.
|
|
10025
10046
|
*
|
|
@@ -10038,6 +10059,7 @@ var getSession = function (id) {
|
|
|
10038
10059
|
* @param {Integer=} options.pingInterval Server ping interval in milliseconds [0]
|
|
10039
10060
|
* @param {Integer=} options.receiveProbes A maximum subsequental pings received missing count [0]
|
|
10040
10061
|
* @param {Integer=} options.probesInterval Interval to check subsequental pings received [0]
|
|
10062
|
+
* @param {Object=} options.logger Session logger options
|
|
10041
10063
|
* @returns {Session} Created session
|
|
10042
10064
|
* @throws {Error} Error if API is not initialized
|
|
10043
10065
|
* @throws {TypeError} Error if options.urlServer is not specified
|
|
@@ -10052,6 +10074,11 @@ var createSession = function (options) {
|
|
|
10052
10074
|
throw new TypeError("options.urlServer must be provided");
|
|
10053
10075
|
}
|
|
10054
10076
|
|
|
10077
|
+
// Set session logger #WCS-2434
|
|
10078
|
+
var sessionLogger = createLogger(options.logger)
|
|
10079
|
+
// Override logger for all low level operations
|
|
10080
|
+
var logger = sessionLogger;
|
|
10081
|
+
|
|
10055
10082
|
var id_ = uuid_v1();
|
|
10056
10083
|
var sessionStatus = SESSION_STATUS.PENDING;
|
|
10057
10084
|
var urlServer = options.urlServer;
|
|
@@ -10150,7 +10177,7 @@ var createSession = function (options) {
|
|
|
10150
10177
|
if (timeout != undefined && timeout > 0) {
|
|
10151
10178
|
connectionTimeout = setTimeout(function() {
|
|
10152
10179
|
if (wsConnection.readyState == 0) {
|
|
10153
|
-
|
|
10180
|
+
logger.warn(LOG_PREFIX, "WS connection timeout");
|
|
10154
10181
|
wsConnection.close();
|
|
10155
10182
|
}
|
|
10156
10183
|
}, timeout);
|
|
@@ -10171,7 +10198,7 @@ var createSession = function (options) {
|
|
|
10171
10198
|
mediaProviders: Object.keys(MediaProvider),
|
|
10172
10199
|
keepAlive: keepAlive,
|
|
10173
10200
|
authToken:authToken,
|
|
10174
|
-
clientVersion: "2.0.
|
|
10201
|
+
clientVersion: "2.0.215",
|
|
10175
10202
|
clientOSVersion: window.navigator.appVersion,
|
|
10176
10203
|
clientBrowserVersion: window.navigator.userAgent,
|
|
10177
10204
|
msePacketizationVersion: 2,
|
|
@@ -10428,6 +10455,7 @@ var createSession = function (options) {
|
|
|
10428
10455
|
* @param {Array<string>=} options.sipSDP Array of custom SDP params (ex. bandwidth (b=))
|
|
10429
10456
|
* @param {Array<string>=} options.sipHeaders Array of custom SIP headers
|
|
10430
10457
|
* @param {string=} options.videoContentHint Video content hint for browser ('detail' by default to maintain resolution), {@link Flashphoner.constants.CONTENT_HINT_TYPE}
|
|
10458
|
+
* @param {Object=} options.logger Call logger options
|
|
10431
10459
|
* @param {sdpHook} sdpHook The callback that handles sdp from the server
|
|
10432
10460
|
* @returns {Call} Call
|
|
10433
10461
|
* @throws {TypeError} Error if no options provided
|
|
@@ -10438,14 +10466,19 @@ var createSession = function (options) {
|
|
|
10438
10466
|
var createCall = function (options) {
|
|
10439
10467
|
//check session state
|
|
10440
10468
|
if (sessionStatus !== SESSION_STATUS.REGISTERED && sessionStatus !== SESSION_STATUS.ESTABLISHED) {
|
|
10441
|
-
|
|
10442
|
-
throw new Error('Invalid session state');
|
|
10469
|
+
throw new Error('Invalid session state ' + sessionStatus);
|
|
10443
10470
|
}
|
|
10444
10471
|
|
|
10445
10472
|
//check options
|
|
10446
10473
|
if (!options) {
|
|
10447
10474
|
throw new TypeError("options must be provided");
|
|
10448
10475
|
}
|
|
10476
|
+
|
|
10477
|
+
// Set call logger #WCS-2434
|
|
10478
|
+
var callLogger = createLogger(options.logger, sessionLogger);
|
|
10479
|
+
// Override logger for all low level operations
|
|
10480
|
+
var logger = callLogger;
|
|
10481
|
+
|
|
10449
10482
|
var login = (appKey == 'clickToCallApp') ? '' : cConfig.sipLogin;
|
|
10450
10483
|
var caller_ = (options.incoming) ? options.caller : login;
|
|
10451
10484
|
var callee_ = options.callee;
|
|
@@ -10581,7 +10614,8 @@ var createSession = function (options) {
|
|
|
10581
10614
|
constraints: constraints,
|
|
10582
10615
|
connectionConfig: mediaOptions,
|
|
10583
10616
|
audioOutputId: audioOutputId,
|
|
10584
|
-
videoContentHint: videoContentHint
|
|
10617
|
+
videoContentHint: videoContentHint,
|
|
10618
|
+
logger: logger
|
|
10585
10619
|
}).then(function (newConnection) {
|
|
10586
10620
|
mediaConnection = newConnection;
|
|
10587
10621
|
return mediaConnection.createOffer({
|
|
@@ -11092,7 +11126,7 @@ var createSession = function (options) {
|
|
|
11092
11126
|
/**
|
|
11093
11127
|
* Get call info
|
|
11094
11128
|
* @returns {string} Info
|
|
11095
|
-
* @memberof
|
|
11129
|
+
* @memberof Call
|
|
11096
11130
|
* @inner
|
|
11097
11131
|
*/
|
|
11098
11132
|
var getInfo = function () {
|
|
@@ -11102,13 +11136,22 @@ var createSession = function (options) {
|
|
|
11102
11136
|
/**
|
|
11103
11137
|
* Get stream error info
|
|
11104
11138
|
* @returns {string} Error info
|
|
11105
|
-
* @memberof
|
|
11139
|
+
* @memberof Call
|
|
11106
11140
|
* @inner
|
|
11107
11141
|
*/
|
|
11108
11142
|
var getErrorInfo = function () {
|
|
11109
11143
|
return errorInfo_;
|
|
11110
11144
|
};
|
|
11111
11145
|
|
|
11146
|
+
/**
|
|
11147
|
+
* Get call logger
|
|
11148
|
+
*
|
|
11149
|
+
* @returns {Object} Logger
|
|
11150
|
+
* @memberof Call
|
|
11151
|
+
*/
|
|
11152
|
+
var getLogger = function () {
|
|
11153
|
+
return callLogger;
|
|
11154
|
+
};
|
|
11112
11155
|
|
|
11113
11156
|
call.call = call_;
|
|
11114
11157
|
call.answer = answer;
|
|
@@ -11140,6 +11183,7 @@ var createSession = function (options) {
|
|
|
11140
11183
|
call.switchMic = switchMic;
|
|
11141
11184
|
call.switchToScreen = switchToScreen;
|
|
11142
11185
|
call.switchToCam = switchToCam;
|
|
11186
|
+
call.getLogger = getLogger;
|
|
11143
11187
|
calls[id_] = call;
|
|
11144
11188
|
return call;
|
|
11145
11189
|
};
|
|
@@ -11187,6 +11231,7 @@ var createSession = function (options) {
|
|
|
11187
11231
|
* @param {string=} options.useCanvasMediaStream EXPERIMENTAL: when publish bind browser's media stream to the canvas. It can be useful for image filtering
|
|
11188
11232
|
* @param {string=} options.videoContentHint Video content hint for browser ('detail' by default to maintain resolution), {@link Flashphoner.constants.CONTENT_HINT_TYPE}
|
|
11189
11233
|
* @param {Boolean=} options.unmutePlayOnStart Unmute playback on start. May be used after user gesture only, so set 'unmutePlayOnStart: false' for autoplay
|
|
11234
|
+
* @param {Object=} options.logger Stream logger options
|
|
11190
11235
|
* @param {sdpHook} sdpHook The callback that handles sdp from the server
|
|
11191
11236
|
* @returns {Stream} Stream
|
|
11192
11237
|
* @throws {TypeError} Error if no options provided
|
|
@@ -11201,7 +11246,7 @@ var createSession = function (options) {
|
|
|
11201
11246
|
var availableCallbacks = [];
|
|
11202
11247
|
//check session state
|
|
11203
11248
|
if (sessionStatus !== SESSION_STATUS.ESTABLISHED) {
|
|
11204
|
-
throw new Error('Invalid session state');
|
|
11249
|
+
throw new Error('Invalid session state ' + sessionStatus);
|
|
11205
11250
|
}
|
|
11206
11251
|
|
|
11207
11252
|
//check options
|
|
@@ -11212,6 +11257,11 @@ var createSession = function (options) {
|
|
|
11212
11257
|
throw new TypeError("options.name must be provided");
|
|
11213
11258
|
}
|
|
11214
11259
|
|
|
11260
|
+
// Set stream logger #WCS-2434
|
|
11261
|
+
var streamLogger = createLogger(options.logger, sessionLogger);
|
|
11262
|
+
// Override logger for all low level operations
|
|
11263
|
+
var logger = streamLogger;
|
|
11264
|
+
|
|
11215
11265
|
var clientKf = new KalmanFilter();
|
|
11216
11266
|
var serverKf = new KalmanFilter();
|
|
11217
11267
|
|
|
@@ -11448,7 +11498,7 @@ var createSession = function (options) {
|
|
|
11448
11498
|
var play = function () {
|
|
11449
11499
|
logger.debug(LOG_PREFIX, "Play stream " + name_);
|
|
11450
11500
|
if (status_ !== STREAM_STATUS.NEW) {
|
|
11451
|
-
throw new Error("Invalid stream state");
|
|
11501
|
+
throw new Error("Invalid stream state " + status_);
|
|
11452
11502
|
}
|
|
11453
11503
|
status_ = STREAM_STATUS.PENDING;
|
|
11454
11504
|
//create mediaProvider connection
|
|
@@ -11466,7 +11516,8 @@ var createSession = function (options) {
|
|
|
11466
11516
|
audioOutputId: audioOutputId,
|
|
11467
11517
|
remoteVideo: remoteVideo,
|
|
11468
11518
|
playoutDelay: playoutDelay,
|
|
11469
|
-
unmutePlayOnStart: unmutePlayOnStart
|
|
11519
|
+
unmutePlayOnStart: unmutePlayOnStart,
|
|
11520
|
+
logger: logger
|
|
11470
11521
|
}, streamRefreshHandlers[id_]).then(function (newConnection) {
|
|
11471
11522
|
mediaConnection = newConnection;
|
|
11472
11523
|
try {
|
|
@@ -11523,7 +11574,7 @@ var createSession = function (options) {
|
|
|
11523
11574
|
var publish = function () {
|
|
11524
11575
|
logger.debug(LOG_PREFIX, "Publish stream " + name_);
|
|
11525
11576
|
if (status_ !== STREAM_STATUS.NEW) {
|
|
11526
|
-
throw new Error("Invalid stream state");
|
|
11577
|
+
throw new Error("Invalid stream state " + status_);
|
|
11527
11578
|
}
|
|
11528
11579
|
status_ = STREAM_STATUS.PENDING;
|
|
11529
11580
|
published_ = true;
|
|
@@ -11554,7 +11605,8 @@ var createSession = function (options) {
|
|
|
11554
11605
|
connectionConfig: mediaOptions,
|
|
11555
11606
|
connectionConstraints: mediaConnectionConstraints,
|
|
11556
11607
|
customStream: constraints && constraints.customStream ? constraints.customStream : false,
|
|
11557
|
-
videoContentHint: videoContentHint
|
|
11608
|
+
videoContentHint: videoContentHint,
|
|
11609
|
+
logger: logger
|
|
11558
11610
|
}).then(function (newConnection) {
|
|
11559
11611
|
mediaConnection = newConnection;
|
|
11560
11612
|
return mediaConnection.createOffer({
|
|
@@ -12133,6 +12185,16 @@ var createSession = function (options) {
|
|
|
12133
12185
|
});
|
|
12134
12186
|
};
|
|
12135
12187
|
|
|
12188
|
+
/**
|
|
12189
|
+
* Get stream logger
|
|
12190
|
+
*
|
|
12191
|
+
* @returns {Object} Logger
|
|
12192
|
+
* @memberof Stream
|
|
12193
|
+
*/
|
|
12194
|
+
var getLogger = function () {
|
|
12195
|
+
return streamLogger;
|
|
12196
|
+
};
|
|
12197
|
+
|
|
12136
12198
|
stream.play = play;
|
|
12137
12199
|
stream.publish = publish;
|
|
12138
12200
|
stream.stop = stop;
|
|
@@ -12171,6 +12233,7 @@ var createSession = function (options) {
|
|
|
12171
12233
|
stream.switchToScreen = switchToScreen;
|
|
12172
12234
|
stream.switchToCam = switchToCam;
|
|
12173
12235
|
stream.sendData = sendData;
|
|
12236
|
+
stream.getLogger = getLogger;
|
|
12174
12237
|
|
|
12175
12238
|
streams[id_] = stream;
|
|
12176
12239
|
return stream;
|
|
@@ -12361,6 +12424,16 @@ var createSession = function (options) {
|
|
|
12361
12424
|
return sdp;
|
|
12362
12425
|
}
|
|
12363
12426
|
|
|
12427
|
+
/**
|
|
12428
|
+
* Get session logger
|
|
12429
|
+
*
|
|
12430
|
+
* @returns {Object} Logger
|
|
12431
|
+
* @memberof Session
|
|
12432
|
+
*/
|
|
12433
|
+
var getLogger = function () {
|
|
12434
|
+
return sessionLogger;
|
|
12435
|
+
};
|
|
12436
|
+
|
|
12364
12437
|
//export Session
|
|
12365
12438
|
session.id = id;
|
|
12366
12439
|
session.status = status;
|
|
@@ -12375,6 +12448,7 @@ var createSession = function (options) {
|
|
|
12375
12448
|
session.startDebug = startDebug;
|
|
12376
12449
|
session.stopDebug = stopDebug;
|
|
12377
12450
|
session.on = on;
|
|
12451
|
+
session.getLogger = getLogger;
|
|
12378
12452
|
|
|
12379
12453
|
//save interface to global map
|
|
12380
12454
|
sessions[id_] = session;
|
|
@@ -12877,8 +12951,15 @@ var appSession = function (options) {
|
|
|
12877
12951
|
|
|
12878
12952
|
//participant helpers
|
|
12879
12953
|
function play(streamName) {
|
|
12880
|
-
|
|
12881
|
-
|
|
12954
|
+
// Pass stream options to play #WCS-3445
|
|
12955
|
+
return function (display, options = {}) {
|
|
12956
|
+
var streamOptions = {
|
|
12957
|
+
...options,
|
|
12958
|
+
name: streamName,
|
|
12959
|
+
display: display,
|
|
12960
|
+
custom: {name: name_}
|
|
12961
|
+
};
|
|
12962
|
+
var stream = session.createStream(streamOptions);
|
|
12882
12963
|
stream.play();
|
|
12883
12964
|
return stream;
|
|
12884
12965
|
}
|
|
@@ -12992,6 +13073,11 @@ var Promise = require('es6-promise').Promise;
|
|
|
12992
13073
|
|
|
12993
13074
|
var createConnection = function (options) {
|
|
12994
13075
|
return new Promise(function (resolve, reject) {
|
|
13076
|
+
// Set connection logger #WCS-2434
|
|
13077
|
+
if (options.logger) {
|
|
13078
|
+
logger = options.logger;
|
|
13079
|
+
}
|
|
13080
|
+
|
|
12995
13081
|
var id = options.id;
|
|
12996
13082
|
var connectionConfig = options.connectionConfig || {"iceServers": []};
|
|
12997
13083
|
var connection = new RTCPeerConnection(connectionConfig, {
|
|
@@ -13547,148 +13633,154 @@ module.exports = {
|
|
|
13547
13633
|
},{"./util":46,"es6-promise":1,"uuid":9,"webrtc-adapter":24}],46:[function(require,module,exports){
|
|
13548
13634
|
'use strict';
|
|
13549
13635
|
|
|
13550
|
-
|
|
13636
|
+
const isEmptyObject = function( obj ) {
|
|
13637
|
+
for ( var name in obj ) {
|
|
13638
|
+
return false;
|
|
13639
|
+
}
|
|
13640
|
+
return true;
|
|
13641
|
+
};
|
|
13551
13642
|
|
|
13552
|
-
|
|
13553
|
-
|
|
13554
|
-
|
|
13643
|
+
/**
|
|
13644
|
+
* Copy values of object own properties to array.
|
|
13645
|
+
*
|
|
13646
|
+
* @param obj
|
|
13647
|
+
* @returns {Array}
|
|
13648
|
+
*/
|
|
13649
|
+
const copyObjectToArray = function(obj) {
|
|
13650
|
+
var ret = [];
|
|
13651
|
+
for (var prop in obj) {
|
|
13652
|
+
if(obj.hasOwnProperty(prop)) {
|
|
13653
|
+
ret.push(obj[prop]);
|
|
13555
13654
|
}
|
|
13556
|
-
|
|
13557
|
-
|
|
13655
|
+
}
|
|
13656
|
+
return ret;
|
|
13657
|
+
};
|
|
13558
13658
|
|
|
13559
|
-
|
|
13560
|
-
|
|
13561
|
-
|
|
13562
|
-
|
|
13563
|
-
|
|
13564
|
-
|
|
13565
|
-
|
|
13566
|
-
|
|
13567
|
-
for (var prop in obj) {
|
|
13568
|
-
if(obj.hasOwnProperty(prop)) {
|
|
13569
|
-
ret.push(obj[prop]);
|
|
13570
|
-
}
|
|
13571
|
-
}
|
|
13572
|
-
return ret;
|
|
13573
|
-
},
|
|
13574
|
-
/**
|
|
13575
|
-
* Copy src properties to dst object.
|
|
13576
|
-
* Will overwrite dst prop with src prop in case of dst prop exist.
|
|
13577
|
-
*/
|
|
13578
|
-
copyObjectPropsToAnotherObject: function(src, dst) {
|
|
13579
|
-
for (var prop in src) {
|
|
13580
|
-
if(src.hasOwnProperty(prop)) {
|
|
13581
|
-
dst[prop] = src[prop];
|
|
13582
|
-
}
|
|
13659
|
+
/**
|
|
13660
|
+
* Copy src properties to dst object.
|
|
13661
|
+
* Will overwrite dst prop with src prop in case of dst prop exist.
|
|
13662
|
+
*/
|
|
13663
|
+
const copyObjectPropsToAnotherObject = function(src, dst) {
|
|
13664
|
+
for (var prop in src) {
|
|
13665
|
+
if(src.hasOwnProperty(prop)) {
|
|
13666
|
+
dst[prop] = src[prop];
|
|
13583
13667
|
}
|
|
13584
|
-
}
|
|
13585
|
-
|
|
13586
|
-
var result = {};
|
|
13587
|
-
if (browser == "chrome") {
|
|
13588
|
-
/**
|
|
13589
|
-
* Report types: googComponent, googCandidatePair, googCertificate, googLibjingleSession, googTrack, ssrc
|
|
13590
|
-
*/
|
|
13591
|
-
var gotResult = false;
|
|
13592
|
-
if (report.type && report.type == "googCandidatePair") {
|
|
13593
|
-
//check if this is active pair
|
|
13594
|
-
if (report.googActiveConnection == "true") {
|
|
13595
|
-
gotResult = true;
|
|
13596
|
-
}
|
|
13597
|
-
}
|
|
13668
|
+
}
|
|
13669
|
+
};
|
|
13598
13670
|
|
|
13599
|
-
|
|
13671
|
+
const processRtcStatsReport = function(browser, report) {
|
|
13672
|
+
var result = {};
|
|
13673
|
+
if (browser == "chrome") {
|
|
13674
|
+
/**
|
|
13675
|
+
* Report types: googComponent, googCandidatePair, googCertificate, googLibjingleSession, googTrack, ssrc
|
|
13676
|
+
*/
|
|
13677
|
+
var gotResult = false;
|
|
13678
|
+
if (report.type && report.type == "googCandidatePair") {
|
|
13679
|
+
//check if this is active pair
|
|
13680
|
+
if (report.googActiveConnection == "true") {
|
|
13600
13681
|
gotResult = true;
|
|
13601
13682
|
}
|
|
13683
|
+
}
|
|
13602
13684
|
|
|
13603
|
-
|
|
13604
|
-
|
|
13605
|
-
|
|
13606
|
-
|
|
13607
|
-
|
|
13685
|
+
if (report.type && report.type == "ssrc") {
|
|
13686
|
+
gotResult = true;
|
|
13687
|
+
}
|
|
13688
|
+
|
|
13689
|
+
if (gotResult) {
|
|
13690
|
+
for (var k in report) {
|
|
13691
|
+
if (report.hasOwnProperty(k)) {
|
|
13692
|
+
result[k] = report[k];
|
|
13608
13693
|
}
|
|
13609
13694
|
}
|
|
13610
|
-
|
|
13611
|
-
|
|
13612
|
-
|
|
13613
|
-
|
|
13614
|
-
|
|
13695
|
+
}
|
|
13696
|
+
return result;
|
|
13697
|
+
} else if (browser == "firefox") {
|
|
13698
|
+
/**
|
|
13699
|
+
* RTCStatsReport http://mxr.mozilla.org/mozilla-central/source/dom/webidl/RTCStatsReport.webidl
|
|
13700
|
+
*/
|
|
13615
13701
|
|
|
13616
|
-
|
|
13617
|
-
|
|
13618
|
-
|
|
13619
|
-
|
|
13620
|
-
|
|
13621
|
-
}
|
|
13702
|
+
if (report.type && (report.type == "outboundrtp" || report.type == "inboundrtp") && report.id.indexOf("rtcp") == -1) {
|
|
13703
|
+
result = {};
|
|
13704
|
+
for (var k in report) {
|
|
13705
|
+
if (report.hasOwnProperty(k)) {
|
|
13706
|
+
result[k] = report[k];
|
|
13622
13707
|
}
|
|
13623
13708
|
}
|
|
13709
|
+
}
|
|
13624
13710
|
|
|
13625
|
-
|
|
13626
|
-
|
|
13711
|
+
return result;
|
|
13712
|
+
} else {
|
|
13713
|
+
return result
|
|
13714
|
+
}
|
|
13715
|
+
};
|
|
13716
|
+
|
|
13717
|
+
const Browser = {
|
|
13718
|
+
isIE: function () {
|
|
13719
|
+
return /*@cc_on!@*/false || !!document.documentMode;
|
|
13627
13720
|
},
|
|
13628
|
-
|
|
13629
|
-
|
|
13630
|
-
return /*@cc_on!@*/false || !!document.documentMode;
|
|
13631
|
-
},
|
|
13632
|
-
isFirefox: function () {
|
|
13633
|
-
return typeof InstallTrigger !== 'undefined';
|
|
13634
|
-
},
|
|
13635
|
-
isChrome: function () {
|
|
13636
|
-
return !!window.chrome && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent);
|
|
13637
|
-
},
|
|
13638
|
-
isEdge: function () {
|
|
13639
|
-
return !isIE && !!window.StyleMedia;
|
|
13640
|
-
},
|
|
13641
|
-
isOpera: function () {
|
|
13642
|
-
return (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
|
13643
|
-
},
|
|
13644
|
-
isiOS: function () {
|
|
13645
|
-
return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
|
|
13646
|
-
},
|
|
13647
|
-
isSafari: function () {
|
|
13648
|
-
var userAgent = navigator.userAgent.toLowerCase();
|
|
13649
|
-
return /(safari|applewebkit)/i.test(userAgent) && !userAgent.includes("chrome") && !userAgent.includes("android");
|
|
13650
|
-
},
|
|
13651
|
-
isAndroid: function () {
|
|
13652
|
-
return navigator.userAgent.toLowerCase().indexOf("android") > -1;
|
|
13653
|
-
},
|
|
13654
|
-
isSafariWebRTC: function () {
|
|
13655
|
-
return navigator.mediaDevices && this.isSafari();
|
|
13656
|
-
},
|
|
13657
|
-
isSamsungBrowser: function() {
|
|
13658
|
-
return /SamsungBrowser/i.test(navigator.userAgent);
|
|
13659
|
-
},
|
|
13660
|
-
isAndroidFirefox: function () {
|
|
13661
|
-
return this.isAndroid() && /Firefox/i.test(navigator.userAgent);
|
|
13662
|
-
}
|
|
13721
|
+
isFirefox: function () {
|
|
13722
|
+
return typeof InstallTrigger !== 'undefined';
|
|
13663
13723
|
},
|
|
13664
|
-
|
|
13665
|
-
|
|
13666
|
-
|
|
13667
|
-
|
|
13668
|
-
|
|
13669
|
-
|
|
13670
|
-
|
|
13671
|
-
|
|
13672
|
-
|
|
13673
|
-
|
|
13674
|
-
|
|
13675
|
-
|
|
13676
|
-
|
|
13677
|
-
|
|
13678
|
-
|
|
13679
|
-
|
|
13724
|
+
isChrome: function () {
|
|
13725
|
+
return !!window.chrome && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent);
|
|
13726
|
+
},
|
|
13727
|
+
isEdge: function () {
|
|
13728
|
+
return !isIE && !!window.StyleMedia;
|
|
13729
|
+
},
|
|
13730
|
+
isOpera: function () {
|
|
13731
|
+
return (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
|
13732
|
+
},
|
|
13733
|
+
isiOS: function () {
|
|
13734
|
+
return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
|
|
13735
|
+
},
|
|
13736
|
+
isSafari: function () {
|
|
13737
|
+
var userAgent = navigator.userAgent.toLowerCase();
|
|
13738
|
+
return /(safari|applewebkit)/i.test(userAgent) && !userAgent.includes("chrome") && !userAgent.includes("android");
|
|
13739
|
+
},
|
|
13740
|
+
isAndroid: function () {
|
|
13741
|
+
return navigator.userAgent.toLowerCase().indexOf("android") > -1;
|
|
13742
|
+
},
|
|
13743
|
+
isSafariWebRTC: function () {
|
|
13744
|
+
return navigator.mediaDevices && this.isSafari();
|
|
13745
|
+
},
|
|
13746
|
+
isSamsungBrowser: function() {
|
|
13747
|
+
return /SamsungBrowser/i.test(navigator.userAgent);
|
|
13748
|
+
},
|
|
13749
|
+
isAndroidFirefox: function () {
|
|
13750
|
+
return this.isAndroid() && /Firefox/i.test(navigator.userAgent);
|
|
13751
|
+
}
|
|
13752
|
+
};
|
|
13753
|
+
|
|
13754
|
+
const SDP = {
|
|
13755
|
+
matchPrefix: function(sdp,prefix) {
|
|
13756
|
+
var parts = sdp.trim().split('\n').map(function(line) {
|
|
13757
|
+
return line.trim();
|
|
13758
|
+
});
|
|
13759
|
+
return parts.filter(function(line) {
|
|
13760
|
+
return line.indexOf(prefix) === 0;
|
|
13761
|
+
});
|
|
13762
|
+
},
|
|
13763
|
+
writeFmtp: function (sdp, param, codec) {
|
|
13764
|
+
var sdpArray = sdp.split("\n");
|
|
13765
|
+
var i;
|
|
13766
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
13767
|
+
if (sdpArray[i].search(codec) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
|
|
13768
|
+
sdpArray[i] += "\na=fmtp:" + sdpArray[i].match(/[0-9]+/)[0] + " " + param + "\r";
|
|
13680
13769
|
}
|
|
13681
|
-
|
|
13682
|
-
|
|
13683
|
-
|
|
13684
|
-
|
|
13685
|
-
|
|
13686
|
-
|
|
13770
|
+
}
|
|
13771
|
+
//normalize sdp after modifications
|
|
13772
|
+
var result = "";
|
|
13773
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
13774
|
+
if (sdpArray[i] != "") {
|
|
13775
|
+
result += sdpArray[i] + "\n";
|
|
13687
13776
|
}
|
|
13688
|
-
return result;
|
|
13689
13777
|
}
|
|
13690
|
-
|
|
13691
|
-
|
|
13778
|
+
return result;
|
|
13779
|
+
}
|
|
13780
|
+
};
|
|
13781
|
+
|
|
13782
|
+
const logger = function() {
|
|
13783
|
+
return {
|
|
13692
13784
|
init: function (verbosity, enablePushLogs, customLogger, enableLogs) {
|
|
13693
13785
|
switch (verbosity.toUpperCase()) {
|
|
13694
13786
|
case "DEBUG":
|
|
@@ -13725,7 +13817,6 @@ module.exports = {
|
|
|
13725
13817
|
data: [{logs: delayedLogs[i]}]
|
|
13726
13818
|
}));
|
|
13727
13819
|
}
|
|
13728
|
-
|
|
13729
13820
|
}
|
|
13730
13821
|
delayedLogs = [];
|
|
13731
13822
|
this.wsConnection.send(JSON.stringify({
|
|
@@ -13749,7 +13840,7 @@ module.exports = {
|
|
|
13749
13840
|
this.customLogger.info(text);
|
|
13750
13841
|
} else {
|
|
13751
13842
|
console.log(prefix,text);
|
|
13752
|
-
|
|
13843
|
+
}
|
|
13753
13844
|
}
|
|
13754
13845
|
},
|
|
13755
13846
|
debug: function (src, text) {
|
|
@@ -13770,7 +13861,7 @@ module.exports = {
|
|
|
13770
13861
|
if (!this.enableLogs){
|
|
13771
13862
|
return;
|
|
13772
13863
|
}
|
|
13773
|
-
|
|
13864
|
+
var prefix = this.date() + " TRACE " + src + " - ";
|
|
13774
13865
|
this.pushLogs(prefix + JSON.stringify(text) + '\n');
|
|
13775
13866
|
if (this.verbosity >= 4) {
|
|
13776
13867
|
if (this.customLogger != null) {
|
|
@@ -13784,7 +13875,7 @@ module.exports = {
|
|
|
13784
13875
|
if (!this.enableLogs){
|
|
13785
13876
|
return;
|
|
13786
13877
|
}
|
|
13787
|
-
|
|
13878
|
+
var prefix = this.date() + " WARN " + src + " - ";
|
|
13788
13879
|
this.pushLogs(prefix + JSON.stringify(text) + '\n');
|
|
13789
13880
|
if (this.verbosity >= 1) {
|
|
13790
13881
|
if (this.customLogger != null) {
|
|
@@ -13798,7 +13889,7 @@ module.exports = {
|
|
|
13798
13889
|
if (!this.enableLogs){
|
|
13799
13890
|
return;
|
|
13800
13891
|
}
|
|
13801
|
-
|
|
13892
|
+
var prefix = this.date() + " ERROR " + src + " - ";
|
|
13802
13893
|
this.pushLogs(prefix + JSON.stringify(text) + '\n');
|
|
13803
13894
|
if (this.verbosity >= 0) {
|
|
13804
13895
|
if (this.customLogger != null) {
|
|
@@ -13840,82 +13931,96 @@ module.exports = {
|
|
|
13840
13931
|
break;
|
|
13841
13932
|
default :
|
|
13842
13933
|
this.verbosity = 2;
|
|
13843
|
-
}
|
|
13934
|
+
}
|
|
13844
13935
|
}
|
|
13845
|
-
}
|
|
13846
|
-
|
|
13847
|
-
if (!codecs.length) return sdp;
|
|
13936
|
+
}
|
|
13937
|
+
};
|
|
13848
13938
|
|
|
13849
|
-
|
|
13850
|
-
|
|
13939
|
+
const stripCodecs = function(sdp, codecs) {
|
|
13940
|
+
if (!codecs.length) return sdp;
|
|
13851
13941
|
|
|
13852
|
-
|
|
13853
|
-
|
|
13854
|
-
|
|
13855
|
-
|
|
13856
|
-
|
|
13942
|
+
var sdpArray = sdp.split("\n");
|
|
13943
|
+
var codecsArray = codecs.split(",");
|
|
13944
|
+
|
|
13945
|
+
//search and delete codecs line
|
|
13946
|
+
var pt = [];
|
|
13947
|
+
var i;
|
|
13948
|
+
for (var p = 0; p < codecsArray.length; p++) {
|
|
13949
|
+
console.log("Searching for codec " + codecsArray[p]);
|
|
13950
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
13951
|
+
if (sdpArray[i].search(new RegExp(codecsArray[p],'i')) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
|
|
13952
|
+
console.log(codecsArray[p] + " detected");
|
|
13953
|
+
pt.push(sdpArray[i].match(/[0-9]+/)[0]);
|
|
13954
|
+
sdpArray[i] = "";
|
|
13955
|
+
}
|
|
13956
|
+
}
|
|
13957
|
+
}
|
|
13958
|
+
if (pt.length) {
|
|
13959
|
+
//searching for fmtp
|
|
13960
|
+
for (p = 0; p < pt.length; p++) {
|
|
13857
13961
|
for (i = 0; i < sdpArray.length; i++) {
|
|
13858
|
-
if (sdpArray[i].search(
|
|
13859
|
-
console.log(codecsArray[p] + " detected");
|
|
13860
|
-
pt.push(sdpArray[i].match(/[0-9]+/)[0]);
|
|
13962
|
+
if (sdpArray[i].search("a=fmtp:" + pt[p]) != -1 || sdpArray[i].search("a=rtcp-fb:" + pt[p]) != -1) {
|
|
13861
13963
|
sdpArray[i] = "";
|
|
13862
13964
|
}
|
|
13863
13965
|
}
|
|
13864
13966
|
}
|
|
13865
|
-
if (pt.length) {
|
|
13866
|
-
//searching for fmtp
|
|
13867
|
-
for (p = 0; p < pt.length; p++) {
|
|
13868
|
-
for (i = 0; i < sdpArray.length; i++) {
|
|
13869
|
-
if (sdpArray[i].search("a=fmtp:" + pt[p]) != -1 || sdpArray[i].search("a=rtcp-fb:" + pt[p]) != -1) {
|
|
13870
|
-
sdpArray[i] = "";
|
|
13871
|
-
}
|
|
13872
|
-
}
|
|
13873
|
-
}
|
|
13874
13967
|
|
|
13875
|
-
|
|
13876
|
-
|
|
13877
|
-
|
|
13878
|
-
|
|
13879
|
-
|
|
13880
|
-
|
|
13881
|
-
|
|
13882
|
-
|
|
13883
|
-
|
|
13884
|
-
|
|
13885
|
-
}
|
|
13968
|
+
//delete entries from m= line
|
|
13969
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
13970
|
+
if (sdpArray[i].search("m=audio") != -1 || sdpArray[i].search("m=video") != -1) {
|
|
13971
|
+
var mLineSplitted = sdpArray[i].split(" ");
|
|
13972
|
+
var newMLine = "";
|
|
13973
|
+
for (var m = 0; m < mLineSplitted.length; m++) {
|
|
13974
|
+
if (pt.indexOf(mLineSplitted[m].trim()) == -1 || m <= 2) {
|
|
13975
|
+
newMLine += mLineSplitted[m];
|
|
13976
|
+
if (m < mLineSplitted.length - 1) {
|
|
13977
|
+
newMLine = newMLine + " ";
|
|
13886
13978
|
}
|
|
13887
13979
|
}
|
|
13888
|
-
sdpArray[i] = newMLine;
|
|
13889
13980
|
}
|
|
13981
|
+
sdpArray[i] = newMLine;
|
|
13890
13982
|
}
|
|
13891
13983
|
}
|
|
13984
|
+
}
|
|
13892
13985
|
|
|
13893
|
-
|
|
13894
|
-
|
|
13895
|
-
|
|
13896
|
-
|
|
13897
|
-
|
|
13898
|
-
}
|
|
13986
|
+
//normalize sdp after modifications
|
|
13987
|
+
var result = "";
|
|
13988
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
13989
|
+
if (sdpArray[i] != "") {
|
|
13990
|
+
result += sdpArray[i] + "\n";
|
|
13899
13991
|
}
|
|
13900
|
-
|
|
13901
|
-
|
|
13902
|
-
|
|
13903
|
-
|
|
13904
|
-
|
|
13905
|
-
|
|
13906
|
-
|
|
13907
|
-
|
|
13908
|
-
|
|
13909
|
-
|
|
13910
|
-
|
|
13911
|
-
|
|
13912
|
-
|
|
13913
|
-
|
|
13914
|
-
|
|
13915
|
-
|
|
13992
|
+
}
|
|
13993
|
+
return result;
|
|
13994
|
+
};
|
|
13995
|
+
|
|
13996
|
+
const getCurrentCodecAndSampleRate = function(sdp, mediaType) {
|
|
13997
|
+
var rows = sdp.split("\n");
|
|
13998
|
+
var codecPt;
|
|
13999
|
+
for (var i = 0; i < rows.length ; i++) {
|
|
14000
|
+
if (codecPt && rows[i].indexOf("a=rtpmap:" + codecPt) != -1) {
|
|
14001
|
+
var ret = {};
|
|
14002
|
+
ret.name = rows[i].split(" ")[1].split("/")[0];
|
|
14003
|
+
ret.sampleRate = rows[i].split(" ")[1].split("/")[1];
|
|
14004
|
+
return ret;
|
|
14005
|
+
}
|
|
14006
|
+
//WCS-2136. WebRTC statistics doesn't work for VP8
|
|
14007
|
+
if (rows[i].indexOf("m=" + mediaType) != -1) {
|
|
14008
|
+
codecPt = rows[i].split(" ")[3].trim();
|
|
13916
14009
|
}
|
|
13917
14010
|
}
|
|
14011
|
+
};
|
|
14012
|
+
|
|
13918
14013
|
|
|
14014
|
+
module.exports = {
|
|
14015
|
+
isEmptyObject,
|
|
14016
|
+
copyObjectToArray,
|
|
14017
|
+
copyObjectPropsToAnotherObject,
|
|
14018
|
+
processRtcStatsReport,
|
|
14019
|
+
Browser,
|
|
14020
|
+
SDP,
|
|
14021
|
+
logger,
|
|
14022
|
+
stripCodecs,
|
|
14023
|
+
getCurrentCodecAndSampleRate
|
|
13919
14024
|
};
|
|
13920
14025
|
|
|
13921
14026
|
},{}],47:[function(require,module,exports){
|
|
@@ -13944,6 +14049,11 @@ var mics = [];
|
|
|
13944
14049
|
var createConnection = function (options) {
|
|
13945
14050
|
return new Promise(function (resolve, reject) {
|
|
13946
14051
|
|
|
14052
|
+
// Set connection logger #WCS-2434
|
|
14053
|
+
if (options.logger) {
|
|
14054
|
+
logger = options.logger;
|
|
14055
|
+
}
|
|
14056
|
+
|
|
13947
14057
|
var id = options.id;
|
|
13948
14058
|
var connectionConfig = options.connectionConfig || {"iceServers": []};
|
|
13949
14059
|
var connectionConstraints = options.connectionConstraints || {};
|
|
@@ -14052,9 +14162,9 @@ var createConnection = function (options) {
|
|
|
14052
14162
|
function setContentHint(stream, hint) {
|
|
14053
14163
|
stream.getVideoTracks().forEach(function(track) {
|
|
14054
14164
|
if(track.contentHint === undefined) {
|
|
14055
|
-
logger.warn("contentHint unsupported");
|
|
14165
|
+
logger.warn(LOG_PREFIX, "Track contentHint unsupported");
|
|
14056
14166
|
} else {
|
|
14057
|
-
logger.info("Set video track contentHint to " + hint);
|
|
14167
|
+
logger.info(LOG_PREFIX, "Set video track contentHint to " + hint);
|
|
14058
14168
|
track.contentHint = hint;
|
|
14059
14169
|
}
|
|
14060
14170
|
});
|
|
@@ -14089,7 +14199,7 @@ var createConnection = function (options) {
|
|
|
14089
14199
|
//WCS-2771 add playback delay
|
|
14090
14200
|
connection.getReceivers().forEach((track) => {
|
|
14091
14201
|
if (track.playoutDelayHint === undefined) {
|
|
14092
|
-
logger.warn("
|
|
14202
|
+
logger.warn(LOG_PREFIX, "Playout delay unsupported");
|
|
14093
14203
|
}
|
|
14094
14204
|
track.playoutDelayHint = playoutDelay;
|
|
14095
14205
|
});
|
|
@@ -14439,7 +14549,7 @@ var createConnection = function (options) {
|
|
|
14439
14549
|
if (localVideo.srcObject.getAudioTracks().length == 0 && audioTrack) {
|
|
14440
14550
|
localVideo.srcObject.addTrack(audioTrack);
|
|
14441
14551
|
}
|
|
14442
|
-
logger.info("Switch camera to " + cam);
|
|
14552
|
+
logger.info(LOG_PREFIX, "Switch camera to " + cam);
|
|
14443
14553
|
resolve(cam);
|
|
14444
14554
|
}).catch(function (reason) {
|
|
14445
14555
|
logger.error(LOG_PREFIX, reason);
|
|
@@ -14490,7 +14600,7 @@ var createConnection = function (options) {
|
|
|
14490
14600
|
if (videoTrack) {
|
|
14491
14601
|
localVideo.srcObject.addTrack(videoTrack);
|
|
14492
14602
|
}
|
|
14493
|
-
logger.info("Switch mic to " + mic);
|
|
14603
|
+
logger.info(LOG_PREFIX, "Switch mic to " + mic);
|
|
14494
14604
|
resolve(mic);
|
|
14495
14605
|
}).catch(function (reason) {
|
|
14496
14606
|
logger.error(LOG_PREFIX, reason);
|
|
@@ -14578,7 +14688,7 @@ var createConnection = function (options) {
|
|
|
14578
14688
|
localVideo.srcObject.addTrack(currentAudioTrack);
|
|
14579
14689
|
}
|
|
14580
14690
|
});
|
|
14581
|
-
logger.info("Switch to screen");
|
|
14691
|
+
logger.info(LOG_PREFIX, "Switch to screen");
|
|
14582
14692
|
screenShare = true;
|
|
14583
14693
|
resolve();
|
|
14584
14694
|
};
|
|
@@ -14606,7 +14716,7 @@ var createConnection = function (options) {
|
|
|
14606
14716
|
}
|
|
14607
14717
|
});
|
|
14608
14718
|
}
|
|
14609
|
-
logger.info("Switch to cam");
|
|
14719
|
+
logger.info(LOG_PREFIX, "Switch to cam");
|
|
14610
14720
|
screenShare = false;
|
|
14611
14721
|
};
|
|
14612
14722
|
|
|
@@ -15320,6 +15430,8 @@ var playFirstVideo = function (display, isLocal, src) {
|
|
|
15320
15430
|
var video = document.createElement('video');
|
|
15321
15431
|
video.setAttribute("playsinline", "");
|
|
15322
15432
|
video.setAttribute("webkit-playsinline", "");
|
|
15433
|
+
//Mute video tag to prevent local audio playback in Safari #WCS-3430
|
|
15434
|
+
video.muted = true;
|
|
15323
15435
|
video.id = uuid_v1() + (isLocal ? LOCAL_CACHED_VIDEO : REMOTE_CACHED_VIDEO);
|
|
15324
15436
|
|
|
15325
15437
|
//in WCS-1560 we removed video.play() call, because it triggers the “Unhandled Promise Rejection” exception in iOS Safari
|
|
@@ -15400,6 +15512,11 @@ var createConnection = function(options, handlers) {
|
|
|
15400
15512
|
var id = options.id;
|
|
15401
15513
|
var display = options.display;
|
|
15402
15514
|
|
|
15515
|
+
// Set connection logger #WCS-2434
|
|
15516
|
+
if (options.logger) {
|
|
15517
|
+
logger = options.logger;
|
|
15518
|
+
}
|
|
15519
|
+
|
|
15403
15520
|
var canvas = document.createElement("canvas");
|
|
15404
15521
|
display.appendChild(canvas);
|
|
15405
15522
|
canvas.id = id;
|