@flashphoner/websdk 2.0.238 → 2.0.239
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/flashphoner-no-flash.js +135 -22
- package/flashphoner-no-flash.min.js +2 -2
- package/flashphoner-no-webrtc.js +113 -20
- package/flashphoner-no-webrtc.min.js +2 -2
- package/flashphoner-no-wsplayer.js +135 -22
- package/flashphoner-no-wsplayer.min.js +2 -2
- package/flashphoner-room-api.js +156 -43
- package/flashphoner-room-api.min.js +2 -2
- package/flashphoner-temasys-flash-websocket-without-adapterjs.js +113 -20
- package/flashphoner-temasys-flash-websocket.js +113 -20
- package/flashphoner-temasys-flash-websocket.min.js +1 -1
- package/flashphoner-webrtc-only.js +135 -22
- package/flashphoner-webrtc-only.min.js +1 -1
- package/flashphoner.js +135 -22
- package/flashphoner.min.js +2 -2
- package/package.json +1 -1
- package/src/flashphoner-core.js +62 -39
- package/src/util.js +70 -1
- package/src/webrtc-media-provider.js +24 -3
package/docTemplate/README.md
CHANGED
package/flashphoner-no-flash.js
CHANGED
|
@@ -8342,15 +8342,15 @@ var _require = require('uuid'),
|
|
|
8342
8342
|
var constants = require("./constants");
|
|
8343
8343
|
var util = require('./util');
|
|
8344
8344
|
var LoggerObject = require('./util').logger;
|
|
8345
|
+
var Promise = require('promise-polyfill');
|
|
8346
|
+
var KalmanFilter = require('kalmanjs');
|
|
8347
|
+
var browserDetails = require('webrtc-adapter')["default"].browserDetails;
|
|
8348
|
+
var LOG_PREFIX = "core";
|
|
8345
8349
|
var coreLogger;
|
|
8346
8350
|
var loggerConf = {
|
|
8347
8351
|
push: false,
|
|
8348
8352
|
severity: "INFO"
|
|
8349
8353
|
};
|
|
8350
|
-
var Promise = require('promise-polyfill');
|
|
8351
|
-
var KalmanFilter = require('kalmanjs');
|
|
8352
|
-
var browserDetails = require('webrtc-adapter')["default"].browserDetails;
|
|
8353
|
-
var LOG_PREFIX = "core";
|
|
8354
8354
|
var isUsingTemasysPlugin = false;
|
|
8355
8355
|
|
|
8356
8356
|
/**
|
|
@@ -8362,7 +8362,6 @@ var STREAM_EVENT = constants.STREAM_EVENT;
|
|
|
8362
8362
|
var STREAM_EVENT_TYPE = constants.STREAM_EVENT_TYPE;
|
|
8363
8363
|
var STREAM_STATUS = constants.STREAM_STATUS;
|
|
8364
8364
|
var CALL_STATUS = constants.CALL_STATUS;
|
|
8365
|
-
var TRANSPORT_TYPE = constants.TRANSPORT_TYPE;
|
|
8366
8365
|
var CONNECTION_QUALITY = constants.CONNECTION_QUALITY;
|
|
8367
8366
|
var ERROR_INFO = constants.ERROR_INFO;
|
|
8368
8367
|
var VIDEO_RATE_GOOD_QUALITY_PERCENT_DIFFERENCE = 20;
|
|
@@ -8371,6 +8370,18 @@ var LOW_VIDEO_RATE_THRESHOLD_BAD_PERFECT = 50000;
|
|
|
8371
8370
|
var LOW_VIDEO_RATE_BAD_QUALITY_PERCENT_DIFFERENCE = 150;
|
|
8372
8371
|
var OUTBOUND_VIDEO_RATE = "outboundVideoRate";
|
|
8373
8372
|
var INBOUND_VIDEO_RATE = "inboundVideoRate";
|
|
8373
|
+
var CONSTRAINT_AUDIO = "audio";
|
|
8374
|
+
var CONSTRAINT_AUDIO_STEREO = "stereo";
|
|
8375
|
+
var CONSTRAINT_AUDIO_BITRATE = "bitrate";
|
|
8376
|
+
var CONSTRAINT_AUDIO_FEC = "fec";
|
|
8377
|
+
var CONSTRAINT_AUDIO_OUTPUT_ID = "outputId";
|
|
8378
|
+
var CONSTRAINT_VIDEO = "video";
|
|
8379
|
+
var CONSTRAINT_VIDEO_BITRATE = "video.bitrate";
|
|
8380
|
+
var CONSTRAINT_VIDEO_MIN_BITRATE = "video.minBitrate";
|
|
8381
|
+
var CONSTRAINT_VIDEO_MAX_BITRATE = "video.maxBitrate";
|
|
8382
|
+
var CONSTRAINT_VIDEO_QUALITY = "video.quality";
|
|
8383
|
+
var CONSTRAINT_VIDEO_WIDTH = "video.width";
|
|
8384
|
+
var CONSTRAINT_VIDEO_HEIGHT = "video.height";
|
|
8374
8385
|
var MediaProvider = {};
|
|
8375
8386
|
var sessions = {};
|
|
8376
8387
|
var initialized = false;
|
|
@@ -9200,9 +9211,9 @@ var createSession = function createSession(options) {
|
|
|
9200
9211
|
var disableConstraintsNormalization = options.disableConstraintsNormalization;
|
|
9201
9212
|
}
|
|
9202
9213
|
var audioOutputId;
|
|
9203
|
-
var audioProperty = getConstraintsProperty(constraints,
|
|
9214
|
+
var audioProperty = getConstraintsProperty(constraints, CONSTRAINT_AUDIO, undefined);
|
|
9204
9215
|
if (_typeof(audioProperty) === 'object') {
|
|
9205
|
-
audioOutputId = getConstraintsProperty(audioProperty,
|
|
9216
|
+
audioOutputId = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_OUTPUT_ID, 0);
|
|
9206
9217
|
}
|
|
9207
9218
|
var stripCodecs = options.stripCodecs || [];
|
|
9208
9219
|
// Receive media
|
|
@@ -9217,6 +9228,9 @@ var createSession = function createSession(options) {
|
|
|
9217
9228
|
var sipHeaders = options.sipHeaders;
|
|
9218
9229
|
var videoContentHint = options.videoContentHint;
|
|
9219
9230
|
var useControls = options.useControls;
|
|
9231
|
+
var minBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MIN_BITRATE, 0);
|
|
9232
|
+
var maxBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MAX_BITRATE, 0);
|
|
9233
|
+
|
|
9220
9234
|
/**
|
|
9221
9235
|
* Represents sip call.
|
|
9222
9236
|
*
|
|
@@ -9253,6 +9267,8 @@ var createSession = function createSession(options) {
|
|
|
9253
9267
|
//set remote sdp
|
|
9254
9268
|
if (sdp && sdp !== '') {
|
|
9255
9269
|
sdp = sdpHookHandler(sdp, sdpHook);
|
|
9270
|
+
// Adjust publishing bitrate #WCS-4013
|
|
9271
|
+
sdp = util.setPublishingBitrate(sdp, mediaConnection, minBitrate, maxBitrate);
|
|
9256
9272
|
mediaConnection.setRemoteSdp(sdp, hasTransferredCall, id_).then(function () {});
|
|
9257
9273
|
return;
|
|
9258
9274
|
}
|
|
@@ -9418,6 +9434,8 @@ var createSession = function createSession(options) {
|
|
|
9418
9434
|
status_ = CALL_STATUS.PENDING;
|
|
9419
9435
|
var sdp;
|
|
9420
9436
|
var sdpHook = answerOptions.sdpHook;
|
|
9437
|
+
var minBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MIN_BITRATE, 0);
|
|
9438
|
+
var maxBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MAX_BITRATE, 0);
|
|
9421
9439
|
sipSDP = answerOptions.sipSDP;
|
|
9422
9440
|
sipHeaders = answerOptions.sipHeaders;
|
|
9423
9441
|
if (!remoteSdpCache[id_]) {
|
|
@@ -9425,6 +9443,8 @@ var createSession = function createSession(options) {
|
|
|
9425
9443
|
throw new Error("No remote sdp available");
|
|
9426
9444
|
} else {
|
|
9427
9445
|
sdp = sdpHookHandler(remoteSdpCache[id_], sdpHook);
|
|
9446
|
+
// Adjust publishing bitrate #WCS-4013
|
|
9447
|
+
sdp = util.setPublishingBitrate(sdp, null, minBitrate, maxBitrate);
|
|
9428
9448
|
delete remoteSdpCache[id_];
|
|
9429
9449
|
}
|
|
9430
9450
|
if (util.SDP.matchPrefix(sdp, "m=video").length == 0) {
|
|
@@ -9458,6 +9478,8 @@ var createSession = function createSession(options) {
|
|
|
9458
9478
|
useControls: useControls
|
|
9459
9479
|
}).then(function (newConnection) {
|
|
9460
9480
|
mediaConnection = newConnection;
|
|
9481
|
+
// Set publishing bitrate via sender encodings if SDP feature is not supported
|
|
9482
|
+
mediaConnection.setPublishingBitrate(minBitrate, maxBitrate);
|
|
9461
9483
|
return mediaConnection.setRemoteSdp(sdp);
|
|
9462
9484
|
}).then(function () {
|
|
9463
9485
|
return mediaConnection.createAnswer({
|
|
@@ -9992,15 +10014,15 @@ var createSession = function createSession(options) {
|
|
|
9992
10014
|
// Receive media
|
|
9993
10015
|
var receiveAudio;
|
|
9994
10016
|
var audioOutputId;
|
|
9995
|
-
var audioProperty = getConstraintsProperty(constraints,
|
|
10017
|
+
var audioProperty = getConstraintsProperty(constraints, CONSTRAINT_AUDIO, undefined);
|
|
9996
10018
|
if (typeof audioProperty === 'boolean') {
|
|
9997
10019
|
receiveAudio = audioProperty;
|
|
9998
10020
|
} else if (_typeof(audioProperty) === 'object') {
|
|
9999
10021
|
receiveAudio = true;
|
|
10000
|
-
var _stereo = getConstraintsProperty(audioProperty,
|
|
10001
|
-
var _bitrate = getConstraintsProperty(audioProperty,
|
|
10002
|
-
var _fec = getConstraintsProperty(audioProperty,
|
|
10003
|
-
audioOutputId = getConstraintsProperty(audioProperty,
|
|
10022
|
+
var _stereo = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_STEREO, 0);
|
|
10023
|
+
var _bitrate = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_BITRATE, 0);
|
|
10024
|
+
var _fec = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_FEC, 0);
|
|
10025
|
+
audioOutputId = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_OUTPUT_ID, 0);
|
|
10004
10026
|
var _codecOptions = "";
|
|
10005
10027
|
if (_bitrate) _codecOptions += "maxaveragebitrate=" + _bitrate + ";";
|
|
10006
10028
|
if (_stereo) _codecOptions += "stereo=1;sprop-stereo=1;";
|
|
@@ -10009,7 +10031,7 @@ var createSession = function createSession(options) {
|
|
|
10009
10031
|
receiveAudio = typeof options.receiveAudio !== 'undefined' ? options.receiveAudio : true;
|
|
10010
10032
|
}
|
|
10011
10033
|
var receiveVideo;
|
|
10012
|
-
var videoProperty = getConstraintsProperty(constraints,
|
|
10034
|
+
var videoProperty = getConstraintsProperty(constraints, CONSTRAINT_VIDEO, undefined);
|
|
10013
10035
|
if (typeof videoProperty === 'boolean') {
|
|
10014
10036
|
receiveVideo = videoProperty;
|
|
10015
10037
|
} else if (_typeof(videoProperty) === 'object') {
|
|
@@ -10018,16 +10040,16 @@ var createSession = function createSession(options) {
|
|
|
10018
10040
|
receiveVideo = typeof options.receiveVideo !== 'undefined' ? options.receiveVideo : true;
|
|
10019
10041
|
}
|
|
10020
10042
|
// Bitrate
|
|
10021
|
-
var bitrate = getConstraintsProperty(constraints,
|
|
10022
|
-
var minBitrate = getConstraintsProperty(constraints,
|
|
10023
|
-
var maxBitrate = getConstraintsProperty(constraints,
|
|
10043
|
+
var bitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_BITRATE, 0);
|
|
10044
|
+
var minBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MIN_BITRATE, 0);
|
|
10045
|
+
var maxBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MAX_BITRATE, 0);
|
|
10024
10046
|
|
|
10025
10047
|
// Quality
|
|
10026
|
-
var quality = getConstraintsProperty(constraints,
|
|
10048
|
+
var quality = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_QUALITY, 0);
|
|
10027
10049
|
if (quality > 100) quality = 100;
|
|
10028
10050
|
// Play resolution
|
|
10029
|
-
var playWidth = typeof options.playWidth !== 'undefined' ? options.playWidth : getConstraintsProperty(constraints,
|
|
10030
|
-
var playHeight = typeof options.playHeight !== 'undefined' ? options.playHeight : getConstraintsProperty(constraints,
|
|
10051
|
+
var playWidth = typeof options.playWidth !== 'undefined' ? options.playWidth : getConstraintsProperty(constraints, CONSTRAINT_VIDEO_WIDTH, 0);
|
|
10052
|
+
var playHeight = typeof options.playHeight !== 'undefined' ? options.playHeight : getConstraintsProperty(constraints, CONSTRAINT_VIDEO_HEIGHT, 0);
|
|
10031
10053
|
var stripCodecs = options.stripCodecs || [];
|
|
10032
10054
|
var resolution = {};
|
|
10033
10055
|
var published_ = false;
|
|
@@ -10082,6 +10104,8 @@ var createSession = function createSession(options) {
|
|
|
10082
10104
|
var _sdp = sdp;
|
|
10083
10105
|
if (_codecOptions) _sdp = util.SDP.writeFmtp(sdp, _codecOptions, "opus");
|
|
10084
10106
|
_sdp = sdpHookHandler(_sdp, sdpHook);
|
|
10107
|
+
// Adjust publishing bitrate #WCS-4013
|
|
10108
|
+
_sdp = util.setPublishingBitrate(_sdp, mediaConnection, minBitrate, maxBitrate);
|
|
10085
10109
|
mediaConnection.setRemoteSdp(_sdp).then(function () {});
|
|
10086
10110
|
return;
|
|
10087
10111
|
}
|
|
@@ -11358,6 +11382,62 @@ var SDP = {
|
|
|
11358
11382
|
}
|
|
11359
11383
|
}
|
|
11360
11384
|
return result;
|
|
11385
|
+
},
|
|
11386
|
+
setPublishingBitrate: function setPublishingBitrate(sdp, minBitrate, maxBitrate) {
|
|
11387
|
+
if (sdp && (minBitrate || maxBitrate)) {
|
|
11388
|
+
var sdpArray = sdp.split("\n");
|
|
11389
|
+
var i;
|
|
11390
|
+
var rtpmap = -1,
|
|
11391
|
+
codec = "";
|
|
11392
|
+
var matches;
|
|
11393
|
+
var bitrateString = "";
|
|
11394
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
11395
|
+
if (sdpArray[i].startsWith("a=rtpmap")) {
|
|
11396
|
+
matches = sdpArray[i].match("a=rtpmap:(.+) (.+)/.*");
|
|
11397
|
+
if (matches && matches.length > 2) {
|
|
11398
|
+
rtpmap = parseInt(matches[1], 10);
|
|
11399
|
+
codec = matches[2];
|
|
11400
|
+
}
|
|
11401
|
+
} else {
|
|
11402
|
+
if (codec === "H264" || codec === "VP8") {
|
|
11403
|
+
if (sdpArray[i].startsWith("a=fmtp:" + rtpmap)) {
|
|
11404
|
+
bitrateString = this.getBitrateString(sdpArray[i], minBitrate, maxBitrate);
|
|
11405
|
+
if (bitrateString) {
|
|
11406
|
+
sdpArray[i] += ";" + bitrateString;
|
|
11407
|
+
}
|
|
11408
|
+
} else {
|
|
11409
|
+
bitrateString = this.getBitrateString("", minBitrate, maxBitrate);
|
|
11410
|
+
if (bitrateString) {
|
|
11411
|
+
sdpArray[i] = "a=fmtp:" + rtpmap + " " + bitrateString + "\r\n" + sdpArray[i];
|
|
11412
|
+
}
|
|
11413
|
+
}
|
|
11414
|
+
codec = "";
|
|
11415
|
+
rtpmap = -1;
|
|
11416
|
+
}
|
|
11417
|
+
}
|
|
11418
|
+
}
|
|
11419
|
+
var newSDP = "";
|
|
11420
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
11421
|
+
if (sdpArray[i] != "") {
|
|
11422
|
+
newSDP += sdpArray[i] + "\n";
|
|
11423
|
+
}
|
|
11424
|
+
}
|
|
11425
|
+
return newSDP;
|
|
11426
|
+
}
|
|
11427
|
+
return sdp;
|
|
11428
|
+
},
|
|
11429
|
+
getBitrateString: function getBitrateString(string, minBitrate, maxBitrate) {
|
|
11430
|
+
var bitrateString = "";
|
|
11431
|
+
if (minBitrate && string.indexOf("x-google-min-bitrate") == -1) {
|
|
11432
|
+
bitrateString += "x-google-min-bitrate=" + minBitrate;
|
|
11433
|
+
}
|
|
11434
|
+
if (maxBitrate && string.indexOf("x-google-max-bitrate") == -1) {
|
|
11435
|
+
if (bitrateString) {
|
|
11436
|
+
bitrateString += ";";
|
|
11437
|
+
}
|
|
11438
|
+
bitrateString += "x-google-max-bitrate=" + maxBitrate;
|
|
11439
|
+
}
|
|
11440
|
+
return bitrateString;
|
|
11361
11441
|
}
|
|
11362
11442
|
};
|
|
11363
11443
|
var logger = function logger() {
|
|
@@ -11601,6 +11681,18 @@ var isPromise = function isPromise(object) {
|
|
|
11601
11681
|
}
|
|
11602
11682
|
return false;
|
|
11603
11683
|
};
|
|
11684
|
+
var setPublishingBitrate = function setPublishingBitrate(sdp, mediaConnection, minBitrate, maxBitrate) {
|
|
11685
|
+
if (minBitrate || maxBitrate) {
|
|
11686
|
+
if (sdp && Browser.isChrome() || Browser.isSafariWebRTC()) {
|
|
11687
|
+
// Set publishing bitrate constraints via remote SDP
|
|
11688
|
+
sdp = SDP.setPublishingBitrate(sdp, minBitrate, maxBitrate);
|
|
11689
|
+
} else if (mediaConnection) {
|
|
11690
|
+
// Set publishing bitrate via sender encodings if SDP feature is not supported
|
|
11691
|
+
mediaConnection.setPublishingBitrate(minBitrate, maxBitrate);
|
|
11692
|
+
}
|
|
11693
|
+
}
|
|
11694
|
+
return sdp;
|
|
11695
|
+
};
|
|
11604
11696
|
module.exports = {
|
|
11605
11697
|
isEmptyObject: isEmptyObject,
|
|
11606
11698
|
copyObjectToArray: copyObjectToArray,
|
|
@@ -11611,7 +11703,8 @@ module.exports = {
|
|
|
11611
11703
|
logger: logger,
|
|
11612
11704
|
stripCodecs: stripCodecs,
|
|
11613
11705
|
getCurrentCodecAndSampleRate: getCurrentCodecAndSampleRate,
|
|
11614
|
-
isPromise: isPromise
|
|
11706
|
+
isPromise: isPromise,
|
|
11707
|
+
setPublishingBitrate: setPublishingBitrate
|
|
11615
11708
|
};
|
|
11616
11709
|
|
|
11617
11710
|
},{}],43:[function(require,module,exports){
|
|
@@ -11687,7 +11780,7 @@ var createConnection = function createConnection(options) {
|
|
|
11687
11780
|
if (localVideo.srcObject) {
|
|
11688
11781
|
localVideo.id = id + "-local";
|
|
11689
11782
|
setContentHint(localVideo.srcObject, videoContentHint);
|
|
11690
|
-
connection
|
|
11783
|
+
addStreamTracks(connection, localVideo.srcObject);
|
|
11691
11784
|
} else {
|
|
11692
11785
|
localVideo = null;
|
|
11693
11786
|
}
|
|
@@ -11730,7 +11823,7 @@ var createConnection = function createConnection(options) {
|
|
|
11730
11823
|
localVideo = cachedVideo;
|
|
11731
11824
|
localVideo.id = id;
|
|
11732
11825
|
setContentHint(localVideo.srcObject, videoContentHint);
|
|
11733
|
-
connection
|
|
11826
|
+
addStreamTracks(connection, localVideo.srcObject);
|
|
11734
11827
|
}
|
|
11735
11828
|
} else {
|
|
11736
11829
|
// There is a custom video element, get its id if set #WCS-3606
|
|
@@ -11777,6 +11870,11 @@ var createConnection = function createConnection(options) {
|
|
|
11777
11870
|
}
|
|
11778
11871
|
});
|
|
11779
11872
|
}
|
|
11873
|
+
function addStreamTracks(pc, stream) {
|
|
11874
|
+
stream.getTracks().forEach(function (track) {
|
|
11875
|
+
pc.addTrack(track, stream);
|
|
11876
|
+
});
|
|
11877
|
+
}
|
|
11780
11878
|
connection.ontrack = function (event) {
|
|
11781
11879
|
if (remoteVideo) {
|
|
11782
11880
|
remoteVideo.srcObject = event.streams[0];
|
|
@@ -12370,6 +12468,20 @@ var createConnection = function createConnection(options) {
|
|
|
12370
12468
|
logger.info(LOG_PREFIX, "Switch to cam");
|
|
12371
12469
|
screenShare = false;
|
|
12372
12470
|
};
|
|
12471
|
+
var setPublishingBitrate = function setPublishingBitrate(minBitrate, maxBitrate) {
|
|
12472
|
+
var senders = connection.getSenders();
|
|
12473
|
+
senders.forEach(function (sender) {
|
|
12474
|
+
if (sender.track.kind == "video" && maxBitrate) {
|
|
12475
|
+
var parameters = sender.getParameters();
|
|
12476
|
+
for (var i = 0; i < parameters.encodings.length; i++) {
|
|
12477
|
+
if (!parameters.encodings[i].maxBitrate) {
|
|
12478
|
+
parameters.encodings[i].maxBitrate = maxBitrate * 1000;
|
|
12479
|
+
}
|
|
12480
|
+
}
|
|
12481
|
+
sender.setParameters(parameters).then(function () {});
|
|
12482
|
+
}
|
|
12483
|
+
});
|
|
12484
|
+
};
|
|
12373
12485
|
var exports = {};
|
|
12374
12486
|
exports.state = state;
|
|
12375
12487
|
exports.createOffer = createOffer;
|
|
@@ -12396,6 +12508,7 @@ var createConnection = function createConnection(options) {
|
|
|
12396
12508
|
exports.switchMic = switchMic;
|
|
12397
12509
|
exports.switchToScreen = switchToScreen;
|
|
12398
12510
|
exports.switchToCam = switchToCam;
|
|
12511
|
+
exports.setPublishingBitrate = setPublishingBitrate;
|
|
12399
12512
|
connections[id] = exports;
|
|
12400
12513
|
resolve(exports);
|
|
12401
12514
|
});
|