@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.
- package/docTemplate/README.md +1 -1
- package/examples/demo/streaming/conference/conference.html +4 -0
- package/examples/demo/streaming/conference/conference.js +205 -64
- package/examples/demo/streaming/video-chat/video-chat.html +5 -0
- package/flashphoner-no-flash.js +334 -231
- package/flashphoner-no-flash.min.js +2 -2
- package/flashphoner-no-webrtc.js +325 -224
- package/flashphoner-no-webrtc.min.js +2 -2
- package/flashphoner-no-wsplayer.js +334 -231
- package/flashphoner-no-wsplayer.min.js +2 -2
- package/flashphoner-room-api.js +343 -223
- package/flashphoner-room-api.min.js +2 -2
- package/flashphoner-temasys-flash-websocket-without-adapterjs.js +332 -226
- package/flashphoner-temasys-flash-websocket.js +331 -225
- package/flashphoner-temasys-flash-websocket.min.js +1 -1
- package/flashphoner-webrtc-only.js +328 -230
- package/flashphoner-webrtc-only.min.js +1 -1
- package/flashphoner.js +340 -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 +207 -185
- package/src/webrtc-media-provider.js +14 -7
- package/src/websocket-media-provider.js +5 -0
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
|
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;
|
|
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
|
-
|
|
13015
|
-
|
|
13016
|
-
|
|
13017
|
-
|
|
13018
|
-
}
|
|
13092
|
+
var isEmptyObject = function isEmptyObject(obj) {
|
|
13093
|
+
for (var name in obj) {
|
|
13094
|
+
return false;
|
|
13095
|
+
}
|
|
13019
13096
|
|
|
13020
|
-
|
|
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
|
-
|
|
13033
|
-
|
|
13034
|
-
|
|
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
|
-
|
|
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
|
-
|
|
13043
|
-
|
|
13044
|
-
|
|
13045
|
-
|
|
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
|
-
|
|
13053
|
-
var result = {};
|
|
13129
|
+
}
|
|
13130
|
+
};
|
|
13054
13131
|
|
|
13055
|
-
|
|
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
|
-
|
|
13062
|
-
|
|
13063
|
-
|
|
13064
|
-
|
|
13065
|
-
|
|
13066
|
-
}
|
|
13135
|
+
if (browser == "chrome") {
|
|
13136
|
+
/**
|
|
13137
|
+
* Report types: googComponent, googCandidatePair, googCertificate, googLibjingleSession, googTrack, ssrc
|
|
13138
|
+
*/
|
|
13139
|
+
var gotResult = false;
|
|
13067
13140
|
|
|
13068
|
-
|
|
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
|
-
|
|
13073
|
-
|
|
13074
|
-
|
|
13075
|
-
|
|
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
|
-
|
|
13081
|
-
|
|
13082
|
-
|
|
13083
|
-
|
|
13084
|
-
|
|
13085
|
-
|
|
13086
|
-
|
|
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
|
-
|
|
13089
|
-
|
|
13090
|
-
|
|
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
|
-
|
|
13103
|
-
|
|
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
|
-
|
|
13142
|
-
|
|
13143
|
-
|
|
13144
|
-
|
|
13145
|
-
|
|
13146
|
-
|
|
13147
|
-
|
|
13148
|
-
|
|
13149
|
-
|
|
13150
|
-
|
|
13151
|
-
|
|
13152
|
-
|
|
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
|
-
|
|
13155
|
-
|
|
13156
|
-
|
|
13157
|
-
|
|
13158
|
-
|
|
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
|
-
|
|
13243
|
+
var result = "";
|
|
13162
13244
|
|
|
13163
|
-
|
|
13164
|
-
|
|
13165
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
13363
|
-
|
|
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
|
-
|
|
13366
|
-
|
|
13446
|
+
var pt = [];
|
|
13447
|
+
var i;
|
|
13367
13448
|
|
|
13368
|
-
|
|
13369
|
-
|
|
13370
|
-
|
|
13371
|
-
|
|
13372
|
-
|
|
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
|
-
|
|
13378
|
-
|
|
13379
|
-
|
|
13380
|
-
|
|
13381
|
-
|
|
13382
|
-
|
|
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
|
-
}
|
|
13468
|
+
}
|
|
13469
|
+
} //delete entries from m= line
|
|
13386
13470
|
|
|
13387
13471
|
|
|
13388
|
-
|
|
13389
|
-
|
|
13390
|
-
|
|
13391
|
-
|
|
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
|
-
|
|
13394
|
-
|
|
13395
|
-
|
|
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
|
-
|
|
13398
|
-
|
|
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
|
-
}
|
|
13489
|
+
}
|
|
13490
|
+
} //normalize sdp after modifications
|
|
13407
13491
|
|
|
13408
13492
|
|
|
13409
|
-
|
|
13493
|
+
var result = "";
|
|
13410
13494
|
|
|
13411
|
-
|
|
13412
|
-
|
|
13413
|
-
|
|
13414
|
-
}
|
|
13495
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
13496
|
+
if (sdpArray[i] != "") {
|
|
13497
|
+
result += sdpArray[i] + "\n";
|
|
13415
13498
|
}
|
|
13499
|
+
}
|
|
13416
13500
|
|
|
13417
|
-
|
|
13418
|
-
|
|
13419
|
-
getCurrentCodecAndSampleRate: function getCurrentCodecAndSampleRate(sdp, mediaType) {
|
|
13420
|
-
var rows = sdp.split("\n");
|
|
13421
|
-
var codecPt;
|
|
13501
|
+
return result;
|
|
13502
|
+
};
|
|
13422
13503
|
|
|
13423
|
-
|
|
13424
|
-
|
|
13425
|
-
|
|
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
|
-
|
|
13433
|
-
|
|
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("
|
|
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
|
|