@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
|
@@ -9403,15 +9403,15 @@ var _require = require('uuid'),
|
|
|
9403
9403
|
var constants = require("./constants");
|
|
9404
9404
|
var util = require('./util');
|
|
9405
9405
|
var LoggerObject = require('./util').logger;
|
|
9406
|
+
var Promise = require('promise-polyfill');
|
|
9407
|
+
var KalmanFilter = require('kalmanjs');
|
|
9408
|
+
var browserDetails = require('webrtc-adapter')["default"].browserDetails;
|
|
9409
|
+
var LOG_PREFIX = "core";
|
|
9406
9410
|
var coreLogger;
|
|
9407
9411
|
var loggerConf = {
|
|
9408
9412
|
push: false,
|
|
9409
9413
|
severity: "INFO"
|
|
9410
9414
|
};
|
|
9411
|
-
var Promise = require('promise-polyfill');
|
|
9412
|
-
var KalmanFilter = require('kalmanjs');
|
|
9413
|
-
var browserDetails = require('webrtc-adapter')["default"].browserDetails;
|
|
9414
|
-
var LOG_PREFIX = "core";
|
|
9415
9415
|
var isUsingTemasysPlugin = false;
|
|
9416
9416
|
|
|
9417
9417
|
/**
|
|
@@ -9423,7 +9423,6 @@ var STREAM_EVENT = constants.STREAM_EVENT;
|
|
|
9423
9423
|
var STREAM_EVENT_TYPE = constants.STREAM_EVENT_TYPE;
|
|
9424
9424
|
var STREAM_STATUS = constants.STREAM_STATUS;
|
|
9425
9425
|
var CALL_STATUS = constants.CALL_STATUS;
|
|
9426
|
-
var TRANSPORT_TYPE = constants.TRANSPORT_TYPE;
|
|
9427
9426
|
var CONNECTION_QUALITY = constants.CONNECTION_QUALITY;
|
|
9428
9427
|
var ERROR_INFO = constants.ERROR_INFO;
|
|
9429
9428
|
var VIDEO_RATE_GOOD_QUALITY_PERCENT_DIFFERENCE = 20;
|
|
@@ -9432,6 +9431,18 @@ var LOW_VIDEO_RATE_THRESHOLD_BAD_PERFECT = 50000;
|
|
|
9432
9431
|
var LOW_VIDEO_RATE_BAD_QUALITY_PERCENT_DIFFERENCE = 150;
|
|
9433
9432
|
var OUTBOUND_VIDEO_RATE = "outboundVideoRate";
|
|
9434
9433
|
var INBOUND_VIDEO_RATE = "inboundVideoRate";
|
|
9434
|
+
var CONSTRAINT_AUDIO = "audio";
|
|
9435
|
+
var CONSTRAINT_AUDIO_STEREO = "stereo";
|
|
9436
|
+
var CONSTRAINT_AUDIO_BITRATE = "bitrate";
|
|
9437
|
+
var CONSTRAINT_AUDIO_FEC = "fec";
|
|
9438
|
+
var CONSTRAINT_AUDIO_OUTPUT_ID = "outputId";
|
|
9439
|
+
var CONSTRAINT_VIDEO = "video";
|
|
9440
|
+
var CONSTRAINT_VIDEO_BITRATE = "video.bitrate";
|
|
9441
|
+
var CONSTRAINT_VIDEO_MIN_BITRATE = "video.minBitrate";
|
|
9442
|
+
var CONSTRAINT_VIDEO_MAX_BITRATE = "video.maxBitrate";
|
|
9443
|
+
var CONSTRAINT_VIDEO_QUALITY = "video.quality";
|
|
9444
|
+
var CONSTRAINT_VIDEO_WIDTH = "video.width";
|
|
9445
|
+
var CONSTRAINT_VIDEO_HEIGHT = "video.height";
|
|
9435
9446
|
var MediaProvider = {};
|
|
9436
9447
|
var sessions = {};
|
|
9437
9448
|
var initialized = false;
|
|
@@ -10261,9 +10272,9 @@ var createSession = function createSession(options) {
|
|
|
10261
10272
|
var disableConstraintsNormalization = options.disableConstraintsNormalization;
|
|
10262
10273
|
}
|
|
10263
10274
|
var audioOutputId;
|
|
10264
|
-
var audioProperty = getConstraintsProperty(constraints,
|
|
10275
|
+
var audioProperty = getConstraintsProperty(constraints, CONSTRAINT_AUDIO, undefined);
|
|
10265
10276
|
if (_typeof(audioProperty) === 'object') {
|
|
10266
|
-
audioOutputId = getConstraintsProperty(audioProperty,
|
|
10277
|
+
audioOutputId = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_OUTPUT_ID, 0);
|
|
10267
10278
|
}
|
|
10268
10279
|
var stripCodecs = options.stripCodecs || [];
|
|
10269
10280
|
// Receive media
|
|
@@ -10278,6 +10289,9 @@ var createSession = function createSession(options) {
|
|
|
10278
10289
|
var sipHeaders = options.sipHeaders;
|
|
10279
10290
|
var videoContentHint = options.videoContentHint;
|
|
10280
10291
|
var useControls = options.useControls;
|
|
10292
|
+
var minBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MIN_BITRATE, 0);
|
|
10293
|
+
var maxBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MAX_BITRATE, 0);
|
|
10294
|
+
|
|
10281
10295
|
/**
|
|
10282
10296
|
* Represents sip call.
|
|
10283
10297
|
*
|
|
@@ -10314,6 +10328,8 @@ var createSession = function createSession(options) {
|
|
|
10314
10328
|
//set remote sdp
|
|
10315
10329
|
if (sdp && sdp !== '') {
|
|
10316
10330
|
sdp = sdpHookHandler(sdp, sdpHook);
|
|
10331
|
+
// Adjust publishing bitrate #WCS-4013
|
|
10332
|
+
sdp = util.setPublishingBitrate(sdp, mediaConnection, minBitrate, maxBitrate);
|
|
10317
10333
|
mediaConnection.setRemoteSdp(sdp, hasTransferredCall, id_).then(function () {});
|
|
10318
10334
|
return;
|
|
10319
10335
|
}
|
|
@@ -10479,6 +10495,8 @@ var createSession = function createSession(options) {
|
|
|
10479
10495
|
status_ = CALL_STATUS.PENDING;
|
|
10480
10496
|
var sdp;
|
|
10481
10497
|
var sdpHook = answerOptions.sdpHook;
|
|
10498
|
+
var minBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MIN_BITRATE, 0);
|
|
10499
|
+
var maxBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MAX_BITRATE, 0);
|
|
10482
10500
|
sipSDP = answerOptions.sipSDP;
|
|
10483
10501
|
sipHeaders = answerOptions.sipHeaders;
|
|
10484
10502
|
if (!remoteSdpCache[id_]) {
|
|
@@ -10486,6 +10504,8 @@ var createSession = function createSession(options) {
|
|
|
10486
10504
|
throw new Error("No remote sdp available");
|
|
10487
10505
|
} else {
|
|
10488
10506
|
sdp = sdpHookHandler(remoteSdpCache[id_], sdpHook);
|
|
10507
|
+
// Adjust publishing bitrate #WCS-4013
|
|
10508
|
+
sdp = util.setPublishingBitrate(sdp, null, minBitrate, maxBitrate);
|
|
10489
10509
|
delete remoteSdpCache[id_];
|
|
10490
10510
|
}
|
|
10491
10511
|
if (util.SDP.matchPrefix(sdp, "m=video").length == 0) {
|
|
@@ -10519,6 +10539,8 @@ var createSession = function createSession(options) {
|
|
|
10519
10539
|
useControls: useControls
|
|
10520
10540
|
}).then(function (newConnection) {
|
|
10521
10541
|
mediaConnection = newConnection;
|
|
10542
|
+
// Set publishing bitrate via sender encodings if SDP feature is not supported
|
|
10543
|
+
mediaConnection.setPublishingBitrate(minBitrate, maxBitrate);
|
|
10522
10544
|
return mediaConnection.setRemoteSdp(sdp);
|
|
10523
10545
|
}).then(function () {
|
|
10524
10546
|
return mediaConnection.createAnswer({
|
|
@@ -11053,15 +11075,15 @@ var createSession = function createSession(options) {
|
|
|
11053
11075
|
// Receive media
|
|
11054
11076
|
var receiveAudio;
|
|
11055
11077
|
var audioOutputId;
|
|
11056
|
-
var audioProperty = getConstraintsProperty(constraints,
|
|
11078
|
+
var audioProperty = getConstraintsProperty(constraints, CONSTRAINT_AUDIO, undefined);
|
|
11057
11079
|
if (typeof audioProperty === 'boolean') {
|
|
11058
11080
|
receiveAudio = audioProperty;
|
|
11059
11081
|
} else if (_typeof(audioProperty) === 'object') {
|
|
11060
11082
|
receiveAudio = true;
|
|
11061
|
-
var _stereo = getConstraintsProperty(audioProperty,
|
|
11062
|
-
var _bitrate = getConstraintsProperty(audioProperty,
|
|
11063
|
-
var _fec = getConstraintsProperty(audioProperty,
|
|
11064
|
-
audioOutputId = getConstraintsProperty(audioProperty,
|
|
11083
|
+
var _stereo = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_STEREO, 0);
|
|
11084
|
+
var _bitrate = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_BITRATE, 0);
|
|
11085
|
+
var _fec = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_FEC, 0);
|
|
11086
|
+
audioOutputId = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_OUTPUT_ID, 0);
|
|
11065
11087
|
var _codecOptions = "";
|
|
11066
11088
|
if (_bitrate) _codecOptions += "maxaveragebitrate=" + _bitrate + ";";
|
|
11067
11089
|
if (_stereo) _codecOptions += "stereo=1;sprop-stereo=1;";
|
|
@@ -11070,7 +11092,7 @@ var createSession = function createSession(options) {
|
|
|
11070
11092
|
receiveAudio = typeof options.receiveAudio !== 'undefined' ? options.receiveAudio : true;
|
|
11071
11093
|
}
|
|
11072
11094
|
var receiveVideo;
|
|
11073
|
-
var videoProperty = getConstraintsProperty(constraints,
|
|
11095
|
+
var videoProperty = getConstraintsProperty(constraints, CONSTRAINT_VIDEO, undefined);
|
|
11074
11096
|
if (typeof videoProperty === 'boolean') {
|
|
11075
11097
|
receiveVideo = videoProperty;
|
|
11076
11098
|
} else if (_typeof(videoProperty) === 'object') {
|
|
@@ -11079,16 +11101,16 @@ var createSession = function createSession(options) {
|
|
|
11079
11101
|
receiveVideo = typeof options.receiveVideo !== 'undefined' ? options.receiveVideo : true;
|
|
11080
11102
|
}
|
|
11081
11103
|
// Bitrate
|
|
11082
|
-
var bitrate = getConstraintsProperty(constraints,
|
|
11083
|
-
var minBitrate = getConstraintsProperty(constraints,
|
|
11084
|
-
var maxBitrate = getConstraintsProperty(constraints,
|
|
11104
|
+
var bitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_BITRATE, 0);
|
|
11105
|
+
var minBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MIN_BITRATE, 0);
|
|
11106
|
+
var maxBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MAX_BITRATE, 0);
|
|
11085
11107
|
|
|
11086
11108
|
// Quality
|
|
11087
|
-
var quality = getConstraintsProperty(constraints,
|
|
11109
|
+
var quality = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_QUALITY, 0);
|
|
11088
11110
|
if (quality > 100) quality = 100;
|
|
11089
11111
|
// Play resolution
|
|
11090
|
-
var playWidth = typeof options.playWidth !== 'undefined' ? options.playWidth : getConstraintsProperty(constraints,
|
|
11091
|
-
var playHeight = typeof options.playHeight !== 'undefined' ? options.playHeight : getConstraintsProperty(constraints,
|
|
11112
|
+
var playWidth = typeof options.playWidth !== 'undefined' ? options.playWidth : getConstraintsProperty(constraints, CONSTRAINT_VIDEO_WIDTH, 0);
|
|
11113
|
+
var playHeight = typeof options.playHeight !== 'undefined' ? options.playHeight : getConstraintsProperty(constraints, CONSTRAINT_VIDEO_HEIGHT, 0);
|
|
11092
11114
|
var stripCodecs = options.stripCodecs || [];
|
|
11093
11115
|
var resolution = {};
|
|
11094
11116
|
var published_ = false;
|
|
@@ -11143,6 +11165,8 @@ var createSession = function createSession(options) {
|
|
|
11143
11165
|
var _sdp = sdp;
|
|
11144
11166
|
if (_codecOptions) _sdp = util.SDP.writeFmtp(sdp, _codecOptions, "opus");
|
|
11145
11167
|
_sdp = sdpHookHandler(_sdp, sdpHook);
|
|
11168
|
+
// Adjust publishing bitrate #WCS-4013
|
|
11169
|
+
_sdp = util.setPublishingBitrate(_sdp, mediaConnection, minBitrate, maxBitrate);
|
|
11146
11170
|
mediaConnection.setRemoteSdp(_sdp).then(function () {});
|
|
11147
11171
|
return;
|
|
11148
11172
|
}
|
|
@@ -12993,6 +13017,62 @@ var SDP = {
|
|
|
12993
13017
|
}
|
|
12994
13018
|
}
|
|
12995
13019
|
return result;
|
|
13020
|
+
},
|
|
13021
|
+
setPublishingBitrate: function setPublishingBitrate(sdp, minBitrate, maxBitrate) {
|
|
13022
|
+
if (sdp && (minBitrate || maxBitrate)) {
|
|
13023
|
+
var sdpArray = sdp.split("\n");
|
|
13024
|
+
var i;
|
|
13025
|
+
var rtpmap = -1,
|
|
13026
|
+
codec = "";
|
|
13027
|
+
var matches;
|
|
13028
|
+
var bitrateString = "";
|
|
13029
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
13030
|
+
if (sdpArray[i].startsWith("a=rtpmap")) {
|
|
13031
|
+
matches = sdpArray[i].match("a=rtpmap:(.+) (.+)/.*");
|
|
13032
|
+
if (matches && matches.length > 2) {
|
|
13033
|
+
rtpmap = parseInt(matches[1], 10);
|
|
13034
|
+
codec = matches[2];
|
|
13035
|
+
}
|
|
13036
|
+
} else {
|
|
13037
|
+
if (codec === "H264" || codec === "VP8") {
|
|
13038
|
+
if (sdpArray[i].startsWith("a=fmtp:" + rtpmap)) {
|
|
13039
|
+
bitrateString = this.getBitrateString(sdpArray[i], minBitrate, maxBitrate);
|
|
13040
|
+
if (bitrateString) {
|
|
13041
|
+
sdpArray[i] += ";" + bitrateString;
|
|
13042
|
+
}
|
|
13043
|
+
} else {
|
|
13044
|
+
bitrateString = this.getBitrateString("", minBitrate, maxBitrate);
|
|
13045
|
+
if (bitrateString) {
|
|
13046
|
+
sdpArray[i] = "a=fmtp:" + rtpmap + " " + bitrateString + "\r\n" + sdpArray[i];
|
|
13047
|
+
}
|
|
13048
|
+
}
|
|
13049
|
+
codec = "";
|
|
13050
|
+
rtpmap = -1;
|
|
13051
|
+
}
|
|
13052
|
+
}
|
|
13053
|
+
}
|
|
13054
|
+
var newSDP = "";
|
|
13055
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
13056
|
+
if (sdpArray[i] != "") {
|
|
13057
|
+
newSDP += sdpArray[i] + "\n";
|
|
13058
|
+
}
|
|
13059
|
+
}
|
|
13060
|
+
return newSDP;
|
|
13061
|
+
}
|
|
13062
|
+
return sdp;
|
|
13063
|
+
},
|
|
13064
|
+
getBitrateString: function getBitrateString(string, minBitrate, maxBitrate) {
|
|
13065
|
+
var bitrateString = "";
|
|
13066
|
+
if (minBitrate && string.indexOf("x-google-min-bitrate") == -1) {
|
|
13067
|
+
bitrateString += "x-google-min-bitrate=" + minBitrate;
|
|
13068
|
+
}
|
|
13069
|
+
if (maxBitrate && string.indexOf("x-google-max-bitrate") == -1) {
|
|
13070
|
+
if (bitrateString) {
|
|
13071
|
+
bitrateString += ";";
|
|
13072
|
+
}
|
|
13073
|
+
bitrateString += "x-google-max-bitrate=" + maxBitrate;
|
|
13074
|
+
}
|
|
13075
|
+
return bitrateString;
|
|
12996
13076
|
}
|
|
12997
13077
|
};
|
|
12998
13078
|
var logger = function logger() {
|
|
@@ -13236,6 +13316,18 @@ var isPromise = function isPromise(object) {
|
|
|
13236
13316
|
}
|
|
13237
13317
|
return false;
|
|
13238
13318
|
};
|
|
13319
|
+
var setPublishingBitrate = function setPublishingBitrate(sdp, mediaConnection, minBitrate, maxBitrate) {
|
|
13320
|
+
if (minBitrate || maxBitrate) {
|
|
13321
|
+
if (sdp && Browser.isChrome() || Browser.isSafariWebRTC()) {
|
|
13322
|
+
// Set publishing bitrate constraints via remote SDP
|
|
13323
|
+
sdp = SDP.setPublishingBitrate(sdp, minBitrate, maxBitrate);
|
|
13324
|
+
} else if (mediaConnection) {
|
|
13325
|
+
// Set publishing bitrate via sender encodings if SDP feature is not supported
|
|
13326
|
+
mediaConnection.setPublishingBitrate(minBitrate, maxBitrate);
|
|
13327
|
+
}
|
|
13328
|
+
}
|
|
13329
|
+
return sdp;
|
|
13330
|
+
};
|
|
13239
13331
|
module.exports = {
|
|
13240
13332
|
isEmptyObject: isEmptyObject,
|
|
13241
13333
|
copyObjectToArray: copyObjectToArray,
|
|
@@ -13246,7 +13338,8 @@ module.exports = {
|
|
|
13246
13338
|
logger: logger,
|
|
13247
13339
|
stripCodecs: stripCodecs,
|
|
13248
13340
|
getCurrentCodecAndSampleRate: getCurrentCodecAndSampleRate,
|
|
13249
|
-
isPromise: isPromise
|
|
13341
|
+
isPromise: isPromise,
|
|
13342
|
+
setPublishingBitrate: setPublishingBitrate
|
|
13250
13343
|
};
|
|
13251
13344
|
|
|
13252
13345
|
},{}],45:[function(require,module,exports){
|
|
@@ -16158,15 +16158,15 @@ var _require = require('uuid'),
|
|
|
16158
16158
|
var constants = require("./constants");
|
|
16159
16159
|
var util = require('./util');
|
|
16160
16160
|
var LoggerObject = require('./util').logger;
|
|
16161
|
+
var Promise = require('promise-polyfill');
|
|
16162
|
+
var KalmanFilter = require('kalmanjs');
|
|
16163
|
+
var browserDetails = require('webrtc-adapter')["default"].browserDetails;
|
|
16164
|
+
var LOG_PREFIX = "core";
|
|
16161
16165
|
var coreLogger;
|
|
16162
16166
|
var loggerConf = {
|
|
16163
16167
|
push: false,
|
|
16164
16168
|
severity: "INFO"
|
|
16165
16169
|
};
|
|
16166
|
-
var Promise = require('promise-polyfill');
|
|
16167
|
-
var KalmanFilter = require('kalmanjs');
|
|
16168
|
-
var browserDetails = require('webrtc-adapter')["default"].browserDetails;
|
|
16169
|
-
var LOG_PREFIX = "core";
|
|
16170
16170
|
var isUsingTemasysPlugin = false;
|
|
16171
16171
|
|
|
16172
16172
|
/**
|
|
@@ -16178,7 +16178,6 @@ var STREAM_EVENT = constants.STREAM_EVENT;
|
|
|
16178
16178
|
var STREAM_EVENT_TYPE = constants.STREAM_EVENT_TYPE;
|
|
16179
16179
|
var STREAM_STATUS = constants.STREAM_STATUS;
|
|
16180
16180
|
var CALL_STATUS = constants.CALL_STATUS;
|
|
16181
|
-
var TRANSPORT_TYPE = constants.TRANSPORT_TYPE;
|
|
16182
16181
|
var CONNECTION_QUALITY = constants.CONNECTION_QUALITY;
|
|
16183
16182
|
var ERROR_INFO = constants.ERROR_INFO;
|
|
16184
16183
|
var VIDEO_RATE_GOOD_QUALITY_PERCENT_DIFFERENCE = 20;
|
|
@@ -16187,6 +16186,18 @@ var LOW_VIDEO_RATE_THRESHOLD_BAD_PERFECT = 50000;
|
|
|
16187
16186
|
var LOW_VIDEO_RATE_BAD_QUALITY_PERCENT_DIFFERENCE = 150;
|
|
16188
16187
|
var OUTBOUND_VIDEO_RATE = "outboundVideoRate";
|
|
16189
16188
|
var INBOUND_VIDEO_RATE = "inboundVideoRate";
|
|
16189
|
+
var CONSTRAINT_AUDIO = "audio";
|
|
16190
|
+
var CONSTRAINT_AUDIO_STEREO = "stereo";
|
|
16191
|
+
var CONSTRAINT_AUDIO_BITRATE = "bitrate";
|
|
16192
|
+
var CONSTRAINT_AUDIO_FEC = "fec";
|
|
16193
|
+
var CONSTRAINT_AUDIO_OUTPUT_ID = "outputId";
|
|
16194
|
+
var CONSTRAINT_VIDEO = "video";
|
|
16195
|
+
var CONSTRAINT_VIDEO_BITRATE = "video.bitrate";
|
|
16196
|
+
var CONSTRAINT_VIDEO_MIN_BITRATE = "video.minBitrate";
|
|
16197
|
+
var CONSTRAINT_VIDEO_MAX_BITRATE = "video.maxBitrate";
|
|
16198
|
+
var CONSTRAINT_VIDEO_QUALITY = "video.quality";
|
|
16199
|
+
var CONSTRAINT_VIDEO_WIDTH = "video.width";
|
|
16200
|
+
var CONSTRAINT_VIDEO_HEIGHT = "video.height";
|
|
16190
16201
|
var MediaProvider = {};
|
|
16191
16202
|
var sessions = {};
|
|
16192
16203
|
var initialized = false;
|
|
@@ -17016,9 +17027,9 @@ var createSession = function createSession(options) {
|
|
|
17016
17027
|
var disableConstraintsNormalization = options.disableConstraintsNormalization;
|
|
17017
17028
|
}
|
|
17018
17029
|
var audioOutputId;
|
|
17019
|
-
var audioProperty = getConstraintsProperty(constraints,
|
|
17030
|
+
var audioProperty = getConstraintsProperty(constraints, CONSTRAINT_AUDIO, undefined);
|
|
17020
17031
|
if (_typeof(audioProperty) === 'object') {
|
|
17021
|
-
audioOutputId = getConstraintsProperty(audioProperty,
|
|
17032
|
+
audioOutputId = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_OUTPUT_ID, 0);
|
|
17022
17033
|
}
|
|
17023
17034
|
var stripCodecs = options.stripCodecs || [];
|
|
17024
17035
|
// Receive media
|
|
@@ -17033,6 +17044,9 @@ var createSession = function createSession(options) {
|
|
|
17033
17044
|
var sipHeaders = options.sipHeaders;
|
|
17034
17045
|
var videoContentHint = options.videoContentHint;
|
|
17035
17046
|
var useControls = options.useControls;
|
|
17047
|
+
var minBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MIN_BITRATE, 0);
|
|
17048
|
+
var maxBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MAX_BITRATE, 0);
|
|
17049
|
+
|
|
17036
17050
|
/**
|
|
17037
17051
|
* Represents sip call.
|
|
17038
17052
|
*
|
|
@@ -17069,6 +17083,8 @@ var createSession = function createSession(options) {
|
|
|
17069
17083
|
//set remote sdp
|
|
17070
17084
|
if (sdp && sdp !== '') {
|
|
17071
17085
|
sdp = sdpHookHandler(sdp, sdpHook);
|
|
17086
|
+
// Adjust publishing bitrate #WCS-4013
|
|
17087
|
+
sdp = util.setPublishingBitrate(sdp, mediaConnection, minBitrate, maxBitrate);
|
|
17072
17088
|
mediaConnection.setRemoteSdp(sdp, hasTransferredCall, id_).then(function () {});
|
|
17073
17089
|
return;
|
|
17074
17090
|
}
|
|
@@ -17234,6 +17250,8 @@ var createSession = function createSession(options) {
|
|
|
17234
17250
|
status_ = CALL_STATUS.PENDING;
|
|
17235
17251
|
var sdp;
|
|
17236
17252
|
var sdpHook = answerOptions.sdpHook;
|
|
17253
|
+
var minBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MIN_BITRATE, 0);
|
|
17254
|
+
var maxBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MAX_BITRATE, 0);
|
|
17237
17255
|
sipSDP = answerOptions.sipSDP;
|
|
17238
17256
|
sipHeaders = answerOptions.sipHeaders;
|
|
17239
17257
|
if (!remoteSdpCache[id_]) {
|
|
@@ -17241,6 +17259,8 @@ var createSession = function createSession(options) {
|
|
|
17241
17259
|
throw new Error("No remote sdp available");
|
|
17242
17260
|
} else {
|
|
17243
17261
|
sdp = sdpHookHandler(remoteSdpCache[id_], sdpHook);
|
|
17262
|
+
// Adjust publishing bitrate #WCS-4013
|
|
17263
|
+
sdp = util.setPublishingBitrate(sdp, null, minBitrate, maxBitrate);
|
|
17244
17264
|
delete remoteSdpCache[id_];
|
|
17245
17265
|
}
|
|
17246
17266
|
if (util.SDP.matchPrefix(sdp, "m=video").length == 0) {
|
|
@@ -17274,6 +17294,8 @@ var createSession = function createSession(options) {
|
|
|
17274
17294
|
useControls: useControls
|
|
17275
17295
|
}).then(function (newConnection) {
|
|
17276
17296
|
mediaConnection = newConnection;
|
|
17297
|
+
// Set publishing bitrate via sender encodings if SDP feature is not supported
|
|
17298
|
+
mediaConnection.setPublishingBitrate(minBitrate, maxBitrate);
|
|
17277
17299
|
return mediaConnection.setRemoteSdp(sdp);
|
|
17278
17300
|
}).then(function () {
|
|
17279
17301
|
return mediaConnection.createAnswer({
|
|
@@ -17808,15 +17830,15 @@ var createSession = function createSession(options) {
|
|
|
17808
17830
|
// Receive media
|
|
17809
17831
|
var receiveAudio;
|
|
17810
17832
|
var audioOutputId;
|
|
17811
|
-
var audioProperty = getConstraintsProperty(constraints,
|
|
17833
|
+
var audioProperty = getConstraintsProperty(constraints, CONSTRAINT_AUDIO, undefined);
|
|
17812
17834
|
if (typeof audioProperty === 'boolean') {
|
|
17813
17835
|
receiveAudio = audioProperty;
|
|
17814
17836
|
} else if (_typeof(audioProperty) === 'object') {
|
|
17815
17837
|
receiveAudio = true;
|
|
17816
|
-
var _stereo = getConstraintsProperty(audioProperty,
|
|
17817
|
-
var _bitrate = getConstraintsProperty(audioProperty,
|
|
17818
|
-
var _fec = getConstraintsProperty(audioProperty,
|
|
17819
|
-
audioOutputId = getConstraintsProperty(audioProperty,
|
|
17838
|
+
var _stereo = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_STEREO, 0);
|
|
17839
|
+
var _bitrate = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_BITRATE, 0);
|
|
17840
|
+
var _fec = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_FEC, 0);
|
|
17841
|
+
audioOutputId = getConstraintsProperty(audioProperty, CONSTRAINT_AUDIO_OUTPUT_ID, 0);
|
|
17820
17842
|
var _codecOptions = "";
|
|
17821
17843
|
if (_bitrate) _codecOptions += "maxaveragebitrate=" + _bitrate + ";";
|
|
17822
17844
|
if (_stereo) _codecOptions += "stereo=1;sprop-stereo=1;";
|
|
@@ -17825,7 +17847,7 @@ var createSession = function createSession(options) {
|
|
|
17825
17847
|
receiveAudio = typeof options.receiveAudio !== 'undefined' ? options.receiveAudio : true;
|
|
17826
17848
|
}
|
|
17827
17849
|
var receiveVideo;
|
|
17828
|
-
var videoProperty = getConstraintsProperty(constraints,
|
|
17850
|
+
var videoProperty = getConstraintsProperty(constraints, CONSTRAINT_VIDEO, undefined);
|
|
17829
17851
|
if (typeof videoProperty === 'boolean') {
|
|
17830
17852
|
receiveVideo = videoProperty;
|
|
17831
17853
|
} else if (_typeof(videoProperty) === 'object') {
|
|
@@ -17834,16 +17856,16 @@ var createSession = function createSession(options) {
|
|
|
17834
17856
|
receiveVideo = typeof options.receiveVideo !== 'undefined' ? options.receiveVideo : true;
|
|
17835
17857
|
}
|
|
17836
17858
|
// Bitrate
|
|
17837
|
-
var bitrate = getConstraintsProperty(constraints,
|
|
17838
|
-
var minBitrate = getConstraintsProperty(constraints,
|
|
17839
|
-
var maxBitrate = getConstraintsProperty(constraints,
|
|
17859
|
+
var bitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_BITRATE, 0);
|
|
17860
|
+
var minBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MIN_BITRATE, 0);
|
|
17861
|
+
var maxBitrate = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_MAX_BITRATE, 0);
|
|
17840
17862
|
|
|
17841
17863
|
// Quality
|
|
17842
|
-
var quality = getConstraintsProperty(constraints,
|
|
17864
|
+
var quality = getConstraintsProperty(constraints, CONSTRAINT_VIDEO_QUALITY, 0);
|
|
17843
17865
|
if (quality > 100) quality = 100;
|
|
17844
17866
|
// Play resolution
|
|
17845
|
-
var playWidth = typeof options.playWidth !== 'undefined' ? options.playWidth : getConstraintsProperty(constraints,
|
|
17846
|
-
var playHeight = typeof options.playHeight !== 'undefined' ? options.playHeight : getConstraintsProperty(constraints,
|
|
17867
|
+
var playWidth = typeof options.playWidth !== 'undefined' ? options.playWidth : getConstraintsProperty(constraints, CONSTRAINT_VIDEO_WIDTH, 0);
|
|
17868
|
+
var playHeight = typeof options.playHeight !== 'undefined' ? options.playHeight : getConstraintsProperty(constraints, CONSTRAINT_VIDEO_HEIGHT, 0);
|
|
17847
17869
|
var stripCodecs = options.stripCodecs || [];
|
|
17848
17870
|
var resolution = {};
|
|
17849
17871
|
var published_ = false;
|
|
@@ -17898,6 +17920,8 @@ var createSession = function createSession(options) {
|
|
|
17898
17920
|
var _sdp = sdp;
|
|
17899
17921
|
if (_codecOptions) _sdp = util.SDP.writeFmtp(sdp, _codecOptions, "opus");
|
|
17900
17922
|
_sdp = sdpHookHandler(_sdp, sdpHook);
|
|
17923
|
+
// Adjust publishing bitrate #WCS-4013
|
|
17924
|
+
_sdp = util.setPublishingBitrate(_sdp, mediaConnection, minBitrate, maxBitrate);
|
|
17901
17925
|
mediaConnection.setRemoteSdp(_sdp).then(function () {});
|
|
17902
17926
|
return;
|
|
17903
17927
|
}
|
|
@@ -19748,6 +19772,62 @@ var SDP = {
|
|
|
19748
19772
|
}
|
|
19749
19773
|
}
|
|
19750
19774
|
return result;
|
|
19775
|
+
},
|
|
19776
|
+
setPublishingBitrate: function setPublishingBitrate(sdp, minBitrate, maxBitrate) {
|
|
19777
|
+
if (sdp && (minBitrate || maxBitrate)) {
|
|
19778
|
+
var sdpArray = sdp.split("\n");
|
|
19779
|
+
var i;
|
|
19780
|
+
var rtpmap = -1,
|
|
19781
|
+
codec = "";
|
|
19782
|
+
var matches;
|
|
19783
|
+
var bitrateString = "";
|
|
19784
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
19785
|
+
if (sdpArray[i].startsWith("a=rtpmap")) {
|
|
19786
|
+
matches = sdpArray[i].match("a=rtpmap:(.+) (.+)/.*");
|
|
19787
|
+
if (matches && matches.length > 2) {
|
|
19788
|
+
rtpmap = parseInt(matches[1], 10);
|
|
19789
|
+
codec = matches[2];
|
|
19790
|
+
}
|
|
19791
|
+
} else {
|
|
19792
|
+
if (codec === "H264" || codec === "VP8") {
|
|
19793
|
+
if (sdpArray[i].startsWith("a=fmtp:" + rtpmap)) {
|
|
19794
|
+
bitrateString = this.getBitrateString(sdpArray[i], minBitrate, maxBitrate);
|
|
19795
|
+
if (bitrateString) {
|
|
19796
|
+
sdpArray[i] += ";" + bitrateString;
|
|
19797
|
+
}
|
|
19798
|
+
} else {
|
|
19799
|
+
bitrateString = this.getBitrateString("", minBitrate, maxBitrate);
|
|
19800
|
+
if (bitrateString) {
|
|
19801
|
+
sdpArray[i] = "a=fmtp:" + rtpmap + " " + bitrateString + "\r\n" + sdpArray[i];
|
|
19802
|
+
}
|
|
19803
|
+
}
|
|
19804
|
+
codec = "";
|
|
19805
|
+
rtpmap = -1;
|
|
19806
|
+
}
|
|
19807
|
+
}
|
|
19808
|
+
}
|
|
19809
|
+
var newSDP = "";
|
|
19810
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
19811
|
+
if (sdpArray[i] != "") {
|
|
19812
|
+
newSDP += sdpArray[i] + "\n";
|
|
19813
|
+
}
|
|
19814
|
+
}
|
|
19815
|
+
return newSDP;
|
|
19816
|
+
}
|
|
19817
|
+
return sdp;
|
|
19818
|
+
},
|
|
19819
|
+
getBitrateString: function getBitrateString(string, minBitrate, maxBitrate) {
|
|
19820
|
+
var bitrateString = "";
|
|
19821
|
+
if (minBitrate && string.indexOf("x-google-min-bitrate") == -1) {
|
|
19822
|
+
bitrateString += "x-google-min-bitrate=" + minBitrate;
|
|
19823
|
+
}
|
|
19824
|
+
if (maxBitrate && string.indexOf("x-google-max-bitrate") == -1) {
|
|
19825
|
+
if (bitrateString) {
|
|
19826
|
+
bitrateString += ";";
|
|
19827
|
+
}
|
|
19828
|
+
bitrateString += "x-google-max-bitrate=" + maxBitrate;
|
|
19829
|
+
}
|
|
19830
|
+
return bitrateString;
|
|
19751
19831
|
}
|
|
19752
19832
|
};
|
|
19753
19833
|
var logger = function logger() {
|
|
@@ -19991,6 +20071,18 @@ var isPromise = function isPromise(object) {
|
|
|
19991
20071
|
}
|
|
19992
20072
|
return false;
|
|
19993
20073
|
};
|
|
20074
|
+
var setPublishingBitrate = function setPublishingBitrate(sdp, mediaConnection, minBitrate, maxBitrate) {
|
|
20075
|
+
if (minBitrate || maxBitrate) {
|
|
20076
|
+
if (sdp && Browser.isChrome() || Browser.isSafariWebRTC()) {
|
|
20077
|
+
// Set publishing bitrate constraints via remote SDP
|
|
20078
|
+
sdp = SDP.setPublishingBitrate(sdp, minBitrate, maxBitrate);
|
|
20079
|
+
} else if (mediaConnection) {
|
|
20080
|
+
// Set publishing bitrate via sender encodings if SDP feature is not supported
|
|
20081
|
+
mediaConnection.setPublishingBitrate(minBitrate, maxBitrate);
|
|
20082
|
+
}
|
|
20083
|
+
}
|
|
20084
|
+
return sdp;
|
|
20085
|
+
};
|
|
19994
20086
|
module.exports = {
|
|
19995
20087
|
isEmptyObject: isEmptyObject,
|
|
19996
20088
|
copyObjectToArray: copyObjectToArray,
|
|
@@ -20001,7 +20093,8 @@ module.exports = {
|
|
|
20001
20093
|
logger: logger,
|
|
20002
20094
|
stripCodecs: stripCodecs,
|
|
20003
20095
|
getCurrentCodecAndSampleRate: getCurrentCodecAndSampleRate,
|
|
20004
|
-
isPromise: isPromise
|
|
20096
|
+
isPromise: isPromise,
|
|
20097
|
+
setPublishingBitrate: setPublishingBitrate
|
|
20005
20098
|
};
|
|
20006
20099
|
|
|
20007
20100
|
},{}],45:[function(require,module,exports){
|