@whereby.com/media 1.6.0 → 1.6.1
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/dist/index.cjs +63 -57
- package/dist/index.mjs +63 -57
- package/dist/legacy-esm.js +63 -57
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -3072,22 +3072,15 @@ class Session {
|
|
|
3072
3072
|
return this.pc && this.pc.connectionState === "connected";
|
|
3073
3073
|
}
|
|
3074
3074
|
replaceTrack(oldTrack, newTrack) {
|
|
3075
|
+
if (!newTrack) {
|
|
3076
|
+
rtcStats.sendEvent("replaceTrackP2P", { nullTrack: "newTrack", oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind });
|
|
3077
|
+
}
|
|
3075
3078
|
const pc = this.pc;
|
|
3076
3079
|
if (!pc)
|
|
3077
3080
|
return false;
|
|
3078
3081
|
const senders = pc.getSenders();
|
|
3079
|
-
function dbg(msg) {
|
|
3080
|
-
const tr = (t) => t && `id:${t.id},kind:${t.kind},state:${t.readyState}`;
|
|
3081
|
-
logger$5.warn(`${msg}. newTrack:${tr(newTrack)}, oldTrack:${tr(oldTrack)}, sender tracks: ${JSON.stringify(senders.map((s) => `s ${tr(s.track)}`))}, sender first codecs: ${JSON.stringify(senders.map((s) => (s.getParameters().codecs || [])[0]))}`);
|
|
3082
|
-
}
|
|
3083
|
-
if (!senders.length) {
|
|
3084
|
-
dbg("No senders!");
|
|
3085
|
-
}
|
|
3086
3082
|
if (!oldTrack) {
|
|
3087
3083
|
oldTrack = (senders.find((s) => s.track && s.track.kind === newTrack.kind) || {}).track;
|
|
3088
|
-
if (!oldTrack) {
|
|
3089
|
-
dbg("No sender with same kind! Add new track then.");
|
|
3090
|
-
}
|
|
3091
3084
|
}
|
|
3092
3085
|
if (window.RTCRtpSender && window.RTCRtpSender.prototype.replaceTrack) {
|
|
3093
3086
|
if (oldTrack) {
|
|
@@ -3095,8 +3088,8 @@ class Session {
|
|
|
3095
3088
|
for (let i = 0; i < senders.length; i++) {
|
|
3096
3089
|
const sender = senders[i];
|
|
3097
3090
|
const track = sender.track;
|
|
3098
|
-
if (!
|
|
3099
|
-
|
|
3091
|
+
if (!track) {
|
|
3092
|
+
rtcStats.sendEvent("replaceTrackP2P", { nullTrack: "trackFromSender", oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind, newTrackKind: newTrack === null || newTrack === void 0 ? void 0 : newTrack.kind });
|
|
3100
3093
|
}
|
|
3101
3094
|
if (track.id === newTrack.id) {
|
|
3102
3095
|
return Promise.resolve(newTrack);
|
|
@@ -3124,7 +3117,6 @@ class Session {
|
|
|
3124
3117
|
if (3 < ++retried) {
|
|
3125
3118
|
clearInterval(timer);
|
|
3126
3119
|
timer = null;
|
|
3127
|
-
dbg("No sender track to replace");
|
|
3128
3120
|
reject("No sender track to replace");
|
|
3129
3121
|
}
|
|
3130
3122
|
return;
|
|
@@ -3138,7 +3130,6 @@ class Session {
|
|
|
3138
3130
|
}
|
|
3139
3131
|
const stream = this.streams.find((s) => s.getTracks().find((t) => t.id === newTrack.id)) || this.streams[0];
|
|
3140
3132
|
if (!stream) {
|
|
3141
|
-
dbg("No stream?");
|
|
3142
3133
|
return Promise.reject(new Error("replaceTrack: No stream?"));
|
|
3143
3134
|
}
|
|
3144
3135
|
return pc.addTrack(newTrack, stream);
|
|
@@ -4732,21 +4723,6 @@ function createMicAnalyser({ micTrack, params, onScoreUpdated, }) {
|
|
|
4732
4723
|
};
|
|
4733
4724
|
}
|
|
4734
4725
|
|
|
4735
|
-
const maybeTurnOnly = (transportConfig, features) => {
|
|
4736
|
-
if (!features.useOnlyTURN) {
|
|
4737
|
-
return;
|
|
4738
|
-
}
|
|
4739
|
-
transportConfig.iceTransportPolicy = "relay";
|
|
4740
|
-
const filter = {
|
|
4741
|
-
onlyudp: /^turn:.*transport=udp$/,
|
|
4742
|
-
onlytcp: /^turn:.*transport=tcp$/,
|
|
4743
|
-
onlytls: /^turns:.*transport=tcp$/,
|
|
4744
|
-
}[features.useOnlyTURN];
|
|
4745
|
-
if (filter) {
|
|
4746
|
-
transportConfig.iceServers = transportConfig.iceServers.filter((entry) => entry.url && entry.url.match(filter));
|
|
4747
|
-
}
|
|
4748
|
-
};
|
|
4749
|
-
|
|
4750
4726
|
const logger$2 = new Logger();
|
|
4751
4727
|
const MEDIA_QUALITY = Object.freeze({
|
|
4752
4728
|
ok: "ok",
|
|
@@ -4901,6 +4877,56 @@ class VegaMediaQualityMonitor extends EventEmitter {
|
|
|
4901
4877
|
}
|
|
4902
4878
|
}
|
|
4903
4879
|
|
|
4880
|
+
const maybeTurnOnly = (transportConfig, features) => {
|
|
4881
|
+
if (!features.useOnlyTURN) {
|
|
4882
|
+
return;
|
|
4883
|
+
}
|
|
4884
|
+
transportConfig.iceTransportPolicy = "relay";
|
|
4885
|
+
const filter = {
|
|
4886
|
+
onlyudp: /^turn:.*transport=udp$/,
|
|
4887
|
+
onlytcp: /^turn:.*transport=tcp$/,
|
|
4888
|
+
onlytls: /^turns:.*transport=tcp$/,
|
|
4889
|
+
}[features.useOnlyTURN];
|
|
4890
|
+
if (filter) {
|
|
4891
|
+
transportConfig.iceServers = transportConfig.iceServers.filter((entry) => entry.url && entry.url.match(filter));
|
|
4892
|
+
}
|
|
4893
|
+
};
|
|
4894
|
+
|
|
4895
|
+
function getLayers({ width, height, }, { numberOfActiveVideos, numberOfTemporalLayers, uncappedSingleRemoteVideoOn, }) {
|
|
4896
|
+
const maxSide = Math.max(width, height);
|
|
4897
|
+
let spatialLayer = maxSide >= 480 ? (maxSide >= 960 ? 2 : 1) : 0;
|
|
4898
|
+
let temporalLayer = numberOfTemporalLayers - 1;
|
|
4899
|
+
if (maxSide < 100) {
|
|
4900
|
+
temporalLayer = Math.max(numberOfTemporalLayers - 2, 0);
|
|
4901
|
+
}
|
|
4902
|
+
if (numberOfActiveVideos > 8 && spatialLayer === 0) {
|
|
4903
|
+
temporalLayer = Math.max(numberOfTemporalLayers - 2, 0);
|
|
4904
|
+
}
|
|
4905
|
+
if (numberOfActiveVideos < 4 && maxSide > 300 && spatialLayer === 0) {
|
|
4906
|
+
spatialLayer = 1;
|
|
4907
|
+
}
|
|
4908
|
+
if (uncappedSingleRemoteVideoOn && numberOfActiveVideos === 1) {
|
|
4909
|
+
spatialLayer = 2;
|
|
4910
|
+
temporalLayer = numberOfTemporalLayers - 1;
|
|
4911
|
+
}
|
|
4912
|
+
return { spatialLayer, temporalLayer };
|
|
4913
|
+
}
|
|
4914
|
+
function getNumberOfActiveVideos(consumers) {
|
|
4915
|
+
let numberOfActiveVideos = 0;
|
|
4916
|
+
consumers.forEach((c) => {
|
|
4917
|
+
var _a, _b;
|
|
4918
|
+
if (c._closed || c._paused)
|
|
4919
|
+
return;
|
|
4920
|
+
if (((_a = c._appData) === null || _a === void 0 ? void 0 : _a.source) === "webcam" || ((_b = c._appData) === null || _b === void 0 ? void 0 : _b.source) === "screenvideo")
|
|
4921
|
+
numberOfActiveVideos++;
|
|
4922
|
+
});
|
|
4923
|
+
return numberOfActiveVideos;
|
|
4924
|
+
}
|
|
4925
|
+
function getNumberOfTemporalLayers(consumer) {
|
|
4926
|
+
var _a, _b, _c;
|
|
4927
|
+
return /T3/.test(((_c = (_b = (_a = consumer._rtpParameters) === null || _a === void 0 ? void 0 : _a.encodings) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.scalabilityMode) || "") ? 3 : 2;
|
|
4928
|
+
}
|
|
4929
|
+
|
|
4904
4930
|
var _a$1;
|
|
4905
4931
|
const adapter$1 = (_a$1 = adapterRaw.default) !== null && _a$1 !== void 0 ? _a$1 : adapterRaw;
|
|
4906
4932
|
const logger$1 = new Logger();
|
|
@@ -5827,43 +5853,23 @@ class VegaRtcManager {
|
|
|
5827
5853
|
this._syncIncomingStreamsWithPWA(clientId);
|
|
5828
5854
|
}
|
|
5829
5855
|
updateStreamResolution(streamId, _ignored, { width, height, }) {
|
|
5830
|
-
var _a, _b
|
|
5856
|
+
var _a, _b;
|
|
5831
5857
|
logger$1.info("updateStreamResolution()", { streamId, width, height });
|
|
5832
5858
|
const consumerId = this._streamIdToVideoConsumerId.get(streamId);
|
|
5833
5859
|
const consumer = this._consumers.get(consumerId);
|
|
5834
5860
|
if (!consumer)
|
|
5835
5861
|
return;
|
|
5836
|
-
|
|
5837
|
-
|
|
5838
|
-
|
|
5839
|
-
|
|
5840
|
-
|
|
5841
|
-
|
|
5842
|
-
numberOfActiveVideos++;
|
|
5862
|
+
const numberOfActiveVideos = getNumberOfActiveVideos(this._consumers);
|
|
5863
|
+
const numberOfTemporalLayers = getNumberOfTemporalLayers(consumer);
|
|
5864
|
+
const { spatialLayer, temporalLayer } = getLayers({ width, height }, {
|
|
5865
|
+
numberOfActiveVideos,
|
|
5866
|
+
numberOfTemporalLayers,
|
|
5867
|
+
uncappedSingleRemoteVideoOn: (_a = this._features) === null || _a === void 0 ? void 0 : _a.uncappedSingleRemoteVideoOn,
|
|
5843
5868
|
});
|
|
5844
|
-
let numberOfTemporalLayers = 2;
|
|
5845
|
-
if (/T3/.test(((_c = (_b = (_a = consumer._rtpParameters) === null || _a === void 0 ? void 0 : _a.encodings) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.scalabilityMode) || ""))
|
|
5846
|
-
numberOfTemporalLayers = 3;
|
|
5847
|
-
const maxSide = Math.max(width, height);
|
|
5848
|
-
let spatialLayer = maxSide >= 480 ? (maxSide >= 960 ? 2 : 1) : 0;
|
|
5849
|
-
let temporalLayer = numberOfTemporalLayers - 1;
|
|
5850
|
-
if (maxSide < 100) {
|
|
5851
|
-
temporalLayer = Math.max(numberOfTemporalLayers - 2, 0);
|
|
5852
|
-
}
|
|
5853
|
-
if (numberOfActiveVideos > 8 && spatialLayer === 0) {
|
|
5854
|
-
temporalLayer = Math.max(numberOfTemporalLayers - 2, 0);
|
|
5855
|
-
}
|
|
5856
|
-
if (numberOfActiveVideos < 4 && maxSide > 300 && spatialLayer === 0) {
|
|
5857
|
-
spatialLayer = 1;
|
|
5858
|
-
}
|
|
5859
|
-
if (((_d = this._features) === null || _d === void 0 ? void 0 : _d.uncappedSingleRemoteVideoOn) && numberOfActiveVideos === 1) {
|
|
5860
|
-
spatialLayer = 2;
|
|
5861
|
-
temporalLayer = numberOfTemporalLayers - 1;
|
|
5862
|
-
}
|
|
5863
5869
|
if (consumer.appData.spatialLayer !== spatialLayer || consumer.appData.temporalLayer !== temporalLayer) {
|
|
5864
5870
|
consumer.appData.spatialLayer = spatialLayer;
|
|
5865
5871
|
consumer.appData.temporalLayer = temporalLayer;
|
|
5866
|
-
(
|
|
5872
|
+
(_b = this._vegaConnection) === null || _b === void 0 ? void 0 : _b.message("setConsumersPreferredLayers", {
|
|
5867
5873
|
consumerIds: [consumerId],
|
|
5868
5874
|
spatialLayer,
|
|
5869
5875
|
temporalLayer,
|
package/dist/index.mjs
CHANGED
|
@@ -3051,22 +3051,15 @@ class Session {
|
|
|
3051
3051
|
return this.pc && this.pc.connectionState === "connected";
|
|
3052
3052
|
}
|
|
3053
3053
|
replaceTrack(oldTrack, newTrack) {
|
|
3054
|
+
if (!newTrack) {
|
|
3055
|
+
rtcStats.sendEvent("replaceTrackP2P", { nullTrack: "newTrack", oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind });
|
|
3056
|
+
}
|
|
3054
3057
|
const pc = this.pc;
|
|
3055
3058
|
if (!pc)
|
|
3056
3059
|
return false;
|
|
3057
3060
|
const senders = pc.getSenders();
|
|
3058
|
-
function dbg(msg) {
|
|
3059
|
-
const tr = (t) => t && `id:${t.id},kind:${t.kind},state:${t.readyState}`;
|
|
3060
|
-
logger$5.warn(`${msg}. newTrack:${tr(newTrack)}, oldTrack:${tr(oldTrack)}, sender tracks: ${JSON.stringify(senders.map((s) => `s ${tr(s.track)}`))}, sender first codecs: ${JSON.stringify(senders.map((s) => (s.getParameters().codecs || [])[0]))}`);
|
|
3061
|
-
}
|
|
3062
|
-
if (!senders.length) {
|
|
3063
|
-
dbg("No senders!");
|
|
3064
|
-
}
|
|
3065
3061
|
if (!oldTrack) {
|
|
3066
3062
|
oldTrack = (senders.find((s) => s.track && s.track.kind === newTrack.kind) || {}).track;
|
|
3067
|
-
if (!oldTrack) {
|
|
3068
|
-
dbg("No sender with same kind! Add new track then.");
|
|
3069
|
-
}
|
|
3070
3063
|
}
|
|
3071
3064
|
if (window.RTCRtpSender && window.RTCRtpSender.prototype.replaceTrack) {
|
|
3072
3065
|
if (oldTrack) {
|
|
@@ -3074,8 +3067,8 @@ class Session {
|
|
|
3074
3067
|
for (let i = 0; i < senders.length; i++) {
|
|
3075
3068
|
const sender = senders[i];
|
|
3076
3069
|
const track = sender.track;
|
|
3077
|
-
if (!
|
|
3078
|
-
|
|
3070
|
+
if (!track) {
|
|
3071
|
+
rtcStats.sendEvent("replaceTrackP2P", { nullTrack: "trackFromSender", oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind, newTrackKind: newTrack === null || newTrack === void 0 ? void 0 : newTrack.kind });
|
|
3079
3072
|
}
|
|
3080
3073
|
if (track.id === newTrack.id) {
|
|
3081
3074
|
return Promise.resolve(newTrack);
|
|
@@ -3103,7 +3096,6 @@ class Session {
|
|
|
3103
3096
|
if (3 < ++retried) {
|
|
3104
3097
|
clearInterval(timer);
|
|
3105
3098
|
timer = null;
|
|
3106
|
-
dbg("No sender track to replace");
|
|
3107
3099
|
reject("No sender track to replace");
|
|
3108
3100
|
}
|
|
3109
3101
|
return;
|
|
@@ -3117,7 +3109,6 @@ class Session {
|
|
|
3117
3109
|
}
|
|
3118
3110
|
const stream = this.streams.find((s) => s.getTracks().find((t) => t.id === newTrack.id)) || this.streams[0];
|
|
3119
3111
|
if (!stream) {
|
|
3120
|
-
dbg("No stream?");
|
|
3121
3112
|
return Promise.reject(new Error("replaceTrack: No stream?"));
|
|
3122
3113
|
}
|
|
3123
3114
|
return pc.addTrack(newTrack, stream);
|
|
@@ -4711,21 +4702,6 @@ function createMicAnalyser({ micTrack, params, onScoreUpdated, }) {
|
|
|
4711
4702
|
};
|
|
4712
4703
|
}
|
|
4713
4704
|
|
|
4714
|
-
const maybeTurnOnly = (transportConfig, features) => {
|
|
4715
|
-
if (!features.useOnlyTURN) {
|
|
4716
|
-
return;
|
|
4717
|
-
}
|
|
4718
|
-
transportConfig.iceTransportPolicy = "relay";
|
|
4719
|
-
const filter = {
|
|
4720
|
-
onlyudp: /^turn:.*transport=udp$/,
|
|
4721
|
-
onlytcp: /^turn:.*transport=tcp$/,
|
|
4722
|
-
onlytls: /^turns:.*transport=tcp$/,
|
|
4723
|
-
}[features.useOnlyTURN];
|
|
4724
|
-
if (filter) {
|
|
4725
|
-
transportConfig.iceServers = transportConfig.iceServers.filter((entry) => entry.url && entry.url.match(filter));
|
|
4726
|
-
}
|
|
4727
|
-
};
|
|
4728
|
-
|
|
4729
4705
|
const logger$2 = new Logger();
|
|
4730
4706
|
const MEDIA_QUALITY = Object.freeze({
|
|
4731
4707
|
ok: "ok",
|
|
@@ -4880,6 +4856,56 @@ class VegaMediaQualityMonitor extends EventEmitter$1 {
|
|
|
4880
4856
|
}
|
|
4881
4857
|
}
|
|
4882
4858
|
|
|
4859
|
+
const maybeTurnOnly = (transportConfig, features) => {
|
|
4860
|
+
if (!features.useOnlyTURN) {
|
|
4861
|
+
return;
|
|
4862
|
+
}
|
|
4863
|
+
transportConfig.iceTransportPolicy = "relay";
|
|
4864
|
+
const filter = {
|
|
4865
|
+
onlyudp: /^turn:.*transport=udp$/,
|
|
4866
|
+
onlytcp: /^turn:.*transport=tcp$/,
|
|
4867
|
+
onlytls: /^turns:.*transport=tcp$/,
|
|
4868
|
+
}[features.useOnlyTURN];
|
|
4869
|
+
if (filter) {
|
|
4870
|
+
transportConfig.iceServers = transportConfig.iceServers.filter((entry) => entry.url && entry.url.match(filter));
|
|
4871
|
+
}
|
|
4872
|
+
};
|
|
4873
|
+
|
|
4874
|
+
function getLayers({ width, height, }, { numberOfActiveVideos, numberOfTemporalLayers, uncappedSingleRemoteVideoOn, }) {
|
|
4875
|
+
const maxSide = Math.max(width, height);
|
|
4876
|
+
let spatialLayer = maxSide >= 480 ? (maxSide >= 960 ? 2 : 1) : 0;
|
|
4877
|
+
let temporalLayer = numberOfTemporalLayers - 1;
|
|
4878
|
+
if (maxSide < 100) {
|
|
4879
|
+
temporalLayer = Math.max(numberOfTemporalLayers - 2, 0);
|
|
4880
|
+
}
|
|
4881
|
+
if (numberOfActiveVideos > 8 && spatialLayer === 0) {
|
|
4882
|
+
temporalLayer = Math.max(numberOfTemporalLayers - 2, 0);
|
|
4883
|
+
}
|
|
4884
|
+
if (numberOfActiveVideos < 4 && maxSide > 300 && spatialLayer === 0) {
|
|
4885
|
+
spatialLayer = 1;
|
|
4886
|
+
}
|
|
4887
|
+
if (uncappedSingleRemoteVideoOn && numberOfActiveVideos === 1) {
|
|
4888
|
+
spatialLayer = 2;
|
|
4889
|
+
temporalLayer = numberOfTemporalLayers - 1;
|
|
4890
|
+
}
|
|
4891
|
+
return { spatialLayer, temporalLayer };
|
|
4892
|
+
}
|
|
4893
|
+
function getNumberOfActiveVideos(consumers) {
|
|
4894
|
+
let numberOfActiveVideos = 0;
|
|
4895
|
+
consumers.forEach((c) => {
|
|
4896
|
+
var _a, _b;
|
|
4897
|
+
if (c._closed || c._paused)
|
|
4898
|
+
return;
|
|
4899
|
+
if (((_a = c._appData) === null || _a === void 0 ? void 0 : _a.source) === "webcam" || ((_b = c._appData) === null || _b === void 0 ? void 0 : _b.source) === "screenvideo")
|
|
4900
|
+
numberOfActiveVideos++;
|
|
4901
|
+
});
|
|
4902
|
+
return numberOfActiveVideos;
|
|
4903
|
+
}
|
|
4904
|
+
function getNumberOfTemporalLayers(consumer) {
|
|
4905
|
+
var _a, _b, _c;
|
|
4906
|
+
return /T3/.test(((_c = (_b = (_a = consumer._rtpParameters) === null || _a === void 0 ? void 0 : _a.encodings) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.scalabilityMode) || "") ? 3 : 2;
|
|
4907
|
+
}
|
|
4908
|
+
|
|
4883
4909
|
var _a$1;
|
|
4884
4910
|
const adapter$1 = (_a$1 = adapterRaw.default) !== null && _a$1 !== void 0 ? _a$1 : adapterRaw;
|
|
4885
4911
|
const logger$1 = new Logger();
|
|
@@ -5806,43 +5832,23 @@ class VegaRtcManager {
|
|
|
5806
5832
|
this._syncIncomingStreamsWithPWA(clientId);
|
|
5807
5833
|
}
|
|
5808
5834
|
updateStreamResolution(streamId, _ignored, { width, height, }) {
|
|
5809
|
-
var _a, _b
|
|
5835
|
+
var _a, _b;
|
|
5810
5836
|
logger$1.info("updateStreamResolution()", { streamId, width, height });
|
|
5811
5837
|
const consumerId = this._streamIdToVideoConsumerId.get(streamId);
|
|
5812
5838
|
const consumer = this._consumers.get(consumerId);
|
|
5813
5839
|
if (!consumer)
|
|
5814
5840
|
return;
|
|
5815
|
-
|
|
5816
|
-
|
|
5817
|
-
|
|
5818
|
-
|
|
5819
|
-
|
|
5820
|
-
|
|
5821
|
-
numberOfActiveVideos++;
|
|
5841
|
+
const numberOfActiveVideos = getNumberOfActiveVideos(this._consumers);
|
|
5842
|
+
const numberOfTemporalLayers = getNumberOfTemporalLayers(consumer);
|
|
5843
|
+
const { spatialLayer, temporalLayer } = getLayers({ width, height }, {
|
|
5844
|
+
numberOfActiveVideos,
|
|
5845
|
+
numberOfTemporalLayers,
|
|
5846
|
+
uncappedSingleRemoteVideoOn: (_a = this._features) === null || _a === void 0 ? void 0 : _a.uncappedSingleRemoteVideoOn,
|
|
5822
5847
|
});
|
|
5823
|
-
let numberOfTemporalLayers = 2;
|
|
5824
|
-
if (/T3/.test(((_c = (_b = (_a = consumer._rtpParameters) === null || _a === void 0 ? void 0 : _a.encodings) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.scalabilityMode) || ""))
|
|
5825
|
-
numberOfTemporalLayers = 3;
|
|
5826
|
-
const maxSide = Math.max(width, height);
|
|
5827
|
-
let spatialLayer = maxSide >= 480 ? (maxSide >= 960 ? 2 : 1) : 0;
|
|
5828
|
-
let temporalLayer = numberOfTemporalLayers - 1;
|
|
5829
|
-
if (maxSide < 100) {
|
|
5830
|
-
temporalLayer = Math.max(numberOfTemporalLayers - 2, 0);
|
|
5831
|
-
}
|
|
5832
|
-
if (numberOfActiveVideos > 8 && spatialLayer === 0) {
|
|
5833
|
-
temporalLayer = Math.max(numberOfTemporalLayers - 2, 0);
|
|
5834
|
-
}
|
|
5835
|
-
if (numberOfActiveVideos < 4 && maxSide > 300 && spatialLayer === 0) {
|
|
5836
|
-
spatialLayer = 1;
|
|
5837
|
-
}
|
|
5838
|
-
if (((_d = this._features) === null || _d === void 0 ? void 0 : _d.uncappedSingleRemoteVideoOn) && numberOfActiveVideos === 1) {
|
|
5839
|
-
spatialLayer = 2;
|
|
5840
|
-
temporalLayer = numberOfTemporalLayers - 1;
|
|
5841
|
-
}
|
|
5842
5848
|
if (consumer.appData.spatialLayer !== spatialLayer || consumer.appData.temporalLayer !== temporalLayer) {
|
|
5843
5849
|
consumer.appData.spatialLayer = spatialLayer;
|
|
5844
5850
|
consumer.appData.temporalLayer = temporalLayer;
|
|
5845
|
-
(
|
|
5851
|
+
(_b = this._vegaConnection) === null || _b === void 0 ? void 0 : _b.message("setConsumersPreferredLayers", {
|
|
5846
5852
|
consumerIds: [consumerId],
|
|
5847
5853
|
spatialLayer,
|
|
5848
5854
|
temporalLayer,
|
package/dist/legacy-esm.js
CHANGED
|
@@ -3051,22 +3051,15 @@ class Session {
|
|
|
3051
3051
|
return this.pc && this.pc.connectionState === "connected";
|
|
3052
3052
|
}
|
|
3053
3053
|
replaceTrack(oldTrack, newTrack) {
|
|
3054
|
+
if (!newTrack) {
|
|
3055
|
+
rtcStats.sendEvent("replaceTrackP2P", { nullTrack: "newTrack", oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind });
|
|
3056
|
+
}
|
|
3054
3057
|
const pc = this.pc;
|
|
3055
3058
|
if (!pc)
|
|
3056
3059
|
return false;
|
|
3057
3060
|
const senders = pc.getSenders();
|
|
3058
|
-
function dbg(msg) {
|
|
3059
|
-
const tr = (t) => t && `id:${t.id},kind:${t.kind},state:${t.readyState}`;
|
|
3060
|
-
logger$5.warn(`${msg}. newTrack:${tr(newTrack)}, oldTrack:${tr(oldTrack)}, sender tracks: ${JSON.stringify(senders.map((s) => `s ${tr(s.track)}`))}, sender first codecs: ${JSON.stringify(senders.map((s) => (s.getParameters().codecs || [])[0]))}`);
|
|
3061
|
-
}
|
|
3062
|
-
if (!senders.length) {
|
|
3063
|
-
dbg("No senders!");
|
|
3064
|
-
}
|
|
3065
3061
|
if (!oldTrack) {
|
|
3066
3062
|
oldTrack = (senders.find((s) => s.track && s.track.kind === newTrack.kind) || {}).track;
|
|
3067
|
-
if (!oldTrack) {
|
|
3068
|
-
dbg("No sender with same kind! Add new track then.");
|
|
3069
|
-
}
|
|
3070
3063
|
}
|
|
3071
3064
|
if (window.RTCRtpSender && window.RTCRtpSender.prototype.replaceTrack) {
|
|
3072
3065
|
if (oldTrack) {
|
|
@@ -3074,8 +3067,8 @@ class Session {
|
|
|
3074
3067
|
for (let i = 0; i < senders.length; i++) {
|
|
3075
3068
|
const sender = senders[i];
|
|
3076
3069
|
const track = sender.track;
|
|
3077
|
-
if (!
|
|
3078
|
-
|
|
3070
|
+
if (!track) {
|
|
3071
|
+
rtcStats.sendEvent("replaceTrackP2P", { nullTrack: "trackFromSender", oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind, newTrackKind: newTrack === null || newTrack === void 0 ? void 0 : newTrack.kind });
|
|
3079
3072
|
}
|
|
3080
3073
|
if (track.id === newTrack.id) {
|
|
3081
3074
|
return Promise.resolve(newTrack);
|
|
@@ -3103,7 +3096,6 @@ class Session {
|
|
|
3103
3096
|
if (3 < ++retried) {
|
|
3104
3097
|
clearInterval(timer);
|
|
3105
3098
|
timer = null;
|
|
3106
|
-
dbg("No sender track to replace");
|
|
3107
3099
|
reject("No sender track to replace");
|
|
3108
3100
|
}
|
|
3109
3101
|
return;
|
|
@@ -3117,7 +3109,6 @@ class Session {
|
|
|
3117
3109
|
}
|
|
3118
3110
|
const stream = this.streams.find((s) => s.getTracks().find((t) => t.id === newTrack.id)) || this.streams[0];
|
|
3119
3111
|
if (!stream) {
|
|
3120
|
-
dbg("No stream?");
|
|
3121
3112
|
return Promise.reject(new Error("replaceTrack: No stream?"));
|
|
3122
3113
|
}
|
|
3123
3114
|
return pc.addTrack(newTrack, stream);
|
|
@@ -4711,21 +4702,6 @@ function createMicAnalyser({ micTrack, params, onScoreUpdated, }) {
|
|
|
4711
4702
|
};
|
|
4712
4703
|
}
|
|
4713
4704
|
|
|
4714
|
-
const maybeTurnOnly = (transportConfig, features) => {
|
|
4715
|
-
if (!features.useOnlyTURN) {
|
|
4716
|
-
return;
|
|
4717
|
-
}
|
|
4718
|
-
transportConfig.iceTransportPolicy = "relay";
|
|
4719
|
-
const filter = {
|
|
4720
|
-
onlyudp: /^turn:.*transport=udp$/,
|
|
4721
|
-
onlytcp: /^turn:.*transport=tcp$/,
|
|
4722
|
-
onlytls: /^turns:.*transport=tcp$/,
|
|
4723
|
-
}[features.useOnlyTURN];
|
|
4724
|
-
if (filter) {
|
|
4725
|
-
transportConfig.iceServers = transportConfig.iceServers.filter((entry) => entry.url && entry.url.match(filter));
|
|
4726
|
-
}
|
|
4727
|
-
};
|
|
4728
|
-
|
|
4729
4705
|
const logger$2 = new Logger();
|
|
4730
4706
|
const MEDIA_QUALITY = Object.freeze({
|
|
4731
4707
|
ok: "ok",
|
|
@@ -4880,6 +4856,56 @@ class VegaMediaQualityMonitor extends EventEmitter$1 {
|
|
|
4880
4856
|
}
|
|
4881
4857
|
}
|
|
4882
4858
|
|
|
4859
|
+
const maybeTurnOnly = (transportConfig, features) => {
|
|
4860
|
+
if (!features.useOnlyTURN) {
|
|
4861
|
+
return;
|
|
4862
|
+
}
|
|
4863
|
+
transportConfig.iceTransportPolicy = "relay";
|
|
4864
|
+
const filter = {
|
|
4865
|
+
onlyudp: /^turn:.*transport=udp$/,
|
|
4866
|
+
onlytcp: /^turn:.*transport=tcp$/,
|
|
4867
|
+
onlytls: /^turns:.*transport=tcp$/,
|
|
4868
|
+
}[features.useOnlyTURN];
|
|
4869
|
+
if (filter) {
|
|
4870
|
+
transportConfig.iceServers = transportConfig.iceServers.filter((entry) => entry.url && entry.url.match(filter));
|
|
4871
|
+
}
|
|
4872
|
+
};
|
|
4873
|
+
|
|
4874
|
+
function getLayers({ width, height, }, { numberOfActiveVideos, numberOfTemporalLayers, uncappedSingleRemoteVideoOn, }) {
|
|
4875
|
+
const maxSide = Math.max(width, height);
|
|
4876
|
+
let spatialLayer = maxSide >= 480 ? (maxSide >= 960 ? 2 : 1) : 0;
|
|
4877
|
+
let temporalLayer = numberOfTemporalLayers - 1;
|
|
4878
|
+
if (maxSide < 100) {
|
|
4879
|
+
temporalLayer = Math.max(numberOfTemporalLayers - 2, 0);
|
|
4880
|
+
}
|
|
4881
|
+
if (numberOfActiveVideos > 8 && spatialLayer === 0) {
|
|
4882
|
+
temporalLayer = Math.max(numberOfTemporalLayers - 2, 0);
|
|
4883
|
+
}
|
|
4884
|
+
if (numberOfActiveVideos < 4 && maxSide > 300 && spatialLayer === 0) {
|
|
4885
|
+
spatialLayer = 1;
|
|
4886
|
+
}
|
|
4887
|
+
if (uncappedSingleRemoteVideoOn && numberOfActiveVideos === 1) {
|
|
4888
|
+
spatialLayer = 2;
|
|
4889
|
+
temporalLayer = numberOfTemporalLayers - 1;
|
|
4890
|
+
}
|
|
4891
|
+
return { spatialLayer, temporalLayer };
|
|
4892
|
+
}
|
|
4893
|
+
function getNumberOfActiveVideos(consumers) {
|
|
4894
|
+
let numberOfActiveVideos = 0;
|
|
4895
|
+
consumers.forEach((c) => {
|
|
4896
|
+
var _a, _b;
|
|
4897
|
+
if (c._closed || c._paused)
|
|
4898
|
+
return;
|
|
4899
|
+
if (((_a = c._appData) === null || _a === void 0 ? void 0 : _a.source) === "webcam" || ((_b = c._appData) === null || _b === void 0 ? void 0 : _b.source) === "screenvideo")
|
|
4900
|
+
numberOfActiveVideos++;
|
|
4901
|
+
});
|
|
4902
|
+
return numberOfActiveVideos;
|
|
4903
|
+
}
|
|
4904
|
+
function getNumberOfTemporalLayers(consumer) {
|
|
4905
|
+
var _a, _b, _c;
|
|
4906
|
+
return /T3/.test(((_c = (_b = (_a = consumer._rtpParameters) === null || _a === void 0 ? void 0 : _a.encodings) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.scalabilityMode) || "") ? 3 : 2;
|
|
4907
|
+
}
|
|
4908
|
+
|
|
4883
4909
|
var _a$1;
|
|
4884
4910
|
const adapter$1 = (_a$1 = adapterRaw.default) !== null && _a$1 !== void 0 ? _a$1 : adapterRaw;
|
|
4885
4911
|
const logger$1 = new Logger();
|
|
@@ -5806,43 +5832,23 @@ class VegaRtcManager {
|
|
|
5806
5832
|
this._syncIncomingStreamsWithPWA(clientId);
|
|
5807
5833
|
}
|
|
5808
5834
|
updateStreamResolution(streamId, _ignored, { width, height, }) {
|
|
5809
|
-
var _a, _b
|
|
5835
|
+
var _a, _b;
|
|
5810
5836
|
logger$1.info("updateStreamResolution()", { streamId, width, height });
|
|
5811
5837
|
const consumerId = this._streamIdToVideoConsumerId.get(streamId);
|
|
5812
5838
|
const consumer = this._consumers.get(consumerId);
|
|
5813
5839
|
if (!consumer)
|
|
5814
5840
|
return;
|
|
5815
|
-
|
|
5816
|
-
|
|
5817
|
-
|
|
5818
|
-
|
|
5819
|
-
|
|
5820
|
-
|
|
5821
|
-
numberOfActiveVideos++;
|
|
5841
|
+
const numberOfActiveVideos = getNumberOfActiveVideos(this._consumers);
|
|
5842
|
+
const numberOfTemporalLayers = getNumberOfTemporalLayers(consumer);
|
|
5843
|
+
const { spatialLayer, temporalLayer } = getLayers({ width, height }, {
|
|
5844
|
+
numberOfActiveVideos,
|
|
5845
|
+
numberOfTemporalLayers,
|
|
5846
|
+
uncappedSingleRemoteVideoOn: (_a = this._features) === null || _a === void 0 ? void 0 : _a.uncappedSingleRemoteVideoOn,
|
|
5822
5847
|
});
|
|
5823
|
-
let numberOfTemporalLayers = 2;
|
|
5824
|
-
if (/T3/.test(((_c = (_b = (_a = consumer._rtpParameters) === null || _a === void 0 ? void 0 : _a.encodings) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.scalabilityMode) || ""))
|
|
5825
|
-
numberOfTemporalLayers = 3;
|
|
5826
|
-
const maxSide = Math.max(width, height);
|
|
5827
|
-
let spatialLayer = maxSide >= 480 ? (maxSide >= 960 ? 2 : 1) : 0;
|
|
5828
|
-
let temporalLayer = numberOfTemporalLayers - 1;
|
|
5829
|
-
if (maxSide < 100) {
|
|
5830
|
-
temporalLayer = Math.max(numberOfTemporalLayers - 2, 0);
|
|
5831
|
-
}
|
|
5832
|
-
if (numberOfActiveVideos > 8 && spatialLayer === 0) {
|
|
5833
|
-
temporalLayer = Math.max(numberOfTemporalLayers - 2, 0);
|
|
5834
|
-
}
|
|
5835
|
-
if (numberOfActiveVideos < 4 && maxSide > 300 && spatialLayer === 0) {
|
|
5836
|
-
spatialLayer = 1;
|
|
5837
|
-
}
|
|
5838
|
-
if (((_d = this._features) === null || _d === void 0 ? void 0 : _d.uncappedSingleRemoteVideoOn) && numberOfActiveVideos === 1) {
|
|
5839
|
-
spatialLayer = 2;
|
|
5840
|
-
temporalLayer = numberOfTemporalLayers - 1;
|
|
5841
|
-
}
|
|
5842
5848
|
if (consumer.appData.spatialLayer !== spatialLayer || consumer.appData.temporalLayer !== temporalLayer) {
|
|
5843
5849
|
consumer.appData.spatialLayer = spatialLayer;
|
|
5844
5850
|
consumer.appData.temporalLayer = temporalLayer;
|
|
5845
|
-
(
|
|
5851
|
+
(_b = this._vegaConnection) === null || _b === void 0 ? void 0 : _b.message("setConsumersPreferredLayers", {
|
|
5846
5852
|
consumerIds: [consumerId],
|
|
5847
5853
|
spatialLayer,
|
|
5848
5854
|
temporalLayer,
|