@flashphoner/websdk 2.0.238 → 2.0.240
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/dependencies/js/utils.js +16 -14
- package/examples/demo/streaming/hls-player/hls-player.js +108 -13
- package/examples/demo/streaming/hls-player/player-page.html +13 -2
- 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
|
}
|
|
@@ -10520,6 +10544,62 @@ var SDP = {
|
|
|
10520
10544
|
}
|
|
10521
10545
|
}
|
|
10522
10546
|
return result;
|
|
10547
|
+
},
|
|
10548
|
+
setPublishingBitrate: function setPublishingBitrate(sdp, minBitrate, maxBitrate) {
|
|
10549
|
+
if (sdp && (minBitrate || maxBitrate)) {
|
|
10550
|
+
var sdpArray = sdp.split("\n");
|
|
10551
|
+
var i;
|
|
10552
|
+
var rtpmap = -1,
|
|
10553
|
+
codec = "";
|
|
10554
|
+
var matches;
|
|
10555
|
+
var bitrateString = "";
|
|
10556
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
10557
|
+
if (sdpArray[i].startsWith("a=rtpmap")) {
|
|
10558
|
+
matches = sdpArray[i].match("a=rtpmap:(.+) (.+)/.*");
|
|
10559
|
+
if (matches && matches.length > 2) {
|
|
10560
|
+
rtpmap = parseInt(matches[1], 10);
|
|
10561
|
+
codec = matches[2];
|
|
10562
|
+
}
|
|
10563
|
+
} else {
|
|
10564
|
+
if (codec === "H264" || codec === "VP8") {
|
|
10565
|
+
if (sdpArray[i].startsWith("a=fmtp:" + rtpmap)) {
|
|
10566
|
+
bitrateString = this.getBitrateString(sdpArray[i], minBitrate, maxBitrate);
|
|
10567
|
+
if (bitrateString) {
|
|
10568
|
+
sdpArray[i] += ";" + bitrateString;
|
|
10569
|
+
}
|
|
10570
|
+
} else {
|
|
10571
|
+
bitrateString = this.getBitrateString("", minBitrate, maxBitrate);
|
|
10572
|
+
if (bitrateString) {
|
|
10573
|
+
sdpArray[i] = "a=fmtp:" + rtpmap + " " + bitrateString + "\r\n" + sdpArray[i];
|
|
10574
|
+
}
|
|
10575
|
+
}
|
|
10576
|
+
codec = "";
|
|
10577
|
+
rtpmap = -1;
|
|
10578
|
+
}
|
|
10579
|
+
}
|
|
10580
|
+
}
|
|
10581
|
+
var newSDP = "";
|
|
10582
|
+
for (i = 0; i < sdpArray.length; i++) {
|
|
10583
|
+
if (sdpArray[i] != "") {
|
|
10584
|
+
newSDP += sdpArray[i] + "\n";
|
|
10585
|
+
}
|
|
10586
|
+
}
|
|
10587
|
+
return newSDP;
|
|
10588
|
+
}
|
|
10589
|
+
return sdp;
|
|
10590
|
+
},
|
|
10591
|
+
getBitrateString: function getBitrateString(string, minBitrate, maxBitrate) {
|
|
10592
|
+
var bitrateString = "";
|
|
10593
|
+
if (minBitrate && string.indexOf("x-google-min-bitrate") == -1) {
|
|
10594
|
+
bitrateString += "x-google-min-bitrate=" + minBitrate;
|
|
10595
|
+
}
|
|
10596
|
+
if (maxBitrate && string.indexOf("x-google-max-bitrate") == -1) {
|
|
10597
|
+
if (bitrateString) {
|
|
10598
|
+
bitrateString += ";";
|
|
10599
|
+
}
|
|
10600
|
+
bitrateString += "x-google-max-bitrate=" + maxBitrate;
|
|
10601
|
+
}
|
|
10602
|
+
return bitrateString;
|
|
10523
10603
|
}
|
|
10524
10604
|
};
|
|
10525
10605
|
var logger = function logger() {
|
|
@@ -10763,6 +10843,18 @@ var isPromise = function isPromise(object) {
|
|
|
10763
10843
|
}
|
|
10764
10844
|
return false;
|
|
10765
10845
|
};
|
|
10846
|
+
var setPublishingBitrate = function setPublishingBitrate(sdp, mediaConnection, minBitrate, maxBitrate) {
|
|
10847
|
+
if (minBitrate || maxBitrate) {
|
|
10848
|
+
if (sdp && Browser.isChrome() || Browser.isSafariWebRTC()) {
|
|
10849
|
+
// Set publishing bitrate constraints via remote SDP
|
|
10850
|
+
sdp = SDP.setPublishingBitrate(sdp, minBitrate, maxBitrate);
|
|
10851
|
+
} else if (mediaConnection) {
|
|
10852
|
+
// Set publishing bitrate via sender encodings if SDP feature is not supported
|
|
10853
|
+
mediaConnection.setPublishingBitrate(minBitrate, maxBitrate);
|
|
10854
|
+
}
|
|
10855
|
+
}
|
|
10856
|
+
return sdp;
|
|
10857
|
+
};
|
|
10766
10858
|
module.exports = {
|
|
10767
10859
|
isEmptyObject: isEmptyObject,
|
|
10768
10860
|
copyObjectToArray: copyObjectToArray,
|
|
@@ -10773,7 +10865,8 @@ module.exports = {
|
|
|
10773
10865
|
logger: logger,
|
|
10774
10866
|
stripCodecs: stripCodecs,
|
|
10775
10867
|
getCurrentCodecAndSampleRate: getCurrentCodecAndSampleRate,
|
|
10776
|
-
isPromise: isPromise
|
|
10868
|
+
isPromise: isPromise,
|
|
10869
|
+
setPublishingBitrate: setPublishingBitrate
|
|
10777
10870
|
};
|
|
10778
10871
|
|
|
10779
10872
|
},{}],41:[function(require,module,exports){
|
|
@@ -10849,7 +10942,7 @@ var createConnection = function createConnection(options) {
|
|
|
10849
10942
|
if (localVideo.srcObject) {
|
|
10850
10943
|
localVideo.id = id + "-local";
|
|
10851
10944
|
setContentHint(localVideo.srcObject, videoContentHint);
|
|
10852
|
-
connection
|
|
10945
|
+
addStreamTracks(connection, localVideo.srcObject);
|
|
10853
10946
|
} else {
|
|
10854
10947
|
localVideo = null;
|
|
10855
10948
|
}
|
|
@@ -10892,7 +10985,7 @@ var createConnection = function createConnection(options) {
|
|
|
10892
10985
|
localVideo = cachedVideo;
|
|
10893
10986
|
localVideo.id = id;
|
|
10894
10987
|
setContentHint(localVideo.srcObject, videoContentHint);
|
|
10895
|
-
connection
|
|
10988
|
+
addStreamTracks(connection, localVideo.srcObject);
|
|
10896
10989
|
}
|
|
10897
10990
|
} else {
|
|
10898
10991
|
// There is a custom video element, get its id if set #WCS-3606
|
|
@@ -10939,6 +11032,11 @@ var createConnection = function createConnection(options) {
|
|
|
10939
11032
|
}
|
|
10940
11033
|
});
|
|
10941
11034
|
}
|
|
11035
|
+
function addStreamTracks(pc, stream) {
|
|
11036
|
+
stream.getTracks().forEach(function (track) {
|
|
11037
|
+
pc.addTrack(track, stream);
|
|
11038
|
+
});
|
|
11039
|
+
}
|
|
10942
11040
|
connection.ontrack = function (event) {
|
|
10943
11041
|
if (remoteVideo) {
|
|
10944
11042
|
remoteVideo.srcObject = event.streams[0];
|
|
@@ -11532,6 +11630,20 @@ var createConnection = function createConnection(options) {
|
|
|
11532
11630
|
logger.info(LOG_PREFIX, "Switch to cam");
|
|
11533
11631
|
screenShare = false;
|
|
11534
11632
|
};
|
|
11633
|
+
var setPublishingBitrate = function setPublishingBitrate(minBitrate, maxBitrate) {
|
|
11634
|
+
var senders = connection.getSenders();
|
|
11635
|
+
senders.forEach(function (sender) {
|
|
11636
|
+
if (sender.track.kind == "video" && maxBitrate) {
|
|
11637
|
+
var parameters = sender.getParameters();
|
|
11638
|
+
for (var i = 0; i < parameters.encodings.length; i++) {
|
|
11639
|
+
if (!parameters.encodings[i].maxBitrate) {
|
|
11640
|
+
parameters.encodings[i].maxBitrate = maxBitrate * 1000;
|
|
11641
|
+
}
|
|
11642
|
+
}
|
|
11643
|
+
sender.setParameters(parameters).then(function () {});
|
|
11644
|
+
}
|
|
11645
|
+
});
|
|
11646
|
+
};
|
|
11535
11647
|
var exports = {};
|
|
11536
11648
|
exports.state = state;
|
|
11537
11649
|
exports.createOffer = createOffer;
|
|
@@ -11558,6 +11670,7 @@ var createConnection = function createConnection(options) {
|
|
|
11558
11670
|
exports.switchMic = switchMic;
|
|
11559
11671
|
exports.switchToScreen = switchToScreen;
|
|
11560
11672
|
exports.switchToCam = switchToCam;
|
|
11673
|
+
exports.setPublishingBitrate = setPublishingBitrate;
|
|
11561
11674
|
connections[id] = exports;
|
|
11562
11675
|
resolve(exports);
|
|
11563
11676
|
});
|