@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
|
@@ -7514,15 +7514,15 @@ var _require = require('uuid'),
|
|
|
7514
7514
|
var constants = require("./constants");
|
|
7515
7515
|
var util = require('./util');
|
|
7516
7516
|
var LoggerObject = require('./util').logger;
|
|
7517
|
+
var Promise = require('promise-polyfill');
|
|
7518
|
+
var KalmanFilter = require('kalmanjs');
|
|
7519
|
+
var browserDetails = require('webrtc-adapter')["default"].browserDetails;
|
|
7520
|
+
var LOG_PREFIX = "core";
|
|
7517
7521
|
var coreLogger;
|
|
7518
7522
|
var loggerConf = {
|
|
7519
7523
|
push: false,
|
|
7520
7524
|
severity: "INFO"
|
|
7521
7525
|
};
|
|
7522
|
-
var Promise = require('promise-polyfill');
|
|
7523
|
-
var KalmanFilter = require('kalmanjs');
|
|
7524
|
-
var browserDetails = require('webrtc-adapter')["default"].browserDetails;
|
|
7525
|
-
var LOG_PREFIX = "core";
|
|
7526
7526
|
var isUsingTemasysPlugin = false;
|
|
7527
7527
|
|
|
7528
7528
|
/**
|
|
@@ -7534,7 +7534,6 @@ var STREAM_EVENT = constants.STREAM_EVENT;
|
|
|
7534
7534
|
var STREAM_EVENT_TYPE = constants.STREAM_EVENT_TYPE;
|
|
7535
7535
|
var STREAM_STATUS = constants.STREAM_STATUS;
|
|
7536
7536
|
var CALL_STATUS = constants.CALL_STATUS;
|
|
7537
|
-
var TRANSPORT_TYPE = constants.TRANSPORT_TYPE;
|
|
7538
7537
|
var CONNECTION_QUALITY = constants.CONNECTION_QUALITY;
|
|
7539
7538
|
var ERROR_INFO = constants.ERROR_INFO;
|
|
7540
7539
|
var VIDEO_RATE_GOOD_QUALITY_PERCENT_DIFFERENCE = 20;
|
|
@@ -7543,6 +7542,18 @@ var LOW_VIDEO_RATE_THRESHOLD_BAD_PERFECT = 50000;
|
|
|
7543
7542
|
var LOW_VIDEO_RATE_BAD_QUALITY_PERCENT_DIFFERENCE = 150;
|
|
7544
7543
|
var OUTBOUND_VIDEO_RATE = "outboundVideoRate";
|
|
7545
7544
|
var INBOUND_VIDEO_RATE = "inboundVideoRate";
|
|
7545
|
+
var CONSTRAINT_AUDIO = "audio";
|
|
7546
|
+
var CONSTRAINT_AUDIO_STEREO = "stereo";
|
|
7547
|
+
var CONSTRAINT_AUDIO_BITRATE = "bitrate";
|
|
7548
|
+
var CONSTRAINT_AUDIO_FEC = "fec";
|
|
7549
|
+
var CONSTRAINT_AUDIO_OUTPUT_ID = "outputId";
|
|
7550
|
+
var CONSTRAINT_VIDEO = "video";
|
|
7551
|
+
var CONSTRAINT_VIDEO_BITRATE = "video.bitrate";
|
|
7552
|
+
var CONSTRAINT_VIDEO_MIN_BITRATE = "video.minBitrate";
|
|
7553
|
+
var CONSTRAINT_VIDEO_MAX_BITRATE = "video.maxBitrate";
|
|
7554
|
+
var CONSTRAINT_VIDEO_QUALITY = "video.quality";
|
|
7555
|
+
var CONSTRAINT_VIDEO_WIDTH = "video.width";
|
|
7556
|
+
var CONSTRAINT_VIDEO_HEIGHT = "video.height";
|
|
7546
7557
|
var MediaProvider = {};
|
|
7547
7558
|
var sessions = {};
|
|
7548
7559
|
var initialized = false;
|
|
@@ -8372,9 +8383,9 @@ var createSession = function createSession(options) {
|
|
|
8372
8383
|
var disableConstraintsNormalization = options.disableConstraintsNormalization;
|
|
8373
8384
|
}
|
|
8374
8385
|
var audioOutputId;
|
|
8375
|
-
var audioProperty = getConstraintsProperty(constraints,
|
|
8386
|
+
var audioProperty = getConstraintsProperty(constraints, CONSTRAINT_AUDIO, undefined);
|
|
8376
8387
|
if (_typeof(audioProperty) === 'object') {
|
|
8377
|
-
audioOutputId = getConstraintsProperty(audioProperty,
|
|
8388
|
+
audioOutputId = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_OUTPUT_ID, 0);
|
|
8378
8389
|
}
|
|
8379
8390
|
var stripCodecs = options.stripCodecs || [];
|
|
8380
8391
|
// Receive media
|
|
@@ -8389,6 +8400,9 @@ var createSession = function createSession(options) {
|
|
|
8389
8400
|
var sipHeaders = options.sipHeaders;
|
|
8390
8401
|
var videoContentHint = options.videoContentHint;
|
|
8391
8402
|
var useControls = options.useControls;
|
|
8403
|
+
var minBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MIN_BITRATE, 0);
|
|
8404
|
+
var maxBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MAX_BITRATE, 0);
|
|
8405
|
+
|
|
8392
8406
|
/**
|
|
8393
8407
|
* Represents sip call.
|
|
8394
8408
|
*
|
|
@@ -8425,6 +8439,8 @@ var createSession = function createSession(options) {
|
|
|
8425
8439
|
//set remote sdp
|
|
8426
8440
|
if (sdp && sdp !== '') {
|
|
8427
8441
|
sdp = sdpHookHandler(sdp, sdpHook);
|
|
8442
|
+
// Adjust publishing bitrate #WCS-4013
|
|
8443
|
+
sdp = util.setPublishingBitrate(sdp, mediaConnection, minBitrate, maxBitrate);
|
|
8428
8444
|
mediaConnection.setRemoteSdp(sdp, hasTransferredCall, id_).then(function () {});
|
|
8429
8445
|
return;
|
|
8430
8446
|
}
|
|
@@ -8590,6 +8606,8 @@ var createSession = function createSession(options) {
|
|
|
8590
8606
|
status_ = CALL_STATUS.PENDING;
|
|
8591
8607
|
var sdp;
|
|
8592
8608
|
var sdpHook = answerOptions.sdpHook;
|
|
8609
|
+
var minBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MIN_BITRATE, 0);
|
|
8610
|
+
var maxBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MAX_BITRATE, 0);
|
|
8593
8611
|
sipSDP = answerOptions.sipSDP;
|
|
8594
8612
|
sipHeaders = answerOptions.sipHeaders;
|
|
8595
8613
|
if (!remoteSdpCache[id_]) {
|
|
@@ -8597,6 +8615,8 @@ var createSession = function createSession(options) {
|
|
|
8597
8615
|
throw new Error("No remote sdp available");
|
|
8598
8616
|
} else {
|
|
8599
8617
|
sdp = sdpHookHandler(remoteSdpCache[id_], sdpHook);
|
|
8618
|
+
// Adjust publishing bitrate #WCS-4013
|
|
8619
|
+
sdp = util.setPublishingBitrate(sdp, null, minBitrate, maxBitrate);
|
|
8600
8620
|
delete remoteSdpCache[id_];
|
|
8601
8621
|
}
|
|
8602
8622
|
if (util.SDP.matchPrefix(sdp, "m=video").length == 0) {
|
|
@@ -8630,6 +8650,8 @@ var createSession = function createSession(options) {
|
|
|
8630
8650
|
useControls: useControls
|
|
8631
8651
|
}).then(function (newConnection) {
|
|
8632
8652
|
mediaConnection = newConnection;
|
|
8653
|
+
// Set publishing bitrate via sender encodings if SDP feature is not supported
|
|
8654
|
+
mediaConnection.setPublishingBitrate(minBitrate, maxBitrate);
|
|
8633
8655
|
return mediaConnection.setRemoteSdp(sdp);
|
|
8634
8656
|
}).then(function () {
|
|
8635
8657
|
return mediaConnection.createAnswer({
|
|
@@ -9164,15 +9186,15 @@ var createSession = function createSession(options) {
|
|
|
9164
9186
|
// Receive media
|
|
9165
9187
|
var receiveAudio;
|
|
9166
9188
|
var audioOutputId;
|
|
9167
|
-
var audioProperty = getConstraintsProperty(constraints,
|
|
9189
|
+
var audioProperty = getConstraintsProperty(constraints, CONSTRAINT_AUDIO, undefined);
|
|
9168
9190
|
if (typeof audioProperty === 'boolean') {
|
|
9169
9191
|
receiveAudio = audioProperty;
|
|
9170
9192
|
} else if (_typeof(audioProperty) === 'object') {
|
|
9171
9193
|
receiveAudio = true;
|
|
9172
|
-
var _stereo = getConstraintsProperty(audioProperty,
|
|
9173
|
-
var _bitrate = getConstraintsProperty(audioProperty,
|
|
9174
|
-
var _fec = getConstraintsProperty(audioProperty,
|
|
9175
|
-
audioOutputId = getConstraintsProperty(audioProperty,
|
|
9194
|
+
var _stereo = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_STEREO, 0);
|
|
9195
|
+
var _bitrate = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_BITRATE, 0);
|
|
9196
|
+
var _fec = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_FEC, 0);
|
|
9197
|
+
audioOutputId = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_OUTPUT_ID, 0);
|
|
9176
9198
|
var _codecOptions = "";
|
|
9177
9199
|
if (_bitrate) _codecOptions += "maxaveragebitrate=" + _bitrate + ";";
|
|
9178
9200
|
if (_stereo) _codecOptions += "stereo=1;sprop-stereo=1;";
|
|
@@ -9181,7 +9203,7 @@ var createSession = function createSession(options) {
|
|
|
9181
9203
|
receiveAudio = typeof options.receiveAudio !== 'undefined' ? options.receiveAudio : true;
|
|
9182
9204
|
}
|
|
9183
9205
|
var receiveVideo;
|
|
9184
|
-
var videoProperty = getConstraintsProperty(constraints,
|
|
9206
|
+
var videoProperty = getConstraintsProperty(constraints, CONSTRAINT_VIDEO, undefined);
|
|
9185
9207
|
if (typeof videoProperty === 'boolean') {
|
|
9186
9208
|
receiveVideo = videoProperty;
|
|
9187
9209
|
} else if (_typeof(videoProperty) === 'object') {
|
|
@@ -9190,16 +9212,16 @@ var createSession = function createSession(options) {
|
|
|
9190
9212
|
receiveVideo = typeof options.receiveVideo !== 'undefined' ? options.receiveVideo : true;
|
|
9191
9213
|
}
|
|
9192
9214
|
// Bitrate
|
|
9193
|
-
var bitrate = getConstraintsProperty(constraints,
|
|
9194
|
-
var minBitrate = getConstraintsProperty(constraints,
|
|
9195
|
-
var maxBitrate = getConstraintsProperty(constraints,
|
|
9215
|
+
var bitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_BITRATE, 0);
|
|
9216
|
+
var minBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MIN_BITRATE, 0);
|
|
9217
|
+
var maxBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MAX_BITRATE, 0);
|
|
9196
9218
|
|
|
9197
9219
|
// Quality
|
|
9198
|
-
var quality = getConstraintsProperty(constraints,
|
|
9220
|
+
var quality = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_QUALITY, 0);
|
|
9199
9221
|
if (quality > 100) quality = 100;
|
|
9200
9222
|
// Play resolution
|
|
9201
|
-
var playWidth = typeof options.playWidth !== 'undefined' ? options.playWidth : getConstraintsProperty(constraints,
|
|
9202
|
-
var playHeight = typeof options.playHeight !== 'undefined' ? options.playHeight : getConstraintsProperty(constraints,
|
|
9223
|
+
var playWidth = typeof options.playWidth !== 'undefined' ? options.playWidth : getConstraintsProperty(constraints, CONSTRAINT_VIDEO_WIDTH, 0);
|
|
9224
|
+
var playHeight = typeof options.playHeight !== 'undefined' ? options.playHeight : getConstraintsProperty(constraints, CONSTRAINT_VIDEO_HEIGHT, 0);
|
|
9203
9225
|
var stripCodecs = options.stripCodecs || [];
|
|
9204
9226
|
var resolution = {};
|
|
9205
9227
|
var published_ = false;
|
|
@@ -9254,6 +9276,8 @@ var createSession = function createSession(options) {
|
|
|
9254
9276
|
var _sdp = sdp;
|
|
9255
9277
|
if (_codecOptions) _sdp = util.SDP.writeFmtp(sdp, _codecOptions, "opus");
|
|
9256
9278
|
_sdp = sdpHookHandler(_sdp, sdpHook);
|
|
9279
|
+
// Adjust publishing bitrate #WCS-4013
|
|
9280
|
+
_sdp = util.setPublishingBitrate(_sdp, mediaConnection, minBitrate, maxBitrate);
|
|
9257
9281
|
mediaConnection.setRemoteSdp(_sdp).then(function () {});
|
|
9258
9282
|
return;
|
|
9259
9283
|
}
|
|
@@ -10530,6 +10554,62 @@ var SDP = {
|
|
|
10530
10554
|
}
|
|
10531
10555
|
}
|
|
10532
10556
|
return result;
|
|
10557
|
+
},
|
|
10558
|
+
setPublishingBitrate: function setPublishingBitrate(sdp, minBitrate, maxBitrate) {
|
|
10559
|
+
if (sdp && (minBitrate || maxBitrate)) {
|
|
10560
|
+
var sdpArray = sdp.split("\n");
|
|
10561
|
+
var i;
|
|
10562
|
+
var rtpmap = -1,
|
|
10563
|
+
codec = "";
|
|
10564
|
+
var matches;
|
|
10565
|
+
var bitrateString = "";
|
|
10566
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
10567
|
+
if (sdpArray[i].startsWith("a=rtpmap")) {
|
|
10568
|
+
matches = sdpArray[i].match("a=rtpmap:(.+) (.+)/.*");
|
|
10569
|
+
if (matches && matches.length > 2) {
|
|
10570
|
+
rtpmap = parseInt(matches[1], 10);
|
|
10571
|
+
codec = matches[2];
|
|
10572
|
+
}
|
|
10573
|
+
} else {
|
|
10574
|
+
if (codec === "H264" || codec === "VP8") {
|
|
10575
|
+
if (sdpArray[i].startsWith("a=fmtp:" + rtpmap)) {
|
|
10576
|
+
bitrateString = this.getBitrateString(sdpArray[i], minBitrate, maxBitrate);
|
|
10577
|
+
if (bitrateString) {
|
|
10578
|
+
sdpArray[i] += ";" + bitrateString;
|
|
10579
|
+
}
|
|
10580
|
+
} else {
|
|
10581
|
+
bitrateString = this.getBitrateString("", minBitrate, maxBitrate);
|
|
10582
|
+
if (bitrateString) {
|
|
10583
|
+
sdpArray[i] = "a=fmtp:" + rtpmap + " " + bitrateString + "\r\n" + sdpArray[i];
|
|
10584
|
+
}
|
|
10585
|
+
}
|
|
10586
|
+
codec = "";
|
|
10587
|
+
rtpmap = -1;
|
|
10588
|
+
}
|
|
10589
|
+
}
|
|
10590
|
+
}
|
|
10591
|
+
var newSDP = "";
|
|
10592
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
10593
|
+
if (sdpArray[i] != "") {
|
|
10594
|
+
newSDP += sdpArray[i] + "\n";
|
|
10595
|
+
}
|
|
10596
|
+
}
|
|
10597
|
+
return newSDP;
|
|
10598
|
+
}
|
|
10599
|
+
return sdp;
|
|
10600
|
+
},
|
|
10601
|
+
getBitrateString: function getBitrateString(string, minBitrate, maxBitrate) {
|
|
10602
|
+
var bitrateString = "";
|
|
10603
|
+
if (minBitrate && string.indexOf("x-google-min-bitrate") == -1) {
|
|
10604
|
+
bitrateString += "x-google-min-bitrate=" + minBitrate;
|
|
10605
|
+
}
|
|
10606
|
+
if (maxBitrate && string.indexOf("x-google-max-bitrate") == -1) {
|
|
10607
|
+
if (bitrateString) {
|
|
10608
|
+
bitrateString += ";";
|
|
10609
|
+
}
|
|
10610
|
+
bitrateString += "x-google-max-bitrate=" + maxBitrate;
|
|
10611
|
+
}
|
|
10612
|
+
return bitrateString;
|
|
10533
10613
|
}
|
|
10534
10614
|
};
|
|
10535
10615
|
var logger = function logger() {
|
|
@@ -10773,6 +10853,18 @@ var isPromise = function isPromise(object) {
|
|
|
10773
10853
|
}
|
|
10774
10854
|
return false;
|
|
10775
10855
|
};
|
|
10856
|
+
var setPublishingBitrate = function setPublishingBitrate(sdp, mediaConnection, minBitrate, maxBitrate) {
|
|
10857
|
+
if (minBitrate || maxBitrate) {
|
|
10858
|
+
if (sdp && Browser.isChrome() || Browser.isSafariWebRTC()) {
|
|
10859
|
+
// Set publishing bitrate constraints via remote SDP
|
|
10860
|
+
sdp = SDP.setPublishingBitrate(sdp, minBitrate, maxBitrate);
|
|
10861
|
+
} else if (mediaConnection) {
|
|
10862
|
+
// Set publishing bitrate via sender encodings if SDP feature is not supported
|
|
10863
|
+
mediaConnection.setPublishingBitrate(minBitrate, maxBitrate);
|
|
10864
|
+
}
|
|
10865
|
+
}
|
|
10866
|
+
return sdp;
|
|
10867
|
+
};
|
|
10776
10868
|
module.exports = {
|
|
10777
10869
|
isEmptyObject: isEmptyObject,
|
|
10778
10870
|
copyObjectToArray: copyObjectToArray,
|
|
@@ -10783,7 +10875,8 @@ module.exports = {
|
|
|
10783
10875
|
logger: logger,
|
|
10784
10876
|
stripCodecs: stripCodecs,
|
|
10785
10877
|
getCurrentCodecAndSampleRate: getCurrentCodecAndSampleRate,
|
|
10786
|
-
isPromise: isPromise
|
|
10878
|
+
isPromise: isPromise,
|
|
10879
|
+
setPublishingBitrate: setPublishingBitrate
|
|
10787
10880
|
};
|
|
10788
10881
|
|
|
10789
10882
|
},{}],42:[function(require,module,exports){
|
|
@@ -10859,7 +10952,7 @@ var createConnection = function createConnection(options) {
|
|
|
10859
10952
|
if (localVideo.srcObject) {
|
|
10860
10953
|
localVideo.id = id + "-local";
|
|
10861
10954
|
setContentHint(localVideo.srcObject, videoContentHint);
|
|
10862
|
-
connection
|
|
10955
|
+
addStreamTracks(connection, localVideo.srcObject);
|
|
10863
10956
|
} else {
|
|
10864
10957
|
localVideo = null;
|
|
10865
10958
|
}
|
|
@@ -10902,7 +10995,7 @@ var createConnection = function createConnection(options) {
|
|
|
10902
10995
|
localVideo = cachedVideo;
|
|
10903
10996
|
localVideo.id = id;
|
|
10904
10997
|
setContentHint(localVideo.srcObject, videoContentHint);
|
|
10905
|
-
connection
|
|
10998
|
+
addStreamTracks(connection, localVideo.srcObject);
|
|
10906
10999
|
}
|
|
10907
11000
|
} else {
|
|
10908
11001
|
// There is a custom video element, get its id if set #WCS-3606
|
|
@@ -10949,6 +11042,11 @@ var createConnection = function createConnection(options) {
|
|
|
10949
11042
|
}
|
|
10950
11043
|
});
|
|
10951
11044
|
}
|
|
11045
|
+
function addStreamTracks(pc, stream) {
|
|
11046
|
+
stream.getTracks().forEach(function (track) {
|
|
11047
|
+
pc.addTrack(track, stream);
|
|
11048
|
+
});
|
|
11049
|
+
}
|
|
10952
11050
|
connection.ontrack = function (event) {
|
|
10953
11051
|
if (remoteVideo) {
|
|
10954
11052
|
remoteVideo.srcObject = event.streams[0];
|
|
@@ -11542,6 +11640,20 @@ var createConnection = function createConnection(options) {
|
|
|
11542
11640
|
logger.info(LOG_PREFIX, "Switch to cam");
|
|
11543
11641
|
screenShare = false;
|
|
11544
11642
|
};
|
|
11643
|
+
var setPublishingBitrate = function setPublishingBitrate(minBitrate, maxBitrate) {
|
|
11644
|
+
var senders = connection.getSenders();
|
|
11645
|
+
senders.forEach(function (sender) {
|
|
11646
|
+
if (sender.track.kind == "video" && maxBitrate) {
|
|
11647
|
+
var parameters = sender.getParameters();
|
|
11648
|
+
for (var i = 0; i < parameters.encodings.length; i++) {
|
|
11649
|
+
if (!parameters.encodings[i].maxBitrate) {
|
|
11650
|
+
parameters.encodings[i].maxBitrate = maxBitrate * 1000;
|
|
11651
|
+
}
|
|
11652
|
+
}
|
|
11653
|
+
sender.setParameters(parameters).then(function () {});
|
|
11654
|
+
}
|
|
11655
|
+
});
|
|
11656
|
+
};
|
|
11545
11657
|
var exports = {};
|
|
11546
11658
|
exports.state = state;
|
|
11547
11659
|
exports.createOffer = createOffer;
|
|
@@ -11568,6 +11680,7 @@ var createConnection = function createConnection(options) {
|
|
|
11568
11680
|
exports.switchMic = switchMic;
|
|
11569
11681
|
exports.switchToScreen = switchToScreen;
|
|
11570
11682
|
exports.switchToCam = switchToCam;
|
|
11683
|
+
exports.setPublishingBitrate = setPublishingBitrate;
|
|
11571
11684
|
connections[id] = exports;
|
|
11572
11685
|
resolve(exports);
|
|
11573
11686
|
});
|