@flashphoner/websdk 2.0.210 → 2.0.215
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docTemplate/README.md +1 -1
- package/examples/demo/streaming/conference/conference.html +10 -0
- package/examples/demo/streaming/conference/conference.js +236 -35
- package/examples/demo/streaming/video-chat/video-chat.html +5 -0
- package/flashphoner-no-flash.js +331 -231
- package/flashphoner-no-flash.min.js +2 -2
- package/flashphoner-no-webrtc.js +322 -224
- package/flashphoner-no-webrtc.min.js +2 -2
- package/flashphoner-no-wsplayer.js +331 -231
- package/flashphoner-no-wsplayer.min.js +2 -2
- package/flashphoner-room-api.js +340 -223
- package/flashphoner-room-api.min.js +2 -2
- package/flashphoner-temasys-flash-websocket-without-adapterjs.js +329 -226
- package/flashphoner-temasys-flash-websocket.js +328 -225
- package/flashphoner-temasys-flash-websocket.min.js +1 -1
- package/flashphoner-webrtc-only.js +325 -230
- package/flashphoner-webrtc-only.min.js +1 -1
- package/flashphoner.js +337 -232
- package/flashphoner.min.js +2 -2
- package/package.json +1 -1
- package/src/flash-media-provider.js +5 -0
- package/src/flashphoner-core.d.ts +7 -4
- package/src/flashphoner-core.js +98 -29
- package/src/room-module.js +9 -2
- package/src/temasys-media-provider.js +5 -0
- package/src/util.js +204 -185
- package/src/webrtc-media-provider.js +14 -7
- package/src/websocket-media-provider.js +5 -0
package/flashphoner-no-webrtc.js
CHANGED
|
@@ -10420,7 +10420,12 @@ var createConnection = function createConnection(options) {
|
|
|
10420
10420
|
var id = options.id;
|
|
10421
10421
|
var authToken = options.authToken;
|
|
10422
10422
|
var display = options.display || options.localDisplay;
|
|
10423
|
-
var flashBufferTime = options.flashBufferTime || 0;
|
|
10423
|
+
var flashBufferTime = options.flashBufferTime || 0; // Set connection logger #WCS-2434
|
|
10424
|
+
|
|
10425
|
+
if (options.logger) {
|
|
10426
|
+
logger = options.logger;
|
|
10427
|
+
}
|
|
10428
|
+
|
|
10424
10429
|
var url = getConnectionUrl(options.mainUrl, options.flashProto, options.flashPort); //todo state from flash instance
|
|
10425
10430
|
|
|
10426
10431
|
var state = function state() {
|
|
@@ -11041,8 +11046,9 @@ var constants = require("./constants");
|
|
|
11041
11046
|
|
|
11042
11047
|
var util = require('./util');
|
|
11043
11048
|
|
|
11044
|
-
var
|
|
11049
|
+
var LoggerObject = require('./util').logger;
|
|
11045
11050
|
|
|
11051
|
+
var coreLogger;
|
|
11046
11052
|
var loggerConf = {
|
|
11047
11053
|
push: false,
|
|
11048
11054
|
severity: "INFO"
|
|
@@ -11090,7 +11096,7 @@ var disableConnectionQualityCalculation;
|
|
|
11090
11096
|
* @param {String=} options.decoderLocation Location of video-worker2.js file
|
|
11091
11097
|
* @param {String=} options.screenSharingExtensionId Chrome screen sharing extension id
|
|
11092
11098
|
* @param {Object=} options.constraints Default local media constraints
|
|
11093
|
-
* @param {Object=} options.logger
|
|
11099
|
+
* @param {Object=} options.logger Core logger options
|
|
11094
11100
|
* @throws {Error} Error if none of MediaProviders available
|
|
11095
11101
|
* @memberof Flashphoner
|
|
11096
11102
|
*/
|
|
@@ -11099,16 +11105,10 @@ var init = function init(options) {
|
|
|
11099
11105
|
if (!initialized) {
|
|
11100
11106
|
if (!options) {
|
|
11101
11107
|
options = {};
|
|
11102
|
-
}
|
|
11108
|
+
} // init global logger
|
|
11103
11109
|
|
|
11104
|
-
loggerConf = options.logger || loggerConf;
|
|
11105
11110
|
|
|
11106
|
-
|
|
11107
|
-
loggerConf.enableLogs = true;
|
|
11108
|
-
} // init logger
|
|
11109
|
-
|
|
11110
|
-
|
|
11111
|
-
logger.init(loggerConf.severity || "INFO", loggerConf.push || false, loggerConf.customLogger, loggerConf.enableLogs);
|
|
11111
|
+
coreLogger = createLogger(options.logger);
|
|
11112
11112
|
var waitingTemasys = false;
|
|
11113
11113
|
|
|
11114
11114
|
try {
|
|
@@ -11129,7 +11129,7 @@ var init = function init(options) {
|
|
|
11129
11129
|
constraints: options.constraints || getDefaultMediaConstraints(),
|
|
11130
11130
|
extensionId: options.screenSharingExtensionId,
|
|
11131
11131
|
audioContext: audioContext,
|
|
11132
|
-
logger:
|
|
11132
|
+
logger: coreLogger,
|
|
11133
11133
|
createMicGainNode: enableGainNode
|
|
11134
11134
|
};
|
|
11135
11135
|
webRtcProvider.configure(webRtcConf);
|
|
@@ -11146,7 +11146,7 @@ var init = function init(options) {
|
|
|
11146
11146
|
var webRtcConf = {
|
|
11147
11147
|
constraints: options.constraints || getDefaultMediaConstraints(),
|
|
11148
11148
|
extensionId: options.screenSharingExtensionId,
|
|
11149
|
-
logger:
|
|
11149
|
+
logger: coreLogger
|
|
11150
11150
|
};
|
|
11151
11151
|
webRtcProvider.configure(webRtcConf); // Just reorder media provider list
|
|
11152
11152
|
|
|
@@ -11174,7 +11174,7 @@ var init = function init(options) {
|
|
|
11174
11174
|
var flashConf = {
|
|
11175
11175
|
constraints: options.constraints || getDefaultMediaConstraints(),
|
|
11176
11176
|
flashMediaProviderSwfLocation: options.flashMediaProviderSwfLocation,
|
|
11177
|
-
logger:
|
|
11177
|
+
logger: coreLogger
|
|
11178
11178
|
};
|
|
11179
11179
|
flashProvider.configure(flashConf);
|
|
11180
11180
|
}
|
|
@@ -11198,7 +11198,7 @@ var init = function init(options) {
|
|
|
11198
11198
|
receiverLocation: options.receiverLocation,
|
|
11199
11199
|
decoderLocation: options.decoderLocation,
|
|
11200
11200
|
audioContext: audioContext,
|
|
11201
|
-
logger:
|
|
11201
|
+
logger: coreLogger
|
|
11202
11202
|
};
|
|
11203
11203
|
websocketProvider.configure(wsConf);
|
|
11204
11204
|
} //check at least 1 provider available
|
|
@@ -11220,7 +11220,7 @@ var init = function init(options) {
|
|
|
11220
11220
|
MediaProvider = _MediaProvider;
|
|
11221
11221
|
}
|
|
11222
11222
|
} else {
|
|
11223
|
-
|
|
11223
|
+
corelogger.warn(LOG_PREFIX, "Preferred media provider is not available.");
|
|
11224
11224
|
}
|
|
11225
11225
|
}
|
|
11226
11226
|
|
|
@@ -11248,7 +11248,7 @@ var init = function init(options) {
|
|
|
11248
11248
|
options.mediaProvidersReadyCallback(Object.keys(MediaProvider));
|
|
11249
11249
|
}
|
|
11250
11250
|
|
|
11251
|
-
|
|
11251
|
+
coreLogger.info(LOG_PREFIX, "Initialized");
|
|
11252
11252
|
initialized = true;
|
|
11253
11253
|
}
|
|
11254
11254
|
};
|
|
@@ -11287,7 +11287,7 @@ var playFirstVideo = function playFirstVideo(display, isLocal, src) {
|
|
|
11287
11287
|
}
|
|
11288
11288
|
};
|
|
11289
11289
|
/**
|
|
11290
|
-
* Get logger
|
|
11290
|
+
* Get core logger
|
|
11291
11291
|
*
|
|
11292
11292
|
* @returns {Object} Logger
|
|
11293
11293
|
* @memberof Flashphoner
|
|
@@ -11298,7 +11298,7 @@ var getLogger = function getLogger() {
|
|
|
11298
11298
|
if (!initialized) {
|
|
11299
11299
|
console.warn("Initialize API first.");
|
|
11300
11300
|
} else {
|
|
11301
|
-
return
|
|
11301
|
+
return coreLogger;
|
|
11302
11302
|
}
|
|
11303
11303
|
};
|
|
11304
11304
|
/**
|
|
@@ -11471,6 +11471,31 @@ var getSessions = function getSessions() {
|
|
|
11471
11471
|
|
|
11472
11472
|
var getSession = function getSession(id) {
|
|
11473
11473
|
return sessions[id];
|
|
11474
|
+
}; // Get logger configuration from options
|
|
11475
|
+
|
|
11476
|
+
|
|
11477
|
+
var getLoggerConf = function getLoggerConf(loggerOptions) {
|
|
11478
|
+
var conf = loggerOptions || loggerConf;
|
|
11479
|
+
|
|
11480
|
+
if (loggerOptions !== null) {
|
|
11481
|
+
conf.enableLogs = true;
|
|
11482
|
+
}
|
|
11483
|
+
|
|
11484
|
+
return conf;
|
|
11485
|
+
}; // Create a new logger object
|
|
11486
|
+
|
|
11487
|
+
|
|
11488
|
+
var createLogger = function createLogger(loggerOptions) {
|
|
11489
|
+
var parentLogger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : coreLogger;
|
|
11490
|
+
var newLogger = parentLogger;
|
|
11491
|
+
|
|
11492
|
+
if (newLogger === undefined || loggerOptions != undefined) {
|
|
11493
|
+
var loggerConf = getLoggerConf(loggerOptions);
|
|
11494
|
+
newLogger = new LoggerObject();
|
|
11495
|
+
newLogger.init(loggerConf.severity || "INFO", loggerConf.push || false, loggerConf.customLogger, loggerConf.enableLogs);
|
|
11496
|
+
}
|
|
11497
|
+
|
|
11498
|
+
return newLogger;
|
|
11474
11499
|
};
|
|
11475
11500
|
/**
|
|
11476
11501
|
* Create new session and connect to server.
|
|
@@ -11490,6 +11515,7 @@ var getSession = function getSession(id) {
|
|
|
11490
11515
|
* @param {Integer=} options.pingInterval Server ping interval in milliseconds [0]
|
|
11491
11516
|
* @param {Integer=} options.receiveProbes A maximum subsequental pings received missing count [0]
|
|
11492
11517
|
* @param {Integer=} options.probesInterval Interval to check subsequental pings received [0]
|
|
11518
|
+
* @param {Object=} options.logger Session logger options
|
|
11493
11519
|
* @returns {Session} Created session
|
|
11494
11520
|
* @throws {Error} Error if API is not initialized
|
|
11495
11521
|
* @throws {TypeError} Error if options.urlServer is not specified
|
|
@@ -11504,8 +11530,12 @@ var createSession = function createSession(options) {
|
|
|
11504
11530
|
|
|
11505
11531
|
if (!options || !options.urlServer) {
|
|
11506
11532
|
throw new TypeError("options.urlServer must be provided");
|
|
11507
|
-
}
|
|
11533
|
+
} // Set session logger #WCS-2434
|
|
11534
|
+
|
|
11535
|
+
|
|
11536
|
+
var sessionLogger = createLogger(options.logger); // Override logger for all low level operations
|
|
11508
11537
|
|
|
11538
|
+
var logger = sessionLogger;
|
|
11509
11539
|
var id_ = uuid_v1();
|
|
11510
11540
|
var sessionStatus = SESSION_STATUS.PENDING;
|
|
11511
11541
|
var urlServer = options.urlServer;
|
|
@@ -11611,7 +11641,7 @@ var createSession = function createSession(options) {
|
|
|
11611
11641
|
if (timeout != undefined && timeout > 0) {
|
|
11612
11642
|
connectionTimeout = setTimeout(function () {
|
|
11613
11643
|
if (wsConnection.readyState == 0) {
|
|
11614
|
-
|
|
11644
|
+
logger.warn(LOG_PREFIX, "WS connection timeout");
|
|
11615
11645
|
wsConnection.close();
|
|
11616
11646
|
}
|
|
11617
11647
|
}, timeout);
|
|
@@ -11635,7 +11665,7 @@ var createSession = function createSession(options) {
|
|
|
11635
11665
|
mediaProviders: Object.keys(MediaProvider),
|
|
11636
11666
|
keepAlive: keepAlive,
|
|
11637
11667
|
authToken: authToken,
|
|
11638
|
-
clientVersion: "2.0.
|
|
11668
|
+
clientVersion: "2.0.215",
|
|
11639
11669
|
clientOSVersion: window.navigator.appVersion,
|
|
11640
11670
|
clientBrowserVersion: window.navigator.userAgent,
|
|
11641
11671
|
msePacketizationVersion: 2,
|
|
@@ -11941,6 +11971,7 @@ var createSession = function createSession(options) {
|
|
|
11941
11971
|
* @param {Array<string>=} options.sipSDP Array of custom SDP params (ex. bandwidth (b=))
|
|
11942
11972
|
* @param {Array<string>=} options.sipHeaders Array of custom SIP headers
|
|
11943
11973
|
* @param {string=} options.videoContentHint Video content hint for browser ('detail' by default to maintain resolution), {@link Flashphoner.constants.CONTENT_HINT_TYPE}
|
|
11974
|
+
* @param {Object=} options.logger Call logger options
|
|
11944
11975
|
* @param {sdpHook} sdpHook The callback that handles sdp from the server
|
|
11945
11976
|
* @returns {Call} Call
|
|
11946
11977
|
* @throws {TypeError} Error if no options provided
|
|
@@ -11953,15 +11984,18 @@ var createSession = function createSession(options) {
|
|
|
11953
11984
|
var createCall = function createCall(options) {
|
|
11954
11985
|
//check session state
|
|
11955
11986
|
if (sessionStatus !== SESSION_STATUS.REGISTERED && sessionStatus !== SESSION_STATUS.ESTABLISHED) {
|
|
11956
|
-
|
|
11957
|
-
throw new Error('Invalid session state');
|
|
11987
|
+
throw new Error('Invalid session state ' + sessionStatus);
|
|
11958
11988
|
} //check options
|
|
11959
11989
|
|
|
11960
11990
|
|
|
11961
11991
|
if (!options) {
|
|
11962
11992
|
throw new TypeError("options must be provided");
|
|
11963
|
-
}
|
|
11993
|
+
} // Set call logger #WCS-2434
|
|
11994
|
+
|
|
11995
|
+
|
|
11996
|
+
var callLogger = createLogger(options.logger, sessionLogger); // Override logger for all low level operations
|
|
11964
11997
|
|
|
11998
|
+
var logger = callLogger;
|
|
11965
11999
|
var login = appKey == 'clickToCallApp' ? '' : cConfig.sipLogin;
|
|
11966
12000
|
var caller_ = options.incoming ? options.caller : login;
|
|
11967
12001
|
var callee_ = options.callee;
|
|
@@ -12107,7 +12141,8 @@ var createSession = function createSession(options) {
|
|
|
12107
12141
|
constraints: constraints,
|
|
12108
12142
|
connectionConfig: mediaOptions,
|
|
12109
12143
|
audioOutputId: audioOutputId,
|
|
12110
|
-
videoContentHint: videoContentHint
|
|
12144
|
+
videoContentHint: videoContentHint,
|
|
12145
|
+
logger: logger
|
|
12111
12146
|
}).then(function (newConnection) {
|
|
12112
12147
|
mediaConnection = newConnection;
|
|
12113
12148
|
return mediaConnection.createOffer({
|
|
@@ -12693,7 +12728,7 @@ var createSession = function createSession(options) {
|
|
|
12693
12728
|
/**
|
|
12694
12729
|
* Get call info
|
|
12695
12730
|
* @returns {string} Info
|
|
12696
|
-
* @memberof
|
|
12731
|
+
* @memberof Call
|
|
12697
12732
|
* @inner
|
|
12698
12733
|
*/
|
|
12699
12734
|
|
|
@@ -12704,7 +12739,7 @@ var createSession = function createSession(options) {
|
|
|
12704
12739
|
/**
|
|
12705
12740
|
* Get stream error info
|
|
12706
12741
|
* @returns {string} Error info
|
|
12707
|
-
* @memberof
|
|
12742
|
+
* @memberof Call
|
|
12708
12743
|
* @inner
|
|
12709
12744
|
*/
|
|
12710
12745
|
|
|
@@ -12712,6 +12747,17 @@ var createSession = function createSession(options) {
|
|
|
12712
12747
|
var getErrorInfo = function getErrorInfo() {
|
|
12713
12748
|
return errorInfo_;
|
|
12714
12749
|
};
|
|
12750
|
+
/**
|
|
12751
|
+
* Get call logger
|
|
12752
|
+
*
|
|
12753
|
+
* @returns {Object} Logger
|
|
12754
|
+
* @memberof Call
|
|
12755
|
+
*/
|
|
12756
|
+
|
|
12757
|
+
|
|
12758
|
+
var getLogger = function getLogger() {
|
|
12759
|
+
return callLogger;
|
|
12760
|
+
};
|
|
12715
12761
|
|
|
12716
12762
|
call.call = call_;
|
|
12717
12763
|
call.answer = answer;
|
|
@@ -12743,6 +12789,7 @@ var createSession = function createSession(options) {
|
|
|
12743
12789
|
call.switchMic = switchMic;
|
|
12744
12790
|
call.switchToScreen = switchToScreen;
|
|
12745
12791
|
call.switchToCam = switchToCam;
|
|
12792
|
+
call.getLogger = getLogger;
|
|
12746
12793
|
calls[id_] = call;
|
|
12747
12794
|
return call;
|
|
12748
12795
|
};
|
|
@@ -12789,6 +12836,7 @@ var createSession = function createSession(options) {
|
|
|
12789
12836
|
* @param {string=} options.useCanvasMediaStream EXPERIMENTAL: when publish bind browser's media stream to the canvas. It can be useful for image filtering
|
|
12790
12837
|
* @param {string=} options.videoContentHint Video content hint for browser ('detail' by default to maintain resolution), {@link Flashphoner.constants.CONTENT_HINT_TYPE}
|
|
12791
12838
|
* @param {Boolean=} options.unmutePlayOnStart Unmute playback on start. May be used after user gesture only, so set 'unmutePlayOnStart: false' for autoplay
|
|
12839
|
+
* @param {Object=} options.logger Stream logger options
|
|
12792
12840
|
* @param {sdpHook} sdpHook The callback that handles sdp from the server
|
|
12793
12841
|
* @returns {Stream} Stream
|
|
12794
12842
|
* @throws {TypeError} Error if no options provided
|
|
@@ -12804,7 +12852,7 @@ var createSession = function createSession(options) {
|
|
|
12804
12852
|
var availableCallbacks = []; //check session state
|
|
12805
12853
|
|
|
12806
12854
|
if (sessionStatus !== SESSION_STATUS.ESTABLISHED) {
|
|
12807
|
-
throw new Error('Invalid session state');
|
|
12855
|
+
throw new Error('Invalid session state ' + sessionStatus);
|
|
12808
12856
|
} //check options
|
|
12809
12857
|
|
|
12810
12858
|
|
|
@@ -12814,8 +12862,12 @@ var createSession = function createSession(options) {
|
|
|
12814
12862
|
|
|
12815
12863
|
if (!options.name) {
|
|
12816
12864
|
throw new TypeError("options.name must be provided");
|
|
12817
|
-
}
|
|
12865
|
+
} // Set stream logger #WCS-2434
|
|
12866
|
+
|
|
12818
12867
|
|
|
12868
|
+
var streamLogger = createLogger(options.logger, sessionLogger); // Override logger for all low level operations
|
|
12869
|
+
|
|
12870
|
+
var logger = streamLogger;
|
|
12819
12871
|
var clientKf = new KalmanFilter();
|
|
12820
12872
|
var serverKf = new KalmanFilter();
|
|
12821
12873
|
var id_ = uuid_v1();
|
|
@@ -13059,7 +13111,7 @@ var createSession = function createSession(options) {
|
|
|
13059
13111
|
logger.debug(LOG_PREFIX, "Play stream " + name_);
|
|
13060
13112
|
|
|
13061
13113
|
if (status_ !== STREAM_STATUS.NEW) {
|
|
13062
|
-
throw new Error("Invalid stream state");
|
|
13114
|
+
throw new Error("Invalid stream state " + status_);
|
|
13063
13115
|
}
|
|
13064
13116
|
|
|
13065
13117
|
status_ = STREAM_STATUS.PENDING; //create mediaProvider connection
|
|
@@ -13078,7 +13130,8 @@ var createSession = function createSession(options) {
|
|
|
13078
13130
|
audioOutputId: audioOutputId,
|
|
13079
13131
|
remoteVideo: remoteVideo,
|
|
13080
13132
|
playoutDelay: playoutDelay,
|
|
13081
|
-
unmutePlayOnStart: unmutePlayOnStart
|
|
13133
|
+
unmutePlayOnStart: unmutePlayOnStart,
|
|
13134
|
+
logger: logger
|
|
13082
13135
|
}, streamRefreshHandlers[id_]).then(function (newConnection) {
|
|
13083
13136
|
mediaConnection = newConnection;
|
|
13084
13137
|
|
|
@@ -13142,7 +13195,7 @@ var createSession = function createSession(options) {
|
|
|
13142
13195
|
logger.debug(LOG_PREFIX, "Publish stream " + name_);
|
|
13143
13196
|
|
|
13144
13197
|
if (status_ !== STREAM_STATUS.NEW) {
|
|
13145
|
-
throw new Error("Invalid stream state");
|
|
13198
|
+
throw new Error("Invalid stream state " + status_);
|
|
13146
13199
|
}
|
|
13147
13200
|
|
|
13148
13201
|
status_ = STREAM_STATUS.PENDING;
|
|
@@ -13176,7 +13229,8 @@ var createSession = function createSession(options) {
|
|
|
13176
13229
|
connectionConfig: mediaOptions,
|
|
13177
13230
|
connectionConstraints: mediaConnectionConstraints,
|
|
13178
13231
|
customStream: constraints && constraints.customStream ? constraints.customStream : false,
|
|
13179
|
-
videoContentHint: videoContentHint
|
|
13232
|
+
videoContentHint: videoContentHint,
|
|
13233
|
+
logger: logger
|
|
13180
13234
|
}).then(function (newConnection) {
|
|
13181
13235
|
mediaConnection = newConnection;
|
|
13182
13236
|
return mediaConnection.createOffer({
|
|
@@ -13806,6 +13860,17 @@ var createSession = function createSession(options) {
|
|
|
13806
13860
|
availableCallbacks.push(promise);
|
|
13807
13861
|
});
|
|
13808
13862
|
};
|
|
13863
|
+
/**
|
|
13864
|
+
* Get stream logger
|
|
13865
|
+
*
|
|
13866
|
+
* @returns {Object} Logger
|
|
13867
|
+
* @memberof Stream
|
|
13868
|
+
*/
|
|
13869
|
+
|
|
13870
|
+
|
|
13871
|
+
var getLogger = function getLogger() {
|
|
13872
|
+
return streamLogger;
|
|
13873
|
+
};
|
|
13809
13874
|
|
|
13810
13875
|
stream.play = play;
|
|
13811
13876
|
stream.publish = publish;
|
|
@@ -13845,6 +13910,7 @@ var createSession = function createSession(options) {
|
|
|
13845
13910
|
stream.switchToScreen = switchToScreen;
|
|
13846
13911
|
stream.switchToCam = switchToCam;
|
|
13847
13912
|
stream.sendData = sendData;
|
|
13913
|
+
stream.getLogger = getLogger;
|
|
13848
13914
|
streams[id_] = stream;
|
|
13849
13915
|
return stream;
|
|
13850
13916
|
};
|
|
@@ -14053,6 +14119,17 @@ var createSession = function createSession(options) {
|
|
|
14053
14119
|
}
|
|
14054
14120
|
|
|
14055
14121
|
return sdp;
|
|
14122
|
+
};
|
|
14123
|
+
/**
|
|
14124
|
+
* Get session logger
|
|
14125
|
+
*
|
|
14126
|
+
* @returns {Object} Logger
|
|
14127
|
+
* @memberof Session
|
|
14128
|
+
*/
|
|
14129
|
+
|
|
14130
|
+
|
|
14131
|
+
var getLogger = function getLogger() {
|
|
14132
|
+
return sessionLogger;
|
|
14056
14133
|
}; //export Session
|
|
14057
14134
|
|
|
14058
14135
|
|
|
@@ -14068,7 +14145,8 @@ var createSession = function createSession(options) {
|
|
|
14068
14145
|
session.submitBugReport = submitBugReport;
|
|
14069
14146
|
session.startDebug = startDebug;
|
|
14070
14147
|
session.stopDebug = stopDebug;
|
|
14071
|
-
session.on = on;
|
|
14148
|
+
session.on = on;
|
|
14149
|
+
session.getLogger = getLogger; //save interface to global map
|
|
14072
14150
|
|
|
14073
14151
|
sessions[id_] = session;
|
|
14074
14152
|
return session;
|
|
@@ -14114,165 +14192,168 @@ function _typeof(obj){"@babel/helpers - typeof";return _typeof="function"==typeo
|
|
|
14114
14192
|
},{}],44:[function(require,module,exports){
|
|
14115
14193
|
'use strict';
|
|
14116
14194
|
|
|
14117
|
-
|
|
14118
|
-
|
|
14119
|
-
|
|
14120
|
-
|
|
14121
|
-
}
|
|
14195
|
+
var isEmptyObject = function isEmptyObject(obj) {
|
|
14196
|
+
for (var name in obj) {
|
|
14197
|
+
return false;
|
|
14198
|
+
}
|
|
14122
14199
|
|
|
14123
|
-
|
|
14124
|
-
|
|
14200
|
+
return true;
|
|
14201
|
+
};
|
|
14202
|
+
/**
|
|
14203
|
+
* Copy values of object own properties to array.
|
|
14204
|
+
*
|
|
14205
|
+
* @param obj
|
|
14206
|
+
* @returns {Array}
|
|
14207
|
+
*/
|
|
14125
14208
|
|
|
14126
|
-
/**
|
|
14127
|
-
* Copy values of object own properties to array.
|
|
14128
|
-
*
|
|
14129
|
-
* @param obj
|
|
14130
|
-
* @returns {Array}
|
|
14131
|
-
*/
|
|
14132
|
-
copyObjectToArray: function copyObjectToArray(obj) {
|
|
14133
|
-
var ret = [];
|
|
14134
14209
|
|
|
14135
|
-
|
|
14136
|
-
|
|
14137
|
-
|
|
14138
|
-
|
|
14210
|
+
var copyObjectToArray = function copyObjectToArray(obj) {
|
|
14211
|
+
var ret = [];
|
|
14212
|
+
|
|
14213
|
+
for (var prop in obj) {
|
|
14214
|
+
if (obj.hasOwnProperty(prop)) {
|
|
14215
|
+
ret.push(obj[prop]);
|
|
14139
14216
|
}
|
|
14217
|
+
}
|
|
14140
14218
|
|
|
14141
|
-
|
|
14142
|
-
|
|
14219
|
+
return ret;
|
|
14220
|
+
};
|
|
14221
|
+
/**
|
|
14222
|
+
* Copy src properties to dst object.
|
|
14223
|
+
* Will overwrite dst prop with src prop in case of dst prop exist.
|
|
14224
|
+
*/
|
|
14143
14225
|
|
|
14144
|
-
|
|
14145
|
-
|
|
14146
|
-
|
|
14147
|
-
|
|
14148
|
-
|
|
14149
|
-
for (var prop in src) {
|
|
14150
|
-
if (src.hasOwnProperty(prop)) {
|
|
14151
|
-
dst[prop] = src[prop];
|
|
14152
|
-
}
|
|
14226
|
+
|
|
14227
|
+
var copyObjectPropsToAnotherObject = function copyObjectPropsToAnotherObject(src, dst) {
|
|
14228
|
+
for (var prop in src) {
|
|
14229
|
+
if (src.hasOwnProperty(prop)) {
|
|
14230
|
+
dst[prop] = src[prop];
|
|
14153
14231
|
}
|
|
14154
|
-
}
|
|
14155
|
-
|
|
14156
|
-
var result = {};
|
|
14232
|
+
}
|
|
14233
|
+
};
|
|
14157
14234
|
|
|
14158
|
-
|
|
14159
|
-
|
|
14160
|
-
* Report types: googComponent, googCandidatePair, googCertificate, googLibjingleSession, googTrack, ssrc
|
|
14161
|
-
*/
|
|
14162
|
-
var gotResult = false;
|
|
14235
|
+
var processRtcStatsReport = function processRtcStatsReport(browser, report) {
|
|
14236
|
+
var result = {};
|
|
14163
14237
|
|
|
14164
|
-
|
|
14165
|
-
|
|
14166
|
-
|
|
14167
|
-
|
|
14168
|
-
|
|
14169
|
-
}
|
|
14238
|
+
if (browser == "chrome") {
|
|
14239
|
+
/**
|
|
14240
|
+
* Report types: googComponent, googCandidatePair, googCertificate, googLibjingleSession, googTrack, ssrc
|
|
14241
|
+
*/
|
|
14242
|
+
var gotResult = false;
|
|
14170
14243
|
|
|
14171
|
-
|
|
14244
|
+
if (report.type && report.type == "googCandidatePair") {
|
|
14245
|
+
//check if this is active pair
|
|
14246
|
+
if (report.googActiveConnection == "true") {
|
|
14172
14247
|
gotResult = true;
|
|
14173
14248
|
}
|
|
14249
|
+
}
|
|
14174
14250
|
|
|
14175
|
-
|
|
14176
|
-
|
|
14177
|
-
|
|
14178
|
-
|
|
14179
|
-
|
|
14251
|
+
if (report.type && report.type == "ssrc") {
|
|
14252
|
+
gotResult = true;
|
|
14253
|
+
}
|
|
14254
|
+
|
|
14255
|
+
if (gotResult) {
|
|
14256
|
+
for (var k in report) {
|
|
14257
|
+
if (report.hasOwnProperty(k)) {
|
|
14258
|
+
result[k] = report[k];
|
|
14180
14259
|
}
|
|
14181
14260
|
}
|
|
14261
|
+
}
|
|
14182
14262
|
|
|
14183
|
-
|
|
14184
|
-
|
|
14185
|
-
|
|
14186
|
-
|
|
14187
|
-
|
|
14188
|
-
|
|
14189
|
-
|
|
14263
|
+
return result;
|
|
14264
|
+
} else if (browser == "firefox") {
|
|
14265
|
+
/**
|
|
14266
|
+
* RTCStatsReport http://mxr.mozilla.org/mozilla-central/source/dom/webidl/RTCStatsReport.webidl
|
|
14267
|
+
*/
|
|
14268
|
+
if (report.type && (report.type == "outboundrtp" || report.type == "inboundrtp") && report.id.indexOf("rtcp") == -1) {
|
|
14269
|
+
result = {};
|
|
14190
14270
|
|
|
14191
|
-
|
|
14192
|
-
|
|
14193
|
-
|
|
14194
|
-
}
|
|
14271
|
+
for (var k in report) {
|
|
14272
|
+
if (report.hasOwnProperty(k)) {
|
|
14273
|
+
result[k] = report[k];
|
|
14195
14274
|
}
|
|
14196
14275
|
}
|
|
14197
|
-
|
|
14198
|
-
return result;
|
|
14199
|
-
} else {
|
|
14200
|
-
return result;
|
|
14201
14276
|
}
|
|
14202
14277
|
|
|
14203
|
-
;
|
|
14278
|
+
return result;
|
|
14279
|
+
} else {
|
|
14280
|
+
return result;
|
|
14281
|
+
}
|
|
14282
|
+
};
|
|
14283
|
+
|
|
14284
|
+
var Browser = {
|
|
14285
|
+
isIE: function isIE() {
|
|
14286
|
+
return (
|
|
14287
|
+
/*@cc_on!@*/
|
|
14288
|
+
false || !!document.documentMode
|
|
14289
|
+
);
|
|
14204
14290
|
},
|
|
14205
|
-
|
|
14206
|
-
|
|
14207
|
-
return (
|
|
14208
|
-
/*@cc_on!@*/
|
|
14209
|
-
false || !!document.documentMode
|
|
14210
|
-
);
|
|
14211
|
-
},
|
|
14212
|
-
isFirefox: function isFirefox() {
|
|
14213
|
-
return typeof InstallTrigger !== 'undefined';
|
|
14214
|
-
},
|
|
14215
|
-
isChrome: function isChrome() {
|
|
14216
|
-
return !!window.chrome && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent);
|
|
14217
|
-
},
|
|
14218
|
-
isEdge: function isEdge() {
|
|
14219
|
-
return !isIE && !!window.StyleMedia;
|
|
14220
|
-
},
|
|
14221
|
-
isOpera: function isOpera() {
|
|
14222
|
-
return !!window.opr && !!opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
|
14223
|
-
},
|
|
14224
|
-
isiOS: function isiOS() {
|
|
14225
|
-
return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
|
|
14226
|
-
},
|
|
14227
|
-
isSafari: function isSafari() {
|
|
14228
|
-
var userAgent = navigator.userAgent.toLowerCase();
|
|
14229
|
-
return /(safari|applewebkit)/i.test(userAgent) && !userAgent.includes("chrome") && !userAgent.includes("android");
|
|
14230
|
-
},
|
|
14231
|
-
isAndroid: function isAndroid() {
|
|
14232
|
-
return navigator.userAgent.toLowerCase().indexOf("android") > -1;
|
|
14233
|
-
},
|
|
14234
|
-
isSafariWebRTC: function isSafariWebRTC() {
|
|
14235
|
-
return navigator.mediaDevices && this.isSafari();
|
|
14236
|
-
},
|
|
14237
|
-
isSamsungBrowser: function isSamsungBrowser() {
|
|
14238
|
-
return /SamsungBrowser/i.test(navigator.userAgent);
|
|
14239
|
-
},
|
|
14240
|
-
isAndroidFirefox: function isAndroidFirefox() {
|
|
14241
|
-
return this.isAndroid() && /Firefox/i.test(navigator.userAgent);
|
|
14242
|
-
}
|
|
14291
|
+
isFirefox: function isFirefox() {
|
|
14292
|
+
return typeof InstallTrigger !== 'undefined';
|
|
14243
14293
|
},
|
|
14244
|
-
|
|
14245
|
-
|
|
14246
|
-
|
|
14247
|
-
|
|
14248
|
-
|
|
14249
|
-
|
|
14250
|
-
|
|
14251
|
-
|
|
14252
|
-
|
|
14253
|
-
|
|
14254
|
-
|
|
14255
|
-
|
|
14294
|
+
isChrome: function isChrome() {
|
|
14295
|
+
return !!window.chrome && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent);
|
|
14296
|
+
},
|
|
14297
|
+
isEdge: function isEdge() {
|
|
14298
|
+
return !isIE && !!window.StyleMedia;
|
|
14299
|
+
},
|
|
14300
|
+
isOpera: function isOpera() {
|
|
14301
|
+
return !!window.opr && !!opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
|
14302
|
+
},
|
|
14303
|
+
isiOS: function isiOS() {
|
|
14304
|
+
return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
|
|
14305
|
+
},
|
|
14306
|
+
isSafari: function isSafari() {
|
|
14307
|
+
var userAgent = navigator.userAgent.toLowerCase();
|
|
14308
|
+
return /(safari|applewebkit)/i.test(userAgent) && !userAgent.includes("chrome") && !userAgent.includes("android");
|
|
14309
|
+
},
|
|
14310
|
+
isAndroid: function isAndroid() {
|
|
14311
|
+
return navigator.userAgent.toLowerCase().indexOf("android") > -1;
|
|
14312
|
+
},
|
|
14313
|
+
isSafariWebRTC: function isSafariWebRTC() {
|
|
14314
|
+
return navigator.mediaDevices && this.isSafari();
|
|
14315
|
+
},
|
|
14316
|
+
isSamsungBrowser: function isSamsungBrowser() {
|
|
14317
|
+
return /SamsungBrowser/i.test(navigator.userAgent);
|
|
14318
|
+
},
|
|
14319
|
+
isAndroidFirefox: function isAndroidFirefox() {
|
|
14320
|
+
return this.isAndroid() && /Firefox/i.test(navigator.userAgent);
|
|
14321
|
+
}
|
|
14322
|
+
};
|
|
14323
|
+
var SDP = {
|
|
14324
|
+
matchPrefix: function matchPrefix(sdp, prefix) {
|
|
14325
|
+
var parts = sdp.trim().split('\n').map(function (line) {
|
|
14326
|
+
return line.trim();
|
|
14327
|
+
});
|
|
14328
|
+
return parts.filter(function (line) {
|
|
14329
|
+
return line.indexOf(prefix) === 0;
|
|
14330
|
+
});
|
|
14331
|
+
},
|
|
14332
|
+
writeFmtp: function writeFmtp(sdp, param, codec) {
|
|
14333
|
+
var sdpArray = sdp.split("\n");
|
|
14334
|
+
var i;
|
|
14256
14335
|
|
|
14257
|
-
|
|
14258
|
-
|
|
14259
|
-
|
|
14260
|
-
|
|
14261
|
-
|
|
14336
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
14337
|
+
if (sdpArray[i].search(codec) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
|
|
14338
|
+
sdpArray[i] += "\na=fmtp:" + sdpArray[i].match(/[0-9]+/)[0] + " " + param + "\r";
|
|
14339
|
+
}
|
|
14340
|
+
} //normalize sdp after modifications
|
|
14262
14341
|
|
|
14263
14342
|
|
|
14264
|
-
|
|
14343
|
+
var result = "";
|
|
14265
14344
|
|
|
14266
|
-
|
|
14267
|
-
|
|
14268
|
-
|
|
14269
|
-
}
|
|
14345
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
14346
|
+
if (sdpArray[i] != "") {
|
|
14347
|
+
result += sdpArray[i] + "\n";
|
|
14270
14348
|
}
|
|
14271
|
-
|
|
14272
|
-
return result;
|
|
14273
14349
|
}
|
|
14274
|
-
|
|
14275
|
-
|
|
14350
|
+
|
|
14351
|
+
return result;
|
|
14352
|
+
}
|
|
14353
|
+
};
|
|
14354
|
+
|
|
14355
|
+
var logger = function logger() {
|
|
14356
|
+
return {
|
|
14276
14357
|
init: function init(verbosity, enablePushLogs, customLogger, enableLogs) {
|
|
14277
14358
|
switch (verbosity.toUpperCase()) {
|
|
14278
14359
|
case "DEBUG":
|
|
@@ -14453,92 +14534,104 @@ module.exports = {
|
|
|
14453
14534
|
default:
|
|
14454
14535
|
this.verbosity = 2;
|
|
14455
14536
|
}
|
|
14456
|
-
|
|
14457
|
-
;
|
|
14458
14537
|
}
|
|
14459
|
-
}
|
|
14460
|
-
|
|
14461
|
-
if (!codecs.length) return sdp;
|
|
14462
|
-
var sdpArray = sdp.split("\n");
|
|
14463
|
-
var codecsArray = codecs.split(","); //search and delete codecs line
|
|
14538
|
+
};
|
|
14539
|
+
};
|
|
14464
14540
|
|
|
14465
|
-
|
|
14466
|
-
|
|
14541
|
+
var stripCodecs = function stripCodecs(sdp, codecs) {
|
|
14542
|
+
if (!codecs.length) return sdp;
|
|
14543
|
+
var sdpArray = sdp.split("\n");
|
|
14544
|
+
var codecsArray = codecs.split(","); //search and delete codecs line
|
|
14467
14545
|
|
|
14468
|
-
|
|
14469
|
-
|
|
14546
|
+
var pt = [];
|
|
14547
|
+
var i;
|
|
14470
14548
|
|
|
14471
|
-
|
|
14472
|
-
|
|
14473
|
-
|
|
14474
|
-
|
|
14475
|
-
|
|
14476
|
-
|
|
14549
|
+
for (var p = 0; p < codecsArray.length; p++) {
|
|
14550
|
+
console.log("Searching for codec " + codecsArray[p]);
|
|
14551
|
+
|
|
14552
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
14553
|
+
if (sdpArray[i].search(new RegExp(codecsArray[p], 'i')) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
|
|
14554
|
+
console.log(codecsArray[p] + " detected");
|
|
14555
|
+
pt.push(sdpArray[i].match(/[0-9]+/)[0]);
|
|
14556
|
+
sdpArray[i] = "";
|
|
14477
14557
|
}
|
|
14478
14558
|
}
|
|
14559
|
+
}
|
|
14479
14560
|
|
|
14480
|
-
|
|
14481
|
-
|
|
14482
|
-
|
|
14483
|
-
|
|
14484
|
-
|
|
14485
|
-
|
|
14486
|
-
}
|
|
14561
|
+
if (pt.length) {
|
|
14562
|
+
//searching for fmtp
|
|
14563
|
+
for (p = 0; p < pt.length; p++) {
|
|
14564
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
14565
|
+
if (sdpArray[i].search("a=fmtp:" + pt[p]) != -1 || sdpArray[i].search("a=rtcp-fb:" + pt[p]) != -1) {
|
|
14566
|
+
sdpArray[i] = "";
|
|
14487
14567
|
}
|
|
14488
|
-
}
|
|
14568
|
+
}
|
|
14569
|
+
} //delete entries from m= line
|
|
14489
14570
|
|
|
14490
14571
|
|
|
14491
|
-
|
|
14492
|
-
|
|
14493
|
-
|
|
14494
|
-
|
|
14572
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
14573
|
+
if (sdpArray[i].search("m=audio") != -1 || sdpArray[i].search("m=video") != -1) {
|
|
14574
|
+
var mLineSplitted = sdpArray[i].split(" ");
|
|
14575
|
+
var newMLine = "";
|
|
14495
14576
|
|
|
14496
|
-
|
|
14497
|
-
|
|
14498
|
-
|
|
14577
|
+
for (var m = 0; m < mLineSplitted.length; m++) {
|
|
14578
|
+
if (pt.indexOf(mLineSplitted[m].trim()) == -1 || m <= 2) {
|
|
14579
|
+
newMLine += mLineSplitted[m];
|
|
14499
14580
|
|
|
14500
|
-
|
|
14501
|
-
|
|
14502
|
-
}
|
|
14581
|
+
if (m < mLineSplitted.length - 1) {
|
|
14582
|
+
newMLine = newMLine + " ";
|
|
14503
14583
|
}
|
|
14504
14584
|
}
|
|
14505
|
-
|
|
14506
|
-
sdpArray[i] = newMLine;
|
|
14507
14585
|
}
|
|
14586
|
+
|
|
14587
|
+
sdpArray[i] = newMLine;
|
|
14508
14588
|
}
|
|
14509
|
-
}
|
|
14589
|
+
}
|
|
14590
|
+
} //normalize sdp after modifications
|
|
14510
14591
|
|
|
14511
14592
|
|
|
14512
|
-
|
|
14593
|
+
var result = "";
|
|
14513
14594
|
|
|
14514
|
-
|
|
14515
|
-
|
|
14516
|
-
|
|
14517
|
-
}
|
|
14595
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
14596
|
+
if (sdpArray[i] != "") {
|
|
14597
|
+
result += sdpArray[i] + "\n";
|
|
14518
14598
|
}
|
|
14599
|
+
}
|
|
14519
14600
|
|
|
14520
|
-
|
|
14521
|
-
|
|
14522
|
-
getCurrentCodecAndSampleRate: function getCurrentCodecAndSampleRate(sdp, mediaType) {
|
|
14523
|
-
var rows = sdp.split("\n");
|
|
14524
|
-
var codecPt;
|
|
14601
|
+
return result;
|
|
14602
|
+
};
|
|
14525
14603
|
|
|
14526
|
-
|
|
14527
|
-
|
|
14528
|
-
|
|
14529
|
-
ret.name = rows[i].split(" ")[1].split("/")[0];
|
|
14530
|
-
ret.sampleRate = rows[i].split(" ")[1].split("/")[1];
|
|
14531
|
-
return ret;
|
|
14532
|
-
} //WCS-2136. WebRTC statistics doesn't work for VP8
|
|
14604
|
+
var getCurrentCodecAndSampleRate = function getCurrentCodecAndSampleRate(sdp, mediaType) {
|
|
14605
|
+
var rows = sdp.split("\n");
|
|
14606
|
+
var codecPt;
|
|
14533
14607
|
|
|
14608
|
+
for (var i = 0; i < rows.length; i++) {
|
|
14609
|
+
if (codecPt && rows[i].indexOf("a=rtpmap:" + codecPt) != -1) {
|
|
14610
|
+
var ret = {};
|
|
14611
|
+
ret.name = rows[i].split(" ")[1].split("/")[0];
|
|
14612
|
+
ret.sampleRate = rows[i].split(" ")[1].split("/")[1];
|
|
14613
|
+
return ret;
|
|
14614
|
+
} //WCS-2136. WebRTC statistics doesn't work for VP8
|
|
14534
14615
|
|
|
14535
|
-
|
|
14536
|
-
|
|
14537
|
-
|
|
14616
|
+
|
|
14617
|
+
if (rows[i].indexOf("m=" + mediaType) != -1) {
|
|
14618
|
+
codecPt = rows[i].split(" ")[3].trim();
|
|
14538
14619
|
}
|
|
14539
14620
|
}
|
|
14540
14621
|
};
|
|
14541
14622
|
|
|
14623
|
+
module.exports = {
|
|
14624
|
+
isEmptyObject: isEmptyObject,
|
|
14625
|
+
copyObjectToArray: copyObjectToArray,
|
|
14626
|
+
copyObjectPropsToAnotherObject: copyObjectPropsToAnotherObject,
|
|
14627
|
+
processRtcStatsReport: processRtcStatsReport,
|
|
14628
|
+
Browser: Browser,
|
|
14629
|
+
SDP: SDP,
|
|
14630
|
+
logger: logger,
|
|
14631
|
+
stripCodecs: stripCodecs,
|
|
14632
|
+
getCurrentCodecAndSampleRate: getCurrentCodecAndSampleRate
|
|
14633
|
+
};
|
|
14634
|
+
|
|
14542
14635
|
},{}],45:[function(require,module,exports){
|
|
14543
14636
|
'use strict';
|
|
14544
14637
|
|
|
@@ -14558,7 +14651,12 @@ var audioContext;
|
|
|
14558
14651
|
var createConnection = function createConnection(options, handlers) {
|
|
14559
14652
|
return new Promise(function (resolve, reject) {
|
|
14560
14653
|
var id = options.id;
|
|
14561
|
-
var display = options.display;
|
|
14654
|
+
var display = options.display; // Set connection logger #WCS-2434
|
|
14655
|
+
|
|
14656
|
+
if (options.logger) {
|
|
14657
|
+
logger = options.logger;
|
|
14658
|
+
}
|
|
14659
|
+
|
|
14562
14660
|
var canvas = document.createElement("canvas");
|
|
14563
14661
|
display.appendChild(canvas);
|
|
14564
14662
|
canvas.id = id;
|