@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
|
@@ -11589,7 +11589,12 @@ var createConnection = function createConnection(options) {
|
|
|
11589
11589
|
var id = options.id;
|
|
11590
11590
|
var authToken = options.authToken;
|
|
11591
11591
|
var display = options.display || options.localDisplay;
|
|
11592
|
-
var flashBufferTime = options.flashBufferTime || 0;
|
|
11592
|
+
var flashBufferTime = options.flashBufferTime || 0; // Set connection logger #WCS-2434
|
|
11593
|
+
|
|
11594
|
+
if (options.logger) {
|
|
11595
|
+
logger = options.logger;
|
|
11596
|
+
}
|
|
11597
|
+
|
|
11593
11598
|
var url = getConnectionUrl(options.mainUrl, options.flashProto, options.flashPort); //todo state from flash instance
|
|
11594
11599
|
|
|
11595
11600
|
var state = function state() {
|
|
@@ -12210,8 +12215,9 @@ var constants = require("./constants");
|
|
|
12210
12215
|
|
|
12211
12216
|
var util = require('./util');
|
|
12212
12217
|
|
|
12213
|
-
var
|
|
12218
|
+
var LoggerObject = require('./util').logger;
|
|
12214
12219
|
|
|
12220
|
+
var coreLogger;
|
|
12215
12221
|
var loggerConf = {
|
|
12216
12222
|
push: false,
|
|
12217
12223
|
severity: "INFO"
|
|
@@ -12259,7 +12265,7 @@ var disableConnectionQualityCalculation;
|
|
|
12259
12265
|
* @param {String=} options.decoderLocation Location of video-worker2.js file
|
|
12260
12266
|
* @param {String=} options.screenSharingExtensionId Chrome screen sharing extension id
|
|
12261
12267
|
* @param {Object=} options.constraints Default local media constraints
|
|
12262
|
-
* @param {Object=} options.logger
|
|
12268
|
+
* @param {Object=} options.logger Core logger options
|
|
12263
12269
|
* @throws {Error} Error if none of MediaProviders available
|
|
12264
12270
|
* @memberof Flashphoner
|
|
12265
12271
|
*/
|
|
@@ -12268,16 +12274,10 @@ var init = function init(options) {
|
|
|
12268
12274
|
if (!initialized) {
|
|
12269
12275
|
if (!options) {
|
|
12270
12276
|
options = {};
|
|
12271
|
-
}
|
|
12277
|
+
} // init global logger
|
|
12272
12278
|
|
|
12273
|
-
loggerConf = options.logger || loggerConf;
|
|
12274
12279
|
|
|
12275
|
-
|
|
12276
|
-
loggerConf.enableLogs = true;
|
|
12277
|
-
} // init logger
|
|
12278
|
-
|
|
12279
|
-
|
|
12280
|
-
logger.init(loggerConf.severity || "INFO", loggerConf.push || false, loggerConf.customLogger, loggerConf.enableLogs);
|
|
12280
|
+
coreLogger = createLogger(options.logger);
|
|
12281
12281
|
var waitingTemasys = false;
|
|
12282
12282
|
|
|
12283
12283
|
try {
|
|
@@ -12298,7 +12298,7 @@ var init = function init(options) {
|
|
|
12298
12298
|
constraints: options.constraints || getDefaultMediaConstraints(),
|
|
12299
12299
|
extensionId: options.screenSharingExtensionId,
|
|
12300
12300
|
audioContext: audioContext,
|
|
12301
|
-
logger:
|
|
12301
|
+
logger: coreLogger,
|
|
12302
12302
|
createMicGainNode: enableGainNode
|
|
12303
12303
|
};
|
|
12304
12304
|
webRtcProvider.configure(webRtcConf);
|
|
@@ -12315,7 +12315,7 @@ var init = function init(options) {
|
|
|
12315
12315
|
var webRtcConf = {
|
|
12316
12316
|
constraints: options.constraints || getDefaultMediaConstraints(),
|
|
12317
12317
|
extensionId: options.screenSharingExtensionId,
|
|
12318
|
-
logger:
|
|
12318
|
+
logger: coreLogger
|
|
12319
12319
|
};
|
|
12320
12320
|
webRtcProvider.configure(webRtcConf); // Just reorder media provider list
|
|
12321
12321
|
|
|
@@ -12343,7 +12343,7 @@ var init = function init(options) {
|
|
|
12343
12343
|
var flashConf = {
|
|
12344
12344
|
constraints: options.constraints || getDefaultMediaConstraints(),
|
|
12345
12345
|
flashMediaProviderSwfLocation: options.flashMediaProviderSwfLocation,
|
|
12346
|
-
logger:
|
|
12346
|
+
logger: coreLogger
|
|
12347
12347
|
};
|
|
12348
12348
|
flashProvider.configure(flashConf);
|
|
12349
12349
|
}
|
|
@@ -12367,7 +12367,7 @@ var init = function init(options) {
|
|
|
12367
12367
|
receiverLocation: options.receiverLocation,
|
|
12368
12368
|
decoderLocation: options.decoderLocation,
|
|
12369
12369
|
audioContext: audioContext,
|
|
12370
|
-
logger:
|
|
12370
|
+
logger: coreLogger
|
|
12371
12371
|
};
|
|
12372
12372
|
websocketProvider.configure(wsConf);
|
|
12373
12373
|
} //check at least 1 provider available
|
|
@@ -12389,7 +12389,7 @@ var init = function init(options) {
|
|
|
12389
12389
|
MediaProvider = _MediaProvider;
|
|
12390
12390
|
}
|
|
12391
12391
|
} else {
|
|
12392
|
-
|
|
12392
|
+
corelogger.warn(LOG_PREFIX, "Preferred media provider is not available.");
|
|
12393
12393
|
}
|
|
12394
12394
|
}
|
|
12395
12395
|
|
|
@@ -12417,7 +12417,7 @@ var init = function init(options) {
|
|
|
12417
12417
|
options.mediaProvidersReadyCallback(Object.keys(MediaProvider));
|
|
12418
12418
|
}
|
|
12419
12419
|
|
|
12420
|
-
|
|
12420
|
+
coreLogger.info(LOG_PREFIX, "Initialized");
|
|
12421
12421
|
initialized = true;
|
|
12422
12422
|
}
|
|
12423
12423
|
};
|
|
@@ -12456,7 +12456,7 @@ var playFirstVideo = function playFirstVideo(display, isLocal, src) {
|
|
|
12456
12456
|
}
|
|
12457
12457
|
};
|
|
12458
12458
|
/**
|
|
12459
|
-
* Get logger
|
|
12459
|
+
* Get core logger
|
|
12460
12460
|
*
|
|
12461
12461
|
* @returns {Object} Logger
|
|
12462
12462
|
* @memberof Flashphoner
|
|
@@ -12467,7 +12467,7 @@ var getLogger = function getLogger() {
|
|
|
12467
12467
|
if (!initialized) {
|
|
12468
12468
|
console.warn("Initialize API first.");
|
|
12469
12469
|
} else {
|
|
12470
|
-
return
|
|
12470
|
+
return coreLogger;
|
|
12471
12471
|
}
|
|
12472
12472
|
};
|
|
12473
12473
|
/**
|
|
@@ -12640,6 +12640,31 @@ var getSessions = function getSessions() {
|
|
|
12640
12640
|
|
|
12641
12641
|
var getSession = function getSession(id) {
|
|
12642
12642
|
return sessions[id];
|
|
12643
|
+
}; // Get logger configuration from options
|
|
12644
|
+
|
|
12645
|
+
|
|
12646
|
+
var getLoggerConf = function getLoggerConf(loggerOptions) {
|
|
12647
|
+
var conf = loggerOptions || loggerConf;
|
|
12648
|
+
|
|
12649
|
+
if (loggerOptions !== null) {
|
|
12650
|
+
conf.enableLogs = true;
|
|
12651
|
+
}
|
|
12652
|
+
|
|
12653
|
+
return conf;
|
|
12654
|
+
}; // Create a new logger object
|
|
12655
|
+
|
|
12656
|
+
|
|
12657
|
+
var createLogger = function createLogger(loggerOptions) {
|
|
12658
|
+
var parentLogger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : coreLogger;
|
|
12659
|
+
var newLogger = parentLogger;
|
|
12660
|
+
|
|
12661
|
+
if (newLogger === undefined || loggerOptions != undefined) {
|
|
12662
|
+
var loggerConf = getLoggerConf(loggerOptions);
|
|
12663
|
+
newLogger = new LoggerObject();
|
|
12664
|
+
newLogger.init(loggerConf.severity || "INFO", loggerConf.push || false, loggerConf.customLogger, loggerConf.enableLogs);
|
|
12665
|
+
}
|
|
12666
|
+
|
|
12667
|
+
return newLogger;
|
|
12643
12668
|
};
|
|
12644
12669
|
/**
|
|
12645
12670
|
* Create new session and connect to server.
|
|
@@ -12659,6 +12684,7 @@ var getSession = function getSession(id) {
|
|
|
12659
12684
|
* @param {Integer=} options.pingInterval Server ping interval in milliseconds [0]
|
|
12660
12685
|
* @param {Integer=} options.receiveProbes A maximum subsequental pings received missing count [0]
|
|
12661
12686
|
* @param {Integer=} options.probesInterval Interval to check subsequental pings received [0]
|
|
12687
|
+
* @param {Object=} options.logger Session logger options
|
|
12662
12688
|
* @returns {Session} Created session
|
|
12663
12689
|
* @throws {Error} Error if API is not initialized
|
|
12664
12690
|
* @throws {TypeError} Error if options.urlServer is not specified
|
|
@@ -12673,8 +12699,12 @@ var createSession = function createSession(options) {
|
|
|
12673
12699
|
|
|
12674
12700
|
if (!options || !options.urlServer) {
|
|
12675
12701
|
throw new TypeError("options.urlServer must be provided");
|
|
12676
|
-
}
|
|
12702
|
+
} // Set session logger #WCS-2434
|
|
12677
12703
|
|
|
12704
|
+
|
|
12705
|
+
var sessionLogger = createLogger(options.logger); // Override logger for all low level operations
|
|
12706
|
+
|
|
12707
|
+
var logger = sessionLogger;
|
|
12678
12708
|
var id_ = uuid_v1();
|
|
12679
12709
|
var sessionStatus = SESSION_STATUS.PENDING;
|
|
12680
12710
|
var urlServer = options.urlServer;
|
|
@@ -12780,7 +12810,7 @@ var createSession = function createSession(options) {
|
|
|
12780
12810
|
if (timeout != undefined && timeout > 0) {
|
|
12781
12811
|
connectionTimeout = setTimeout(function () {
|
|
12782
12812
|
if (wsConnection.readyState == 0) {
|
|
12783
|
-
|
|
12813
|
+
logger.warn(LOG_PREFIX, "WS connection timeout");
|
|
12784
12814
|
wsConnection.close();
|
|
12785
12815
|
}
|
|
12786
12816
|
}, timeout);
|
|
@@ -12804,7 +12834,7 @@ var createSession = function createSession(options) {
|
|
|
12804
12834
|
mediaProviders: Object.keys(MediaProvider),
|
|
12805
12835
|
keepAlive: keepAlive,
|
|
12806
12836
|
authToken: authToken,
|
|
12807
|
-
clientVersion: "2.0.
|
|
12837
|
+
clientVersion: "2.0.215",
|
|
12808
12838
|
clientOSVersion: window.navigator.appVersion,
|
|
12809
12839
|
clientBrowserVersion: window.navigator.userAgent,
|
|
12810
12840
|
msePacketizationVersion: 2,
|
|
@@ -13110,6 +13140,7 @@ var createSession = function createSession(options) {
|
|
|
13110
13140
|
* @param {Array<string>=} options.sipSDP Array of custom SDP params (ex. bandwidth (b=))
|
|
13111
13141
|
* @param {Array<string>=} options.sipHeaders Array of custom SIP headers
|
|
13112
13142
|
* @param {string=} options.videoContentHint Video content hint for browser ('detail' by default to maintain resolution), {@link Flashphoner.constants.CONTENT_HINT_TYPE}
|
|
13143
|
+
* @param {Object=} options.logger Call logger options
|
|
13113
13144
|
* @param {sdpHook} sdpHook The callback that handles sdp from the server
|
|
13114
13145
|
* @returns {Call} Call
|
|
13115
13146
|
* @throws {TypeError} Error if no options provided
|
|
@@ -13122,15 +13153,18 @@ var createSession = function createSession(options) {
|
|
|
13122
13153
|
var createCall = function createCall(options) {
|
|
13123
13154
|
//check session state
|
|
13124
13155
|
if (sessionStatus !== SESSION_STATUS.REGISTERED && sessionStatus !== SESSION_STATUS.ESTABLISHED) {
|
|
13125
|
-
|
|
13126
|
-
throw new Error('Invalid session state');
|
|
13156
|
+
throw new Error('Invalid session state ' + sessionStatus);
|
|
13127
13157
|
} //check options
|
|
13128
13158
|
|
|
13129
13159
|
|
|
13130
13160
|
if (!options) {
|
|
13131
13161
|
throw new TypeError("options must be provided");
|
|
13132
|
-
}
|
|
13162
|
+
} // Set call logger #WCS-2434
|
|
13133
13163
|
|
|
13164
|
+
|
|
13165
|
+
var callLogger = createLogger(options.logger, sessionLogger); // Override logger for all low level operations
|
|
13166
|
+
|
|
13167
|
+
var logger = callLogger;
|
|
13134
13168
|
var login = appKey == 'clickToCallApp' ? '' : cConfig.sipLogin;
|
|
13135
13169
|
var caller_ = options.incoming ? options.caller : login;
|
|
13136
13170
|
var callee_ = options.callee;
|
|
@@ -13276,7 +13310,8 @@ var createSession = function createSession(options) {
|
|
|
13276
13310
|
constraints: constraints,
|
|
13277
13311
|
connectionConfig: mediaOptions,
|
|
13278
13312
|
audioOutputId: audioOutputId,
|
|
13279
|
-
videoContentHint: videoContentHint
|
|
13313
|
+
videoContentHint: videoContentHint,
|
|
13314
|
+
logger: logger
|
|
13280
13315
|
}).then(function (newConnection) {
|
|
13281
13316
|
mediaConnection = newConnection;
|
|
13282
13317
|
return mediaConnection.createOffer({
|
|
@@ -13862,7 +13897,7 @@ var createSession = function createSession(options) {
|
|
|
13862
13897
|
/**
|
|
13863
13898
|
* Get call info
|
|
13864
13899
|
* @returns {string} Info
|
|
13865
|
-
* @memberof
|
|
13900
|
+
* @memberof Call
|
|
13866
13901
|
* @inner
|
|
13867
13902
|
*/
|
|
13868
13903
|
|
|
@@ -13873,7 +13908,7 @@ var createSession = function createSession(options) {
|
|
|
13873
13908
|
/**
|
|
13874
13909
|
* Get stream error info
|
|
13875
13910
|
* @returns {string} Error info
|
|
13876
|
-
* @memberof
|
|
13911
|
+
* @memberof Call
|
|
13877
13912
|
* @inner
|
|
13878
13913
|
*/
|
|
13879
13914
|
|
|
@@ -13881,6 +13916,17 @@ var createSession = function createSession(options) {
|
|
|
13881
13916
|
var getErrorInfo = function getErrorInfo() {
|
|
13882
13917
|
return errorInfo_;
|
|
13883
13918
|
};
|
|
13919
|
+
/**
|
|
13920
|
+
* Get call logger
|
|
13921
|
+
*
|
|
13922
|
+
* @returns {Object} Logger
|
|
13923
|
+
* @memberof Call
|
|
13924
|
+
*/
|
|
13925
|
+
|
|
13926
|
+
|
|
13927
|
+
var getLogger = function getLogger() {
|
|
13928
|
+
return callLogger;
|
|
13929
|
+
};
|
|
13884
13930
|
|
|
13885
13931
|
call.call = call_;
|
|
13886
13932
|
call.answer = answer;
|
|
@@ -13912,6 +13958,7 @@ var createSession = function createSession(options) {
|
|
|
13912
13958
|
call.switchMic = switchMic;
|
|
13913
13959
|
call.switchToScreen = switchToScreen;
|
|
13914
13960
|
call.switchToCam = switchToCam;
|
|
13961
|
+
call.getLogger = getLogger;
|
|
13915
13962
|
calls[id_] = call;
|
|
13916
13963
|
return call;
|
|
13917
13964
|
};
|
|
@@ -13958,6 +14005,7 @@ var createSession = function createSession(options) {
|
|
|
13958
14005
|
* @param {string=} options.useCanvasMediaStream EXPERIMENTAL: when publish bind browser's media stream to the canvas. It can be useful for image filtering
|
|
13959
14006
|
* @param {string=} options.videoContentHint Video content hint for browser ('detail' by default to maintain resolution), {@link Flashphoner.constants.CONTENT_HINT_TYPE}
|
|
13960
14007
|
* @param {Boolean=} options.unmutePlayOnStart Unmute playback on start. May be used after user gesture only, so set 'unmutePlayOnStart: false' for autoplay
|
|
14008
|
+
* @param {Object=} options.logger Stream logger options
|
|
13961
14009
|
* @param {sdpHook} sdpHook The callback that handles sdp from the server
|
|
13962
14010
|
* @returns {Stream} Stream
|
|
13963
14011
|
* @throws {TypeError} Error if no options provided
|
|
@@ -13973,7 +14021,7 @@ var createSession = function createSession(options) {
|
|
|
13973
14021
|
var availableCallbacks = []; //check session state
|
|
13974
14022
|
|
|
13975
14023
|
if (sessionStatus !== SESSION_STATUS.ESTABLISHED) {
|
|
13976
|
-
throw new Error('Invalid session state');
|
|
14024
|
+
throw new Error('Invalid session state ' + sessionStatus);
|
|
13977
14025
|
} //check options
|
|
13978
14026
|
|
|
13979
14027
|
|
|
@@ -13983,8 +14031,12 @@ var createSession = function createSession(options) {
|
|
|
13983
14031
|
|
|
13984
14032
|
if (!options.name) {
|
|
13985
14033
|
throw new TypeError("options.name must be provided");
|
|
13986
|
-
}
|
|
14034
|
+
} // Set stream logger #WCS-2434
|
|
14035
|
+
|
|
14036
|
+
|
|
14037
|
+
var streamLogger = createLogger(options.logger, sessionLogger); // Override logger for all low level operations
|
|
13987
14038
|
|
|
14039
|
+
var logger = streamLogger;
|
|
13988
14040
|
var clientKf = new KalmanFilter();
|
|
13989
14041
|
var serverKf = new KalmanFilter();
|
|
13990
14042
|
var id_ = uuid_v1();
|
|
@@ -14228,7 +14280,7 @@ var createSession = function createSession(options) {
|
|
|
14228
14280
|
logger.debug(LOG_PREFIX, "Play stream " + name_);
|
|
14229
14281
|
|
|
14230
14282
|
if (status_ !== STREAM_STATUS.NEW) {
|
|
14231
|
-
throw new Error("Invalid stream state");
|
|
14283
|
+
throw new Error("Invalid stream state " + status_);
|
|
14232
14284
|
}
|
|
14233
14285
|
|
|
14234
14286
|
status_ = STREAM_STATUS.PENDING; //create mediaProvider connection
|
|
@@ -14247,7 +14299,8 @@ var createSession = function createSession(options) {
|
|
|
14247
14299
|
audioOutputId: audioOutputId,
|
|
14248
14300
|
remoteVideo: remoteVideo,
|
|
14249
14301
|
playoutDelay: playoutDelay,
|
|
14250
|
-
unmutePlayOnStart: unmutePlayOnStart
|
|
14302
|
+
unmutePlayOnStart: unmutePlayOnStart,
|
|
14303
|
+
logger: logger
|
|
14251
14304
|
}, streamRefreshHandlers[id_]).then(function (newConnection) {
|
|
14252
14305
|
mediaConnection = newConnection;
|
|
14253
14306
|
|
|
@@ -14311,7 +14364,7 @@ var createSession = function createSession(options) {
|
|
|
14311
14364
|
logger.debug(LOG_PREFIX, "Publish stream " + name_);
|
|
14312
14365
|
|
|
14313
14366
|
if (status_ !== STREAM_STATUS.NEW) {
|
|
14314
|
-
throw new Error("Invalid stream state");
|
|
14367
|
+
throw new Error("Invalid stream state " + status_);
|
|
14315
14368
|
}
|
|
14316
14369
|
|
|
14317
14370
|
status_ = STREAM_STATUS.PENDING;
|
|
@@ -14345,7 +14398,8 @@ var createSession = function createSession(options) {
|
|
|
14345
14398
|
connectionConfig: mediaOptions,
|
|
14346
14399
|
connectionConstraints: mediaConnectionConstraints,
|
|
14347
14400
|
customStream: constraints && constraints.customStream ? constraints.customStream : false,
|
|
14348
|
-
videoContentHint: videoContentHint
|
|
14401
|
+
videoContentHint: videoContentHint,
|
|
14402
|
+
logger: logger
|
|
14349
14403
|
}).then(function (newConnection) {
|
|
14350
14404
|
mediaConnection = newConnection;
|
|
14351
14405
|
return mediaConnection.createOffer({
|
|
@@ -14975,6 +15029,17 @@ var createSession = function createSession(options) {
|
|
|
14975
15029
|
availableCallbacks.push(promise);
|
|
14976
15030
|
});
|
|
14977
15031
|
};
|
|
15032
|
+
/**
|
|
15033
|
+
* Get stream logger
|
|
15034
|
+
*
|
|
15035
|
+
* @returns {Object} Logger
|
|
15036
|
+
* @memberof Stream
|
|
15037
|
+
*/
|
|
15038
|
+
|
|
15039
|
+
|
|
15040
|
+
var getLogger = function getLogger() {
|
|
15041
|
+
return streamLogger;
|
|
15042
|
+
};
|
|
14978
15043
|
|
|
14979
15044
|
stream.play = play;
|
|
14980
15045
|
stream.publish = publish;
|
|
@@ -15014,6 +15079,7 @@ var createSession = function createSession(options) {
|
|
|
15014
15079
|
stream.switchToScreen = switchToScreen;
|
|
15015
15080
|
stream.switchToCam = switchToCam;
|
|
15016
15081
|
stream.sendData = sendData;
|
|
15082
|
+
stream.getLogger = getLogger;
|
|
15017
15083
|
streams[id_] = stream;
|
|
15018
15084
|
return stream;
|
|
15019
15085
|
};
|
|
@@ -15222,6 +15288,17 @@ var createSession = function createSession(options) {
|
|
|
15222
15288
|
}
|
|
15223
15289
|
|
|
15224
15290
|
return sdp;
|
|
15291
|
+
};
|
|
15292
|
+
/**
|
|
15293
|
+
* Get session logger
|
|
15294
|
+
*
|
|
15295
|
+
* @returns {Object} Logger
|
|
15296
|
+
* @memberof Session
|
|
15297
|
+
*/
|
|
15298
|
+
|
|
15299
|
+
|
|
15300
|
+
var getLogger = function getLogger() {
|
|
15301
|
+
return sessionLogger;
|
|
15225
15302
|
}; //export Session
|
|
15226
15303
|
|
|
15227
15304
|
|
|
@@ -15237,7 +15314,8 @@ var createSession = function createSession(options) {
|
|
|
15237
15314
|
session.submitBugReport = submitBugReport;
|
|
15238
15315
|
session.startDebug = startDebug;
|
|
15239
15316
|
session.stopDebug = stopDebug;
|
|
15240
|
-
session.on = on;
|
|
15317
|
+
session.on = on;
|
|
15318
|
+
session.getLogger = getLogger; //save interface to global map
|
|
15241
15319
|
|
|
15242
15320
|
sessions[id_] = session;
|
|
15243
15321
|
return session;
|
|
@@ -15303,6 +15381,11 @@ var Promise = require('es6-promise').Promise;
|
|
|
15303
15381
|
|
|
15304
15382
|
var createConnection = function createConnection(options) {
|
|
15305
15383
|
return new Promise(function (resolve, reject) {
|
|
15384
|
+
// Set connection logger #WCS-2434
|
|
15385
|
+
if (options.logger) {
|
|
15386
|
+
logger = options.logger;
|
|
15387
|
+
}
|
|
15388
|
+
|
|
15306
15389
|
var id = options.id;
|
|
15307
15390
|
var connectionConfig = options.connectionConfig || {
|
|
15308
15391
|
"iceServers": []
|
|
@@ -15938,165 +16021,168 @@ module.exports = {
|
|
|
15938
16021
|
},{"./util":46,"es6-promise":2,"uuid":10,"webrtc-adapter":25}],46:[function(require,module,exports){
|
|
15939
16022
|
'use strict';
|
|
15940
16023
|
|
|
15941
|
-
|
|
15942
|
-
|
|
15943
|
-
|
|
15944
|
-
|
|
15945
|
-
}
|
|
16024
|
+
var isEmptyObject = function isEmptyObject(obj) {
|
|
16025
|
+
for (var name in obj) {
|
|
16026
|
+
return false;
|
|
16027
|
+
}
|
|
15946
16028
|
|
|
15947
|
-
|
|
15948
|
-
|
|
16029
|
+
return true;
|
|
16030
|
+
};
|
|
16031
|
+
/**
|
|
16032
|
+
* Copy values of object own properties to array.
|
|
16033
|
+
*
|
|
16034
|
+
* @param obj
|
|
16035
|
+
* @returns {Array}
|
|
16036
|
+
*/
|
|
15949
16037
|
|
|
15950
|
-
/**
|
|
15951
|
-
* Copy values of object own properties to array.
|
|
15952
|
-
*
|
|
15953
|
-
* @param obj
|
|
15954
|
-
* @returns {Array}
|
|
15955
|
-
*/
|
|
15956
|
-
copyObjectToArray: function copyObjectToArray(obj) {
|
|
15957
|
-
var ret = [];
|
|
15958
16038
|
|
|
15959
|
-
|
|
15960
|
-
|
|
15961
|
-
|
|
15962
|
-
|
|
16039
|
+
var copyObjectToArray = function copyObjectToArray(obj) {
|
|
16040
|
+
var ret = [];
|
|
16041
|
+
|
|
16042
|
+
for (var prop in obj) {
|
|
16043
|
+
if (obj.hasOwnProperty(prop)) {
|
|
16044
|
+
ret.push(obj[prop]);
|
|
15963
16045
|
}
|
|
16046
|
+
}
|
|
15964
16047
|
|
|
15965
|
-
|
|
15966
|
-
|
|
16048
|
+
return ret;
|
|
16049
|
+
};
|
|
16050
|
+
/**
|
|
16051
|
+
* Copy src properties to dst object.
|
|
16052
|
+
* Will overwrite dst prop with src prop in case of dst prop exist.
|
|
16053
|
+
*/
|
|
15967
16054
|
|
|
15968
|
-
|
|
15969
|
-
|
|
15970
|
-
|
|
15971
|
-
|
|
15972
|
-
|
|
15973
|
-
for (var prop in src) {
|
|
15974
|
-
if (src.hasOwnProperty(prop)) {
|
|
15975
|
-
dst[prop] = src[prop];
|
|
15976
|
-
}
|
|
16055
|
+
|
|
16056
|
+
var copyObjectPropsToAnotherObject = function copyObjectPropsToAnotherObject(src, dst) {
|
|
16057
|
+
for (var prop in src) {
|
|
16058
|
+
if (src.hasOwnProperty(prop)) {
|
|
16059
|
+
dst[prop] = src[prop];
|
|
15977
16060
|
}
|
|
15978
|
-
}
|
|
15979
|
-
|
|
15980
|
-
var result = {};
|
|
15981
|
-
|
|
15982
|
-
if (browser == "chrome") {
|
|
15983
|
-
/**
|
|
15984
|
-
* Report types: googComponent, googCandidatePair, googCertificate, googLibjingleSession, googTrack, ssrc
|
|
15985
|
-
*/
|
|
15986
|
-
var gotResult = false;
|
|
15987
|
-
|
|
15988
|
-
if (report.type && report.type == "googCandidatePair") {
|
|
15989
|
-
//check if this is active pair
|
|
15990
|
-
if (report.googActiveConnection == "true") {
|
|
15991
|
-
gotResult = true;
|
|
15992
|
-
}
|
|
15993
|
-
}
|
|
16061
|
+
}
|
|
16062
|
+
};
|
|
15994
16063
|
|
|
15995
|
-
|
|
16064
|
+
var processRtcStatsReport = function processRtcStatsReport(browser, report) {
|
|
16065
|
+
var result = {};
|
|
16066
|
+
|
|
16067
|
+
if (browser == "chrome") {
|
|
16068
|
+
/**
|
|
16069
|
+
* Report types: googComponent, googCandidatePair, googCertificate, googLibjingleSession, googTrack, ssrc
|
|
16070
|
+
*/
|
|
16071
|
+
var gotResult = false;
|
|
16072
|
+
|
|
16073
|
+
if (report.type && report.type == "googCandidatePair") {
|
|
16074
|
+
//check if this is active pair
|
|
16075
|
+
if (report.googActiveConnection == "true") {
|
|
15996
16076
|
gotResult = true;
|
|
15997
16077
|
}
|
|
16078
|
+
}
|
|
15998
16079
|
|
|
15999
|
-
|
|
16000
|
-
|
|
16001
|
-
|
|
16002
|
-
|
|
16003
|
-
|
|
16080
|
+
if (report.type && report.type == "ssrc") {
|
|
16081
|
+
gotResult = true;
|
|
16082
|
+
}
|
|
16083
|
+
|
|
16084
|
+
if (gotResult) {
|
|
16085
|
+
for (var k in report) {
|
|
16086
|
+
if (report.hasOwnProperty(k)) {
|
|
16087
|
+
result[k] = report[k];
|
|
16004
16088
|
}
|
|
16005
16089
|
}
|
|
16090
|
+
}
|
|
16006
16091
|
|
|
16007
|
-
|
|
16008
|
-
|
|
16009
|
-
|
|
16010
|
-
|
|
16011
|
-
|
|
16012
|
-
|
|
16013
|
-
|
|
16092
|
+
return result;
|
|
16093
|
+
} else if (browser == "firefox") {
|
|
16094
|
+
/**
|
|
16095
|
+
* RTCStatsReport http://mxr.mozilla.org/mozilla-central/source/dom/webidl/RTCStatsReport.webidl
|
|
16096
|
+
*/
|
|
16097
|
+
if (report.type && (report.type == "outboundrtp" || report.type == "inboundrtp") && report.id.indexOf("rtcp") == -1) {
|
|
16098
|
+
result = {};
|
|
16014
16099
|
|
|
16015
|
-
|
|
16016
|
-
|
|
16017
|
-
|
|
16018
|
-
}
|
|
16100
|
+
for (var k in report) {
|
|
16101
|
+
if (report.hasOwnProperty(k)) {
|
|
16102
|
+
result[k] = report[k];
|
|
16019
16103
|
}
|
|
16020
16104
|
}
|
|
16021
|
-
|
|
16022
|
-
return result;
|
|
16023
|
-
} else {
|
|
16024
|
-
return result;
|
|
16025
16105
|
}
|
|
16026
16106
|
|
|
16027
|
-
;
|
|
16107
|
+
return result;
|
|
16108
|
+
} else {
|
|
16109
|
+
return result;
|
|
16110
|
+
}
|
|
16111
|
+
};
|
|
16112
|
+
|
|
16113
|
+
var Browser = {
|
|
16114
|
+
isIE: function isIE() {
|
|
16115
|
+
return (
|
|
16116
|
+
/*@cc_on!@*/
|
|
16117
|
+
false || !!document.documentMode
|
|
16118
|
+
);
|
|
16028
16119
|
},
|
|
16029
|
-
|
|
16030
|
-
|
|
16031
|
-
return (
|
|
16032
|
-
/*@cc_on!@*/
|
|
16033
|
-
false || !!document.documentMode
|
|
16034
|
-
);
|
|
16035
|
-
},
|
|
16036
|
-
isFirefox: function isFirefox() {
|
|
16037
|
-
return typeof InstallTrigger !== 'undefined';
|
|
16038
|
-
},
|
|
16039
|
-
isChrome: function isChrome() {
|
|
16040
|
-
return !!window.chrome && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent);
|
|
16041
|
-
},
|
|
16042
|
-
isEdge: function isEdge() {
|
|
16043
|
-
return !isIE && !!window.StyleMedia;
|
|
16044
|
-
},
|
|
16045
|
-
isOpera: function isOpera() {
|
|
16046
|
-
return !!window.opr && !!opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
|
16047
|
-
},
|
|
16048
|
-
isiOS: function isiOS() {
|
|
16049
|
-
return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
|
|
16050
|
-
},
|
|
16051
|
-
isSafari: function isSafari() {
|
|
16052
|
-
var userAgent = navigator.userAgent.toLowerCase();
|
|
16053
|
-
return /(safari|applewebkit)/i.test(userAgent) && !userAgent.includes("chrome") && !userAgent.includes("android");
|
|
16054
|
-
},
|
|
16055
|
-
isAndroid: function isAndroid() {
|
|
16056
|
-
return navigator.userAgent.toLowerCase().indexOf("android") > -1;
|
|
16057
|
-
},
|
|
16058
|
-
isSafariWebRTC: function isSafariWebRTC() {
|
|
16059
|
-
return navigator.mediaDevices && this.isSafari();
|
|
16060
|
-
},
|
|
16061
|
-
isSamsungBrowser: function isSamsungBrowser() {
|
|
16062
|
-
return /SamsungBrowser/i.test(navigator.userAgent);
|
|
16063
|
-
},
|
|
16064
|
-
isAndroidFirefox: function isAndroidFirefox() {
|
|
16065
|
-
return this.isAndroid() && /Firefox/i.test(navigator.userAgent);
|
|
16066
|
-
}
|
|
16120
|
+
isFirefox: function isFirefox() {
|
|
16121
|
+
return typeof InstallTrigger !== 'undefined';
|
|
16067
16122
|
},
|
|
16068
|
-
|
|
16069
|
-
|
|
16070
|
-
|
|
16071
|
-
|
|
16072
|
-
|
|
16073
|
-
|
|
16074
|
-
|
|
16075
|
-
|
|
16076
|
-
|
|
16077
|
-
|
|
16078
|
-
|
|
16079
|
-
|
|
16123
|
+
isChrome: function isChrome() {
|
|
16124
|
+
return !!window.chrome && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent);
|
|
16125
|
+
},
|
|
16126
|
+
isEdge: function isEdge() {
|
|
16127
|
+
return !isIE && !!window.StyleMedia;
|
|
16128
|
+
},
|
|
16129
|
+
isOpera: function isOpera() {
|
|
16130
|
+
return !!window.opr && !!opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
|
16131
|
+
},
|
|
16132
|
+
isiOS: function isiOS() {
|
|
16133
|
+
return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
|
|
16134
|
+
},
|
|
16135
|
+
isSafari: function isSafari() {
|
|
16136
|
+
var userAgent = navigator.userAgent.toLowerCase();
|
|
16137
|
+
return /(safari|applewebkit)/i.test(userAgent) && !userAgent.includes("chrome") && !userAgent.includes("android");
|
|
16138
|
+
},
|
|
16139
|
+
isAndroid: function isAndroid() {
|
|
16140
|
+
return navigator.userAgent.toLowerCase().indexOf("android") > -1;
|
|
16141
|
+
},
|
|
16142
|
+
isSafariWebRTC: function isSafariWebRTC() {
|
|
16143
|
+
return navigator.mediaDevices && this.isSafari();
|
|
16144
|
+
},
|
|
16145
|
+
isSamsungBrowser: function isSamsungBrowser() {
|
|
16146
|
+
return /SamsungBrowser/i.test(navigator.userAgent);
|
|
16147
|
+
},
|
|
16148
|
+
isAndroidFirefox: function isAndroidFirefox() {
|
|
16149
|
+
return this.isAndroid() && /Firefox/i.test(navigator.userAgent);
|
|
16150
|
+
}
|
|
16151
|
+
};
|
|
16152
|
+
var SDP = {
|
|
16153
|
+
matchPrefix: function matchPrefix(sdp, prefix) {
|
|
16154
|
+
var parts = sdp.trim().split('\n').map(function (line) {
|
|
16155
|
+
return line.trim();
|
|
16156
|
+
});
|
|
16157
|
+
return parts.filter(function (line) {
|
|
16158
|
+
return line.indexOf(prefix) === 0;
|
|
16159
|
+
});
|
|
16160
|
+
},
|
|
16161
|
+
writeFmtp: function writeFmtp(sdp, param, codec) {
|
|
16162
|
+
var sdpArray = sdp.split("\n");
|
|
16163
|
+
var i;
|
|
16080
16164
|
|
|
16081
|
-
|
|
16082
|
-
|
|
16083
|
-
|
|
16084
|
-
|
|
16085
|
-
|
|
16165
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
16166
|
+
if (sdpArray[i].search(codec) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
|
|
16167
|
+
sdpArray[i] += "\na=fmtp:" + sdpArray[i].match(/[0-9]+/)[0] + " " + param + "\r";
|
|
16168
|
+
}
|
|
16169
|
+
} //normalize sdp after modifications
|
|
16086
16170
|
|
|
16087
16171
|
|
|
16088
|
-
|
|
16172
|
+
var result = "";
|
|
16089
16173
|
|
|
16090
|
-
|
|
16091
|
-
|
|
16092
|
-
|
|
16093
|
-
}
|
|
16174
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
16175
|
+
if (sdpArray[i] != "") {
|
|
16176
|
+
result += sdpArray[i] + "\n";
|
|
16094
16177
|
}
|
|
16095
|
-
|
|
16096
|
-
return result;
|
|
16097
16178
|
}
|
|
16098
|
-
|
|
16099
|
-
|
|
16179
|
+
|
|
16180
|
+
return result;
|
|
16181
|
+
}
|
|
16182
|
+
};
|
|
16183
|
+
|
|
16184
|
+
var logger = function logger() {
|
|
16185
|
+
return {
|
|
16100
16186
|
init: function init(verbosity, enablePushLogs, customLogger, enableLogs) {
|
|
16101
16187
|
switch (verbosity.toUpperCase()) {
|
|
16102
16188
|
case "DEBUG":
|
|
@@ -16277,92 +16363,104 @@ module.exports = {
|
|
|
16277
16363
|
default:
|
|
16278
16364
|
this.verbosity = 2;
|
|
16279
16365
|
}
|
|
16280
|
-
|
|
16281
|
-
;
|
|
16282
16366
|
}
|
|
16283
|
-
}
|
|
16284
|
-
|
|
16285
|
-
if (!codecs.length) return sdp;
|
|
16286
|
-
var sdpArray = sdp.split("\n");
|
|
16287
|
-
var codecsArray = codecs.split(","); //search and delete codecs line
|
|
16367
|
+
};
|
|
16368
|
+
};
|
|
16288
16369
|
|
|
16289
|
-
|
|
16290
|
-
|
|
16370
|
+
var stripCodecs = function stripCodecs(sdp, codecs) {
|
|
16371
|
+
if (!codecs.length) return sdp;
|
|
16372
|
+
var sdpArray = sdp.split("\n");
|
|
16373
|
+
var codecsArray = codecs.split(","); //search and delete codecs line
|
|
16291
16374
|
|
|
16292
|
-
|
|
16293
|
-
|
|
16375
|
+
var pt = [];
|
|
16376
|
+
var i;
|
|
16294
16377
|
|
|
16295
|
-
|
|
16296
|
-
|
|
16297
|
-
|
|
16298
|
-
|
|
16299
|
-
|
|
16300
|
-
|
|
16378
|
+
for (var p = 0; p < codecsArray.length; p++) {
|
|
16379
|
+
console.log("Searching for codec " + codecsArray[p]);
|
|
16380
|
+
|
|
16381
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
16382
|
+
if (sdpArray[i].search(new RegExp(codecsArray[p], 'i')) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
|
|
16383
|
+
console.log(codecsArray[p] + " detected");
|
|
16384
|
+
pt.push(sdpArray[i].match(/[0-9]+/)[0]);
|
|
16385
|
+
sdpArray[i] = "";
|
|
16301
16386
|
}
|
|
16302
16387
|
}
|
|
16388
|
+
}
|
|
16303
16389
|
|
|
16304
|
-
|
|
16305
|
-
|
|
16306
|
-
|
|
16307
|
-
|
|
16308
|
-
|
|
16309
|
-
|
|
16310
|
-
}
|
|
16390
|
+
if (pt.length) {
|
|
16391
|
+
//searching for fmtp
|
|
16392
|
+
for (p = 0; p < pt.length; p++) {
|
|
16393
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
16394
|
+
if (sdpArray[i].search("a=fmtp:" + pt[p]) != -1 || sdpArray[i].search("a=rtcp-fb:" + pt[p]) != -1) {
|
|
16395
|
+
sdpArray[i] = "";
|
|
16311
16396
|
}
|
|
16312
|
-
}
|
|
16397
|
+
}
|
|
16398
|
+
} //delete entries from m= line
|
|
16313
16399
|
|
|
16314
16400
|
|
|
16315
|
-
|
|
16316
|
-
|
|
16317
|
-
|
|
16318
|
-
|
|
16401
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
16402
|
+
if (sdpArray[i].search("m=audio") != -1 || sdpArray[i].search("m=video") != -1) {
|
|
16403
|
+
var mLineSplitted = sdpArray[i].split(" ");
|
|
16404
|
+
var newMLine = "";
|
|
16319
16405
|
|
|
16320
|
-
|
|
16321
|
-
|
|
16322
|
-
|
|
16406
|
+
for (var m = 0; m < mLineSplitted.length; m++) {
|
|
16407
|
+
if (pt.indexOf(mLineSplitted[m].trim()) == -1 || m <= 2) {
|
|
16408
|
+
newMLine += mLineSplitted[m];
|
|
16323
16409
|
|
|
16324
|
-
|
|
16325
|
-
|
|
16326
|
-
}
|
|
16410
|
+
if (m < mLineSplitted.length - 1) {
|
|
16411
|
+
newMLine = newMLine + " ";
|
|
16327
16412
|
}
|
|
16328
16413
|
}
|
|
16329
|
-
|
|
16330
|
-
sdpArray[i] = newMLine;
|
|
16331
16414
|
}
|
|
16415
|
+
|
|
16416
|
+
sdpArray[i] = newMLine;
|
|
16332
16417
|
}
|
|
16333
|
-
}
|
|
16418
|
+
}
|
|
16419
|
+
} //normalize sdp after modifications
|
|
16334
16420
|
|
|
16335
16421
|
|
|
16336
|
-
|
|
16422
|
+
var result = "";
|
|
16337
16423
|
|
|
16338
|
-
|
|
16339
|
-
|
|
16340
|
-
|
|
16341
|
-
}
|
|
16424
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
16425
|
+
if (sdpArray[i] != "") {
|
|
16426
|
+
result += sdpArray[i] + "\n";
|
|
16342
16427
|
}
|
|
16428
|
+
}
|
|
16343
16429
|
|
|
16344
|
-
|
|
16345
|
-
|
|
16346
|
-
getCurrentCodecAndSampleRate: function getCurrentCodecAndSampleRate(sdp, mediaType) {
|
|
16347
|
-
var rows = sdp.split("\n");
|
|
16348
|
-
var codecPt;
|
|
16430
|
+
return result;
|
|
16431
|
+
};
|
|
16349
16432
|
|
|
16350
|
-
|
|
16351
|
-
|
|
16352
|
-
|
|
16353
|
-
ret.name = rows[i].split(" ")[1].split("/")[0];
|
|
16354
|
-
ret.sampleRate = rows[i].split(" ")[1].split("/")[1];
|
|
16355
|
-
return ret;
|
|
16356
|
-
} //WCS-2136. WebRTC statistics doesn't work for VP8
|
|
16433
|
+
var getCurrentCodecAndSampleRate = function getCurrentCodecAndSampleRate(sdp, mediaType) {
|
|
16434
|
+
var rows = sdp.split("\n");
|
|
16435
|
+
var codecPt;
|
|
16357
16436
|
|
|
16437
|
+
for (var i = 0; i < rows.length; i++) {
|
|
16438
|
+
if (codecPt && rows[i].indexOf("a=rtpmap:" + codecPt) != -1) {
|
|
16439
|
+
var ret = {};
|
|
16440
|
+
ret.name = rows[i].split(" ")[1].split("/")[0];
|
|
16441
|
+
ret.sampleRate = rows[i].split(" ")[1].split("/")[1];
|
|
16442
|
+
return ret;
|
|
16443
|
+
} //WCS-2136. WebRTC statistics doesn't work for VP8
|
|
16358
16444
|
|
|
16359
|
-
|
|
16360
|
-
|
|
16361
|
-
|
|
16445
|
+
|
|
16446
|
+
if (rows[i].indexOf("m=" + mediaType) != -1) {
|
|
16447
|
+
codecPt = rows[i].split(" ")[3].trim();
|
|
16362
16448
|
}
|
|
16363
16449
|
}
|
|
16364
16450
|
};
|
|
16365
16451
|
|
|
16452
|
+
module.exports = {
|
|
16453
|
+
isEmptyObject: isEmptyObject,
|
|
16454
|
+
copyObjectToArray: copyObjectToArray,
|
|
16455
|
+
copyObjectPropsToAnotherObject: copyObjectPropsToAnotherObject,
|
|
16456
|
+
processRtcStatsReport: processRtcStatsReport,
|
|
16457
|
+
Browser: Browser,
|
|
16458
|
+
SDP: SDP,
|
|
16459
|
+
logger: logger,
|
|
16460
|
+
stripCodecs: stripCodecs,
|
|
16461
|
+
getCurrentCodecAndSampleRate: getCurrentCodecAndSampleRate
|
|
16462
|
+
};
|
|
16463
|
+
|
|
16366
16464
|
},{}],47:[function(require,module,exports){
|
|
16367
16465
|
'use strict';
|
|
16368
16466
|
|
|
@@ -16382,7 +16480,12 @@ var audioContext;
|
|
|
16382
16480
|
var createConnection = function createConnection(options, handlers) {
|
|
16383
16481
|
return new Promise(function (resolve, reject) {
|
|
16384
16482
|
var id = options.id;
|
|
16385
|
-
var display = options.display;
|
|
16483
|
+
var display = options.display; // Set connection logger #WCS-2434
|
|
16484
|
+
|
|
16485
|
+
if (options.logger) {
|
|
16486
|
+
logger = options.logger;
|
|
16487
|
+
}
|
|
16488
|
+
|
|
16386
16489
|
var canvas = document.createElement("canvas");
|
|
16387
16490
|
display.appendChild(canvas);
|
|
16388
16491
|
canvas.id = id;
|