@flashphoner/websdk 2.0.211 → 2.0.216

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.
@@ -9317,7 +9317,12 @@ var createConnection = function createConnection(options) {
9317
9317
  var id = options.id;
9318
9318
  var authToken = options.authToken;
9319
9319
  var display = options.display || options.localDisplay;
9320
- var flashBufferTime = options.flashBufferTime || 0;
9320
+ var flashBufferTime = options.flashBufferTime || 0; // Set connection logger #WCS-2434
9321
+
9322
+ if (options.logger) {
9323
+ logger = options.logger;
9324
+ }
9325
+
9321
9326
  var url = getConnectionUrl(options.mainUrl, options.flashProto, options.flashPort); //todo state from flash instance
9322
9327
 
9323
9328
  var state = function state() {
@@ -9938,8 +9943,9 @@ var constants = require("./constants");
9938
9943
 
9939
9944
  var util = require('./util');
9940
9945
 
9941
- var logger = require('./util').logger;
9946
+ var LoggerObject = require('./util').logger;
9942
9947
 
9948
+ var coreLogger;
9943
9949
  var loggerConf = {
9944
9950
  push: false,
9945
9951
  severity: "INFO"
@@ -9987,7 +9993,7 @@ var disableConnectionQualityCalculation;
9987
9993
  * @param {String=} options.decoderLocation Location of video-worker2.js file
9988
9994
  * @param {String=} options.screenSharingExtensionId Chrome screen sharing extension id
9989
9995
  * @param {Object=} options.constraints Default local media constraints
9990
- * @param {Object=} options.logger Enable logging
9996
+ * @param {Object=} options.logger Core logger options
9991
9997
  * @throws {Error} Error if none of MediaProviders available
9992
9998
  * @memberof Flashphoner
9993
9999
  */
@@ -9996,16 +10002,10 @@ var init = function init(options) {
9996
10002
  if (!initialized) {
9997
10003
  if (!options) {
9998
10004
  options = {};
9999
- }
10005
+ } // init global logger
10000
10006
 
10001
- loggerConf = options.logger || loggerConf;
10002
10007
 
10003
- if (options.logger !== null) {
10004
- loggerConf.enableLogs = true;
10005
- } // init logger
10006
-
10007
-
10008
- logger.init(loggerConf.severity || "INFO", loggerConf.push || false, loggerConf.customLogger, loggerConf.enableLogs);
10008
+ coreLogger = createLogger(options.logger);
10009
10009
  var waitingTemasys = false;
10010
10010
 
10011
10011
  try {
@@ -10026,7 +10026,7 @@ var init = function init(options) {
10026
10026
  constraints: options.constraints || getDefaultMediaConstraints(),
10027
10027
  extensionId: options.screenSharingExtensionId,
10028
10028
  audioContext: audioContext,
10029
- logger: logger,
10029
+ logger: coreLogger,
10030
10030
  createMicGainNode: enableGainNode
10031
10031
  };
10032
10032
  webRtcProvider.configure(webRtcConf);
@@ -10043,7 +10043,7 @@ var init = function init(options) {
10043
10043
  var webRtcConf = {
10044
10044
  constraints: options.constraints || getDefaultMediaConstraints(),
10045
10045
  extensionId: options.screenSharingExtensionId,
10046
- logger: logger
10046
+ logger: coreLogger
10047
10047
  };
10048
10048
  webRtcProvider.configure(webRtcConf); // Just reorder media provider list
10049
10049
 
@@ -10071,7 +10071,7 @@ var init = function init(options) {
10071
10071
  var flashConf = {
10072
10072
  constraints: options.constraints || getDefaultMediaConstraints(),
10073
10073
  flashMediaProviderSwfLocation: options.flashMediaProviderSwfLocation,
10074
- logger: logger
10074
+ logger: coreLogger
10075
10075
  };
10076
10076
  flashProvider.configure(flashConf);
10077
10077
  }
@@ -10095,7 +10095,7 @@ var init = function init(options) {
10095
10095
  receiverLocation: options.receiverLocation,
10096
10096
  decoderLocation: options.decoderLocation,
10097
10097
  audioContext: audioContext,
10098
- logger: logger
10098
+ logger: coreLogger
10099
10099
  };
10100
10100
  websocketProvider.configure(wsConf);
10101
10101
  } //check at least 1 provider available
@@ -10117,7 +10117,7 @@ var init = function init(options) {
10117
10117
  MediaProvider = _MediaProvider;
10118
10118
  }
10119
10119
  } else {
10120
- logger.warn(LOG_PREFIX, "Preferred media provider is not available.");
10120
+ corelogger.warn(LOG_PREFIX, "Preferred media provider is not available.");
10121
10121
  }
10122
10122
  }
10123
10123
 
@@ -10145,7 +10145,7 @@ var init = function init(options) {
10145
10145
  options.mediaProvidersReadyCallback(Object.keys(MediaProvider));
10146
10146
  }
10147
10147
 
10148
- logger.info(LOG_PREFIX, "Initialized");
10148
+ coreLogger.info(LOG_PREFIX, "Initialized");
10149
10149
  initialized = true;
10150
10150
  }
10151
10151
  };
@@ -10184,7 +10184,7 @@ var playFirstVideo = function playFirstVideo(display, isLocal, src) {
10184
10184
  }
10185
10185
  };
10186
10186
  /**
10187
- * Get logger
10187
+ * Get core logger
10188
10188
  *
10189
10189
  * @returns {Object} Logger
10190
10190
  * @memberof Flashphoner
@@ -10195,7 +10195,7 @@ var getLogger = function getLogger() {
10195
10195
  if (!initialized) {
10196
10196
  console.warn("Initialize API first.");
10197
10197
  } else {
10198
- return logger;
10198
+ return coreLogger;
10199
10199
  }
10200
10200
  };
10201
10201
  /**
@@ -10368,6 +10368,31 @@ var getSessions = function getSessions() {
10368
10368
 
10369
10369
  var getSession = function getSession(id) {
10370
10370
  return sessions[id];
10371
+ }; // Get logger configuration from options
10372
+
10373
+
10374
+ var getLoggerConf = function getLoggerConf(loggerOptions) {
10375
+ var conf = loggerOptions || loggerConf;
10376
+
10377
+ if (loggerOptions !== null) {
10378
+ conf.enableLogs = true;
10379
+ }
10380
+
10381
+ return conf;
10382
+ }; // Create a new logger object
10383
+
10384
+
10385
+ var createLogger = function createLogger(loggerOptions) {
10386
+ var parentLogger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : coreLogger;
10387
+ var newLogger = parentLogger;
10388
+
10389
+ if (newLogger === undefined || loggerOptions != undefined) {
10390
+ var loggerConf = getLoggerConf(loggerOptions);
10391
+ newLogger = new LoggerObject();
10392
+ newLogger.init(loggerConf.severity || "INFO", loggerConf.push || false, loggerConf.customLogger, loggerConf.enableLogs);
10393
+ }
10394
+
10395
+ return newLogger;
10371
10396
  };
10372
10397
  /**
10373
10398
  * Create new session and connect to server.
@@ -10387,6 +10412,7 @@ var getSession = function getSession(id) {
10387
10412
  * @param {Integer=} options.pingInterval Server ping interval in milliseconds [0]
10388
10413
  * @param {Integer=} options.receiveProbes A maximum subsequental pings received missing count [0]
10389
10414
  * @param {Integer=} options.probesInterval Interval to check subsequental pings received [0]
10415
+ * @param {Object=} options.logger Session logger options
10390
10416
  * @returns {Session} Created session
10391
10417
  * @throws {Error} Error if API is not initialized
10392
10418
  * @throws {TypeError} Error if options.urlServer is not specified
@@ -10401,8 +10427,12 @@ var createSession = function createSession(options) {
10401
10427
 
10402
10428
  if (!options || !options.urlServer) {
10403
10429
  throw new TypeError("options.urlServer must be provided");
10404
- }
10430
+ } // Set session logger #WCS-2434
10405
10431
 
10432
+
10433
+ var sessionLogger = createLogger(options.logger); // Override logger for all low level operations
10434
+
10435
+ var logger = sessionLogger;
10406
10436
  var id_ = uuid_v1();
10407
10437
  var sessionStatus = SESSION_STATUS.PENDING;
10408
10438
  var urlServer = options.urlServer;
@@ -10508,7 +10538,7 @@ var createSession = function createSession(options) {
10508
10538
  if (timeout != undefined && timeout > 0) {
10509
10539
  connectionTimeout = setTimeout(function () {
10510
10540
  if (wsConnection.readyState == 0) {
10511
- console.log("WS connection timeout");
10541
+ logger.warn(LOG_PREFIX, "WS connection timeout");
10512
10542
  wsConnection.close();
10513
10543
  }
10514
10544
  }, timeout);
@@ -10532,7 +10562,7 @@ var createSession = function createSession(options) {
10532
10562
  mediaProviders: Object.keys(MediaProvider),
10533
10563
  keepAlive: keepAlive,
10534
10564
  authToken: authToken,
10535
- clientVersion: "2.0.211",
10565
+ clientVersion: "2.0.216",
10536
10566
  clientOSVersion: window.navigator.appVersion,
10537
10567
  clientBrowserVersion: window.navigator.userAgent,
10538
10568
  msePacketizationVersion: 2,
@@ -10838,6 +10868,7 @@ var createSession = function createSession(options) {
10838
10868
  * @param {Array<string>=} options.sipSDP Array of custom SDP params (ex. bandwidth (b=))
10839
10869
  * @param {Array<string>=} options.sipHeaders Array of custom SIP headers
10840
10870
  * @param {string=} options.videoContentHint Video content hint for browser ('detail' by default to maintain resolution), {@link Flashphoner.constants.CONTENT_HINT_TYPE}
10871
+ * @param {Object=} options.logger Call logger options
10841
10872
  * @param {sdpHook} sdpHook The callback that handles sdp from the server
10842
10873
  * @returns {Call} Call
10843
10874
  * @throws {TypeError} Error if no options provided
@@ -10850,15 +10881,18 @@ var createSession = function createSession(options) {
10850
10881
  var createCall = function createCall(options) {
10851
10882
  //check session state
10852
10883
  if (sessionStatus !== SESSION_STATUS.REGISTERED && sessionStatus !== SESSION_STATUS.ESTABLISHED) {
10853
- logger.info(LOG_PREFIX, "Status is " + sessionStatus);
10854
- throw new Error('Invalid session state');
10884
+ throw new Error('Invalid session state ' + sessionStatus);
10855
10885
  } //check options
10856
10886
 
10857
10887
 
10858
10888
  if (!options) {
10859
10889
  throw new TypeError("options must be provided");
10860
- }
10890
+ } // Set call logger #WCS-2434
10861
10891
 
10892
+
10893
+ var callLogger = createLogger(options.logger, sessionLogger); // Override logger for all low level operations
10894
+
10895
+ var logger = callLogger;
10862
10896
  var login = appKey == 'clickToCallApp' ? '' : cConfig.sipLogin;
10863
10897
  var caller_ = options.incoming ? options.caller : login;
10864
10898
  var callee_ = options.callee;
@@ -11004,7 +11038,8 @@ var createSession = function createSession(options) {
11004
11038
  constraints: constraints,
11005
11039
  connectionConfig: mediaOptions,
11006
11040
  audioOutputId: audioOutputId,
11007
- videoContentHint: videoContentHint
11041
+ videoContentHint: videoContentHint,
11042
+ logger: logger
11008
11043
  }).then(function (newConnection) {
11009
11044
  mediaConnection = newConnection;
11010
11045
  return mediaConnection.createOffer({
@@ -11590,7 +11625,7 @@ var createSession = function createSession(options) {
11590
11625
  /**
11591
11626
  * Get call info
11592
11627
  * @returns {string} Info
11593
- * @memberof Stream
11628
+ * @memberof Call
11594
11629
  * @inner
11595
11630
  */
11596
11631
 
@@ -11601,7 +11636,7 @@ var createSession = function createSession(options) {
11601
11636
  /**
11602
11637
  * Get stream error info
11603
11638
  * @returns {string} Error info
11604
- * @memberof Stream
11639
+ * @memberof Call
11605
11640
  * @inner
11606
11641
  */
11607
11642
 
@@ -11609,6 +11644,17 @@ var createSession = function createSession(options) {
11609
11644
  var getErrorInfo = function getErrorInfo() {
11610
11645
  return errorInfo_;
11611
11646
  };
11647
+ /**
11648
+ * Get call logger
11649
+ *
11650
+ * @returns {Object} Logger
11651
+ * @memberof Call
11652
+ */
11653
+
11654
+
11655
+ var getLogger = function getLogger() {
11656
+ return callLogger;
11657
+ };
11612
11658
 
11613
11659
  call.call = call_;
11614
11660
  call.answer = answer;
@@ -11640,6 +11686,7 @@ var createSession = function createSession(options) {
11640
11686
  call.switchMic = switchMic;
11641
11687
  call.switchToScreen = switchToScreen;
11642
11688
  call.switchToCam = switchToCam;
11689
+ call.getLogger = getLogger;
11643
11690
  calls[id_] = call;
11644
11691
  return call;
11645
11692
  };
@@ -11686,6 +11733,7 @@ var createSession = function createSession(options) {
11686
11733
  * @param {string=} options.useCanvasMediaStream EXPERIMENTAL: when publish bind browser's media stream to the canvas. It can be useful for image filtering
11687
11734
  * @param {string=} options.videoContentHint Video content hint for browser ('detail' by default to maintain resolution), {@link Flashphoner.constants.CONTENT_HINT_TYPE}
11688
11735
  * @param {Boolean=} options.unmutePlayOnStart Unmute playback on start. May be used after user gesture only, so set 'unmutePlayOnStart: false' for autoplay
11736
+ * @param {Object=} options.logger Stream logger options
11689
11737
  * @param {sdpHook} sdpHook The callback that handles sdp from the server
11690
11738
  * @returns {Stream} Stream
11691
11739
  * @throws {TypeError} Error if no options provided
@@ -11701,7 +11749,7 @@ var createSession = function createSession(options) {
11701
11749
  var availableCallbacks = []; //check session state
11702
11750
 
11703
11751
  if (sessionStatus !== SESSION_STATUS.ESTABLISHED) {
11704
- throw new Error('Invalid session state');
11752
+ throw new Error('Invalid session state ' + sessionStatus);
11705
11753
  } //check options
11706
11754
 
11707
11755
 
@@ -11711,8 +11759,12 @@ var createSession = function createSession(options) {
11711
11759
 
11712
11760
  if (!options.name) {
11713
11761
  throw new TypeError("options.name must be provided");
11714
- }
11762
+ } // Set stream logger #WCS-2434
11763
+
11764
+
11765
+ var streamLogger = createLogger(options.logger, sessionLogger); // Override logger for all low level operations
11715
11766
 
11767
+ var logger = streamLogger;
11716
11768
  var clientKf = new KalmanFilter();
11717
11769
  var serverKf = new KalmanFilter();
11718
11770
  var id_ = uuid_v1();
@@ -11956,7 +12008,7 @@ var createSession = function createSession(options) {
11956
12008
  logger.debug(LOG_PREFIX, "Play stream " + name_);
11957
12009
 
11958
12010
  if (status_ !== STREAM_STATUS.NEW) {
11959
- throw new Error("Invalid stream state");
12011
+ throw new Error("Invalid stream state " + status_);
11960
12012
  }
11961
12013
 
11962
12014
  status_ = STREAM_STATUS.PENDING; //create mediaProvider connection
@@ -11975,7 +12027,8 @@ var createSession = function createSession(options) {
11975
12027
  audioOutputId: audioOutputId,
11976
12028
  remoteVideo: remoteVideo,
11977
12029
  playoutDelay: playoutDelay,
11978
- unmutePlayOnStart: unmutePlayOnStart
12030
+ unmutePlayOnStart: unmutePlayOnStart,
12031
+ logger: logger
11979
12032
  }, streamRefreshHandlers[id_]).then(function (newConnection) {
11980
12033
  mediaConnection = newConnection;
11981
12034
 
@@ -12039,7 +12092,7 @@ var createSession = function createSession(options) {
12039
12092
  logger.debug(LOG_PREFIX, "Publish stream " + name_);
12040
12093
 
12041
12094
  if (status_ !== STREAM_STATUS.NEW) {
12042
- throw new Error("Invalid stream state");
12095
+ throw new Error("Invalid stream state " + status_);
12043
12096
  }
12044
12097
 
12045
12098
  status_ = STREAM_STATUS.PENDING;
@@ -12073,7 +12126,8 @@ var createSession = function createSession(options) {
12073
12126
  connectionConfig: mediaOptions,
12074
12127
  connectionConstraints: mediaConnectionConstraints,
12075
12128
  customStream: constraints && constraints.customStream ? constraints.customStream : false,
12076
- videoContentHint: videoContentHint
12129
+ videoContentHint: videoContentHint,
12130
+ logger: logger
12077
12131
  }).then(function (newConnection) {
12078
12132
  mediaConnection = newConnection;
12079
12133
  return mediaConnection.createOffer({
@@ -12703,6 +12757,17 @@ var createSession = function createSession(options) {
12703
12757
  availableCallbacks.push(promise);
12704
12758
  });
12705
12759
  };
12760
+ /**
12761
+ * Get stream logger
12762
+ *
12763
+ * @returns {Object} Logger
12764
+ * @memberof Stream
12765
+ */
12766
+
12767
+
12768
+ var getLogger = function getLogger() {
12769
+ return streamLogger;
12770
+ };
12706
12771
 
12707
12772
  stream.play = play;
12708
12773
  stream.publish = publish;
@@ -12742,6 +12807,7 @@ var createSession = function createSession(options) {
12742
12807
  stream.switchToScreen = switchToScreen;
12743
12808
  stream.switchToCam = switchToCam;
12744
12809
  stream.sendData = sendData;
12810
+ stream.getLogger = getLogger;
12745
12811
  streams[id_] = stream;
12746
12812
  return stream;
12747
12813
  };
@@ -12950,6 +13016,17 @@ var createSession = function createSession(options) {
12950
13016
  }
12951
13017
 
12952
13018
  return sdp;
13019
+ };
13020
+ /**
13021
+ * Get session logger
13022
+ *
13023
+ * @returns {Object} Logger
13024
+ * @memberof Session
13025
+ */
13026
+
13027
+
13028
+ var getLogger = function getLogger() {
13029
+ return sessionLogger;
12953
13030
  }; //export Session
12954
13031
 
12955
13032
 
@@ -12965,7 +13042,8 @@ var createSession = function createSession(options) {
12965
13042
  session.submitBugReport = submitBugReport;
12966
13043
  session.startDebug = startDebug;
12967
13044
  session.stopDebug = stopDebug;
12968
- session.on = on; //save interface to global map
13045
+ session.on = on;
13046
+ session.getLogger = getLogger; //save interface to global map
12969
13047
 
12970
13048
  sessions[id_] = session;
12971
13049
  return session;
@@ -13011,165 +13089,171 @@ function _typeof(obj){"@babel/helpers - typeof";return _typeof="function"==typeo
13011
13089
  },{}],43:[function(require,module,exports){
13012
13090
  'use strict';
13013
13091
 
13014
- module.exports = {
13015
- isEmptyObject: function isEmptyObject(obj) {
13016
- for (var name in obj) {
13017
- return false;
13018
- }
13092
+ var isEmptyObject = function isEmptyObject(obj) {
13093
+ for (var name in obj) {
13094
+ return false;
13095
+ }
13019
13096
 
13020
- return true;
13021
- },
13097
+ return true;
13098
+ };
13099
+ /**
13100
+ * Copy values of object own properties to array.
13101
+ *
13102
+ * @param obj
13103
+ * @returns {Array}
13104
+ */
13022
13105
 
13023
- /**
13024
- * Copy values of object own properties to array.
13025
- *
13026
- * @param obj
13027
- * @returns {Array}
13028
- */
13029
- copyObjectToArray: function copyObjectToArray(obj) {
13030
- var ret = [];
13031
13106
 
13032
- for (var prop in obj) {
13033
- if (obj.hasOwnProperty(prop)) {
13034
- ret.push(obj[prop]);
13035
- }
13107
+ var copyObjectToArray = function copyObjectToArray(obj) {
13108
+ var ret = [];
13109
+
13110
+ for (var prop in obj) {
13111
+ if (obj.hasOwnProperty(prop)) {
13112
+ ret.push(obj[prop]);
13036
13113
  }
13114
+ }
13037
13115
 
13038
- return ret;
13039
- },
13116
+ return ret;
13117
+ };
13118
+ /**
13119
+ * Copy src properties to dst object.
13120
+ * Will overwrite dst prop with src prop in case of dst prop exist.
13121
+ */
13040
13122
 
13041
- /**
13042
- * Copy src properties to dst object.
13043
- * Will overwrite dst prop with src prop in case of dst prop exist.
13044
- */
13045
- copyObjectPropsToAnotherObject: function copyObjectPropsToAnotherObject(src, dst) {
13046
- for (var prop in src) {
13047
- if (src.hasOwnProperty(prop)) {
13048
- dst[prop] = src[prop];
13049
- }
13123
+
13124
+ var copyObjectPropsToAnotherObject = function copyObjectPropsToAnotherObject(src, dst) {
13125
+ for (var prop in src) {
13126
+ if (src.hasOwnProperty(prop)) {
13127
+ dst[prop] = src[prop];
13050
13128
  }
13051
- },
13052
- processRtcStatsReport: function processRtcStatsReport(browser, report) {
13053
- var result = {};
13129
+ }
13130
+ };
13054
13131
 
13055
- if (browser == "chrome") {
13056
- /**
13057
- * Report types: googComponent, googCandidatePair, googCertificate, googLibjingleSession, googTrack, ssrc
13058
- */
13059
- var gotResult = false;
13132
+ var processRtcStatsReport = function processRtcStatsReport(browser, report) {
13133
+ var result = {};
13060
13134
 
13061
- if (report.type && report.type == "googCandidatePair") {
13062
- //check if this is active pair
13063
- if (report.googActiveConnection == "true") {
13064
- gotResult = true;
13065
- }
13066
- }
13135
+ if (browser == "chrome") {
13136
+ /**
13137
+ * Report types: googComponent, googCandidatePair, googCertificate, googLibjingleSession, googTrack, ssrc
13138
+ */
13139
+ var gotResult = false;
13067
13140
 
13068
- if (report.type && report.type == "ssrc") {
13141
+ if (report.type && report.type == "googCandidatePair") {
13142
+ //check if this is active pair
13143
+ if (report.googActiveConnection == "true") {
13069
13144
  gotResult = true;
13070
13145
  }
13146
+ }
13071
13147
 
13072
- if (gotResult) {
13073
- for (var k in report) {
13074
- if (report.hasOwnProperty(k)) {
13075
- result[k] = report[k];
13076
- }
13148
+ if (report.type && report.type == "ssrc") {
13149
+ gotResult = true;
13150
+ }
13151
+
13152
+ if (gotResult) {
13153
+ for (var k in report) {
13154
+ if (report.hasOwnProperty(k)) {
13155
+ result[k] = report[k];
13077
13156
  }
13078
13157
  }
13158
+ }
13079
13159
 
13080
- return result;
13081
- } else if (browser == "firefox") {
13082
- /**
13083
- * RTCStatsReport http://mxr.mozilla.org/mozilla-central/source/dom/webidl/RTCStatsReport.webidl
13084
- */
13085
- if (report.type && (report.type == "outboundrtp" || report.type == "inboundrtp") && report.id.indexOf("rtcp") == -1) {
13086
- result = {};
13160
+ return result;
13161
+ } else if (browser == "firefox") {
13162
+ /**
13163
+ * RTCStatsReport http://mxr.mozilla.org/mozilla-central/source/dom/webidl/RTCStatsReport.webidl
13164
+ */
13165
+ if (report.type && (report.type == "outboundrtp" || report.type == "inboundrtp") && report.id.indexOf("rtcp") == -1) {
13166
+ result = {};
13087
13167
 
13088
- for (var k in report) {
13089
- if (report.hasOwnProperty(k)) {
13090
- result[k] = report[k];
13091
- }
13168
+ for (var k in report) {
13169
+ if (report.hasOwnProperty(k)) {
13170
+ result[k] = report[k];
13092
13171
  }
13093
13172
  }
13094
-
13095
- return result;
13096
- } else {
13097
- return result;
13098
13173
  }
13099
13174
 
13100
- ;
13175
+ return result;
13176
+ } else {
13177
+ return result;
13178
+ }
13179
+ };
13180
+
13181
+ var Browser = {
13182
+ isIE: function isIE() {
13183
+ return (
13184
+ /*@cc_on!@*/
13185
+ false || !!document.documentMode
13186
+ );
13101
13187
  },
13102
- Browser: {
13103
- isIE: function isIE() {
13104
- return (
13105
- /*@cc_on!@*/
13106
- false || !!document.documentMode
13107
- );
13108
- },
13109
- isFirefox: function isFirefox() {
13110
- return typeof InstallTrigger !== 'undefined';
13111
- },
13112
- isChrome: function isChrome() {
13113
- return !!window.chrome && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent);
13114
- },
13115
- isEdge: function isEdge() {
13116
- return !isIE && !!window.StyleMedia;
13117
- },
13118
- isOpera: function isOpera() {
13119
- return !!window.opr && !!opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
13120
- },
13121
- isiOS: function isiOS() {
13122
- return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
13123
- },
13124
- isSafari: function isSafari() {
13125
- var userAgent = navigator.userAgent.toLowerCase();
13126
- return /(safari|applewebkit)/i.test(userAgent) && !userAgent.includes("chrome") && !userAgent.includes("android");
13127
- },
13128
- isAndroid: function isAndroid() {
13129
- return navigator.userAgent.toLowerCase().indexOf("android") > -1;
13130
- },
13131
- isSafariWebRTC: function isSafariWebRTC() {
13132
- return navigator.mediaDevices && this.isSafari();
13133
- },
13134
- isSamsungBrowser: function isSamsungBrowser() {
13135
- return /SamsungBrowser/i.test(navigator.userAgent);
13136
- },
13137
- isAndroidFirefox: function isAndroidFirefox() {
13138
- return this.isAndroid() && /Firefox/i.test(navigator.userAgent);
13139
- }
13188
+ isFirefox: function isFirefox() {
13189
+ return typeof InstallTrigger !== 'undefined';
13140
13190
  },
13141
- SDP: {
13142
- matchPrefix: function matchPrefix(sdp, prefix) {
13143
- var parts = sdp.trim().split('\n').map(function (line) {
13144
- return line.trim();
13145
- });
13146
- return parts.filter(function (line) {
13147
- return line.indexOf(prefix) === 0;
13148
- });
13149
- },
13150
- writeFmtp: function writeFmtp(sdp, param, codec) {
13151
- var sdpArray = sdp.split("\n");
13152
- var i;
13191
+ isChrome: function isChrome() {
13192
+ return !!window.chrome && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent);
13193
+ },
13194
+ isEdge: function isEdge() {
13195
+ return !isIE && !!window.StyleMedia;
13196
+ },
13197
+ isOpera: function isOpera() {
13198
+ return !!window.opr && !!opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
13199
+ },
13200
+ isiOS: function isiOS() {
13201
+ return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
13202
+ },
13203
+ isSafari: function isSafari() {
13204
+ var userAgent = navigator.userAgent.toLowerCase();
13205
+ return /(safari|applewebkit)/i.test(userAgent) && !userAgent.includes("chrome") && !userAgent.includes("android");
13206
+ },
13207
+ isAndroid: function isAndroid() {
13208
+ return navigator.userAgent.toLowerCase().indexOf("android") > -1;
13209
+ },
13210
+ isSafariWebRTC: function isSafariWebRTC() {
13211
+ return navigator.mediaDevices && this.isSafari();
13212
+ },
13213
+ isSamsungBrowser: function isSamsungBrowser() {
13214
+ return /SamsungBrowser/i.test(navigator.userAgent);
13215
+ },
13216
+ isAndroidFirefox: function isAndroidFirefox() {
13217
+ return this.isAndroid() && /Firefox/i.test(navigator.userAgent);
13218
+ },
13219
+ isChromiumEdge: function isChromiumEdge() {
13220
+ return /Chrome/i.test(navigator.userAgent) && /Edg/i.test(navigator.userAgent);
13221
+ }
13222
+ };
13223
+ var SDP = {
13224
+ matchPrefix: function matchPrefix(sdp, prefix) {
13225
+ var parts = sdp.trim().split('\n').map(function (line) {
13226
+ return line.trim();
13227
+ });
13228
+ return parts.filter(function (line) {
13229
+ return line.indexOf(prefix) === 0;
13230
+ });
13231
+ },
13232
+ writeFmtp: function writeFmtp(sdp, param, codec) {
13233
+ var sdpArray = sdp.split("\n");
13234
+ var i;
13153
13235
 
13154
- for (i = 0; i < sdpArray.length; i++) {
13155
- if (sdpArray[i].search(codec) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
13156
- sdpArray[i] += "\na=fmtp:" + sdpArray[i].match(/[0-9]+/)[0] + " " + param + "\r";
13157
- }
13158
- } //normalize sdp after modifications
13236
+ for (i = 0; i < sdpArray.length; i++) {
13237
+ if (sdpArray[i].search(codec) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
13238
+ sdpArray[i] += "\na=fmtp:" + sdpArray[i].match(/[0-9]+/)[0] + " " + param + "\r";
13239
+ }
13240
+ } //normalize sdp after modifications
13159
13241
 
13160
13242
 
13161
- var result = "";
13243
+ var result = "";
13162
13244
 
13163
- for (i = 0; i < sdpArray.length; i++) {
13164
- if (sdpArray[i] != "") {
13165
- result += sdpArray[i] + "\n";
13166
- }
13245
+ for (i = 0; i < sdpArray.length; i++) {
13246
+ if (sdpArray[i] != "") {
13247
+ result += sdpArray[i] + "\n";
13167
13248
  }
13168
-
13169
- return result;
13170
13249
  }
13171
- },
13172
- logger: {
13250
+
13251
+ return result;
13252
+ }
13253
+ };
13254
+
13255
+ var logger = function logger() {
13256
+ return {
13173
13257
  init: function init(verbosity, enablePushLogs, customLogger, enableLogs) {
13174
13258
  switch (verbosity.toUpperCase()) {
13175
13259
  case "DEBUG":
@@ -13350,92 +13434,104 @@ module.exports = {
13350
13434
  default:
13351
13435
  this.verbosity = 2;
13352
13436
  }
13353
-
13354
- ;
13355
13437
  }
13356
- },
13357
- stripCodecs: function stripCodecs(sdp, codecs) {
13358
- if (!codecs.length) return sdp;
13359
- var sdpArray = sdp.split("\n");
13360
- var codecsArray = codecs.split(","); //search and delete codecs line
13438
+ };
13439
+ };
13361
13440
 
13362
- var pt = [];
13363
- var i;
13441
+ var stripCodecs = function stripCodecs(sdp, codecs) {
13442
+ if (!codecs.length) return sdp;
13443
+ var sdpArray = sdp.split("\n");
13444
+ var codecsArray = codecs.split(","); //search and delete codecs line
13364
13445
 
13365
- for (var p = 0; p < codecsArray.length; p++) {
13366
- console.log("Searching for codec " + codecsArray[p]);
13446
+ var pt = [];
13447
+ var i;
13367
13448
 
13368
- for (i = 0; i < sdpArray.length; i++) {
13369
- if (sdpArray[i].search(new RegExp(codecsArray[p], 'i')) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
13370
- console.log(codecsArray[p] + " detected");
13371
- pt.push(sdpArray[i].match(/[0-9]+/)[0]);
13372
- sdpArray[i] = "";
13373
- }
13449
+ for (var p = 0; p < codecsArray.length; p++) {
13450
+ console.log("Searching for codec " + codecsArray[p]);
13451
+
13452
+ for (i = 0; i < sdpArray.length; i++) {
13453
+ if (sdpArray[i].search(new RegExp(codecsArray[p], 'i')) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
13454
+ console.log(codecsArray[p] + " detected");
13455
+ pt.push(sdpArray[i].match(/[0-9]+/)[0]);
13456
+ sdpArray[i] = "";
13374
13457
  }
13375
13458
  }
13459
+ }
13376
13460
 
13377
- if (pt.length) {
13378
- //searching for fmtp
13379
- for (p = 0; p < pt.length; p++) {
13380
- for (i = 0; i < sdpArray.length; i++) {
13381
- if (sdpArray[i].search("a=fmtp:" + pt[p]) != -1 || sdpArray[i].search("a=rtcp-fb:" + pt[p]) != -1) {
13382
- sdpArray[i] = "";
13383
- }
13461
+ if (pt.length) {
13462
+ //searching for fmtp
13463
+ for (p = 0; p < pt.length; p++) {
13464
+ for (i = 0; i < sdpArray.length; i++) {
13465
+ if (sdpArray[i].search("a=fmtp:" + pt[p]) != -1 || sdpArray[i].search("a=rtcp-fb:" + pt[p]) != -1) {
13466
+ sdpArray[i] = "";
13384
13467
  }
13385
- } //delete entries from m= line
13468
+ }
13469
+ } //delete entries from m= line
13386
13470
 
13387
13471
 
13388
- for (i = 0; i < sdpArray.length; i++) {
13389
- if (sdpArray[i].search("m=audio") != -1 || sdpArray[i].search("m=video") != -1) {
13390
- var mLineSplitted = sdpArray[i].split(" ");
13391
- var newMLine = "";
13472
+ for (i = 0; i < sdpArray.length; i++) {
13473
+ if (sdpArray[i].search("m=audio") != -1 || sdpArray[i].search("m=video") != -1) {
13474
+ var mLineSplitted = sdpArray[i].split(" ");
13475
+ var newMLine = "";
13392
13476
 
13393
- for (var m = 0; m < mLineSplitted.length; m++) {
13394
- if (pt.indexOf(mLineSplitted[m].trim()) == -1 || m <= 2) {
13395
- newMLine += mLineSplitted[m];
13477
+ for (var m = 0; m < mLineSplitted.length; m++) {
13478
+ if (pt.indexOf(mLineSplitted[m].trim()) == -1 || m <= 2) {
13479
+ newMLine += mLineSplitted[m];
13396
13480
 
13397
- if (m < mLineSplitted.length - 1) {
13398
- newMLine = newMLine + " ";
13399
- }
13481
+ if (m < mLineSplitted.length - 1) {
13482
+ newMLine = newMLine + " ";
13400
13483
  }
13401
13484
  }
13402
-
13403
- sdpArray[i] = newMLine;
13404
13485
  }
13486
+
13487
+ sdpArray[i] = newMLine;
13405
13488
  }
13406
- } //normalize sdp after modifications
13489
+ }
13490
+ } //normalize sdp after modifications
13407
13491
 
13408
13492
 
13409
- var result = "";
13493
+ var result = "";
13410
13494
 
13411
- for (i = 0; i < sdpArray.length; i++) {
13412
- if (sdpArray[i] != "") {
13413
- result += sdpArray[i] + "\n";
13414
- }
13495
+ for (i = 0; i < sdpArray.length; i++) {
13496
+ if (sdpArray[i] != "") {
13497
+ result += sdpArray[i] + "\n";
13415
13498
  }
13499
+ }
13416
13500
 
13417
- return result;
13418
- },
13419
- getCurrentCodecAndSampleRate: function getCurrentCodecAndSampleRate(sdp, mediaType) {
13420
- var rows = sdp.split("\n");
13421
- var codecPt;
13501
+ return result;
13502
+ };
13422
13503
 
13423
- for (var i = 0; i < rows.length; i++) {
13424
- if (codecPt && rows[i].indexOf("a=rtpmap:" + codecPt) != -1) {
13425
- var ret = {};
13426
- ret.name = rows[i].split(" ")[1].split("/")[0];
13427
- ret.sampleRate = rows[i].split(" ")[1].split("/")[1];
13428
- return ret;
13429
- } //WCS-2136. WebRTC statistics doesn't work for VP8
13504
+ var getCurrentCodecAndSampleRate = function getCurrentCodecAndSampleRate(sdp, mediaType) {
13505
+ var rows = sdp.split("\n");
13506
+ var codecPt;
13430
13507
 
13508
+ for (var i = 0; i < rows.length; i++) {
13509
+ if (codecPt && rows[i].indexOf("a=rtpmap:" + codecPt) != -1) {
13510
+ var ret = {};
13511
+ ret.name = rows[i].split(" ")[1].split("/")[0];
13512
+ ret.sampleRate = rows[i].split(" ")[1].split("/")[1];
13513
+ return ret;
13514
+ } //WCS-2136. WebRTC statistics doesn't work for VP8
13431
13515
 
13432
- if (rows[i].indexOf("m=" + mediaType) != -1) {
13433
- codecPt = rows[i].split(" ")[3].trim();
13434
- }
13516
+
13517
+ if (rows[i].indexOf("m=" + mediaType) != -1) {
13518
+ codecPt = rows[i].split(" ")[3].trim();
13435
13519
  }
13436
13520
  }
13437
13521
  };
13438
13522
 
13523
+ module.exports = {
13524
+ isEmptyObject: isEmptyObject,
13525
+ copyObjectToArray: copyObjectToArray,
13526
+ copyObjectPropsToAnotherObject: copyObjectPropsToAnotherObject,
13527
+ processRtcStatsReport: processRtcStatsReport,
13528
+ Browser: Browser,
13529
+ SDP: SDP,
13530
+ logger: logger,
13531
+ stripCodecs: stripCodecs,
13532
+ getCurrentCodecAndSampleRate: getCurrentCodecAndSampleRate
13533
+ };
13534
+
13439
13535
  },{}],44:[function(require,module,exports){
13440
13536
  'use strict';
13441
13537
 
@@ -13469,6 +13565,11 @@ var mics = [];
13469
13565
 
13470
13566
  var createConnection = function createConnection(options) {
13471
13567
  return new Promise(function (resolve, reject) {
13568
+ // Set connection logger #WCS-2434
13569
+ if (options.logger) {
13570
+ logger = options.logger;
13571
+ }
13572
+
13472
13573
  var id = options.id;
13473
13574
  var connectionConfig = options.connectionConfig || {
13474
13575
  "iceServers": []
@@ -13599,9 +13700,9 @@ var createConnection = function createConnection(options) {
13599
13700
  function setContentHint(stream, hint) {
13600
13701
  stream.getVideoTracks().forEach(function (track) {
13601
13702
  if (track.contentHint === undefined) {
13602
- logger.warn("contentHint unsupported");
13703
+ logger.warn(LOG_PREFIX, "Track contentHint unsupported");
13603
13704
  } else {
13604
- logger.info("Set video track contentHint to " + hint);
13705
+ logger.info(LOG_PREFIX, "Set video track contentHint to " + hint);
13605
13706
  track.contentHint = hint;
13606
13707
  }
13607
13708
  });
@@ -13638,7 +13739,7 @@ var createConnection = function createConnection(options) {
13638
13739
  //WCS-2771 add playback delay
13639
13740
  connection.getReceivers().forEach(function (track) {
13640
13741
  if (track.playoutDelayHint === undefined) {
13641
- logger.warn("playout delay unsupported");
13742
+ logger.warn(LOG_PREFIX, "Playout delay unsupported");
13642
13743
  }
13643
13744
 
13644
13745
  track.playoutDelayHint = playoutDelay;
@@ -14031,7 +14132,7 @@ var createConnection = function createConnection(options) {
14031
14132
  localVideo.srcObject.addTrack(audioTrack);
14032
14133
  }
14033
14134
 
14034
- logger.info("Switch camera to " + cam);
14135
+ logger.info(LOG_PREFIX, "Switch camera to " + cam);
14035
14136
  resolve(cam);
14036
14137
  })["catch"](function (reason) {
14037
14138
  logger.error(LOG_PREFIX, reason);
@@ -14089,7 +14190,7 @@ var createConnection = function createConnection(options) {
14089
14190
  localVideo.srcObject.addTrack(videoTrack);
14090
14191
  }
14091
14192
 
14092
- logger.info("Switch mic to " + mic);
14193
+ logger.info(LOG_PREFIX, "Switch mic to " + mic);
14093
14194
  resolve(mic);
14094
14195
  })["catch"](function (reason) {
14095
14196
  logger.error(LOG_PREFIX, reason);
@@ -14183,7 +14284,7 @@ var createConnection = function createConnection(options) {
14183
14284
  localVideo.srcObject.addTrack(currentAudioTrack);
14184
14285
  }
14185
14286
  });
14186
- logger.info("Switch to screen");
14287
+ logger.info(LOG_PREFIX, "Switch to screen");
14187
14288
  screenShare = true;
14188
14289
  resolve();
14189
14290
  };
@@ -14215,7 +14316,7 @@ var createConnection = function createConnection(options) {
14215
14316
  });
14216
14317
  }
14217
14318
 
14218
- logger.info("Switch to cam");
14319
+ logger.info(LOG_PREFIX, "Switch to cam");
14219
14320
  screenShare = false;
14220
14321
  };
14221
14322
 
@@ -15014,7 +15115,9 @@ var playFirstVideo = function playFirstVideo(display, isLocal, src) {
15014
15115
  if (!getCacheInstance(display)) {
15015
15116
  var video = document.createElement('video');
15016
15117
  video.setAttribute("playsinline", "");
15017
- video.setAttribute("webkit-playsinline", "");
15118
+ video.setAttribute("webkit-playsinline", ""); //Mute video tag to prevent local audio playback in Safari #WCS-3430
15119
+
15120
+ video.muted = true;
15018
15121
  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
15019
15122
  //in WCS-2160 we rolled back the changes made in WCS-1560 due to no audio on first playback in iOS Safari
15020
15123