@eluvio/elv-player-js 2.1.31 → 2.1.33
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/.vite/manifest.json +7 -7
- package/dist/elv-player-js.cjs.js +1 -1
- package/dist/elv-player-js.es.js +1 -1
- package/dist/{index-9vn4h4Fg.mjs → index-BAMTZqd_.mjs} +1 -1
- package/dist/{index-BodaK1X1.js → index-BQZtvvaT.js} +1 -1
- package/dist/{index-DpD96cda.js → index-D18XCfzI.js} +3 -3
- package/dist/{index-D1GyIY83.mjs → index-DjFcABDu.mjs} +11 -1
- package/lib/player/Player.js +36 -0
- package/lib/player/PlayerParameters.js +1 -0
- package/package.json +1 -1
|
@@ -210,6 +210,7 @@ const $t = {
|
|
|
210
210
|
dashjsOptions: void 0,
|
|
211
211
|
debugLogging: !1,
|
|
212
212
|
maxBitrate: void 0,
|
|
213
|
+
minBitrate: void 0,
|
|
213
214
|
// eslint-disable-next-line no-unused-vars
|
|
214
215
|
playerCallback: ({ player: r, videoElement: e, hlsPlayer: t, dashPlayer: a }) => {
|
|
215
216
|
},
|
|
@@ -50040,7 +50041,7 @@ function VP() {
|
|
|
50040
50041
|
ElvCrypto: async () => {
|
|
50041
50042
|
try {
|
|
50042
50043
|
if (!a.elvCrypto) {
|
|
50043
|
-
const s = (await import("./index-
|
|
50044
|
+
const s = (await import("./index-BAMTZqd_.mjs")).default;
|
|
50044
50045
|
a.elvCrypto = await new s().init();
|
|
50045
50046
|
}
|
|
50046
50047
|
return a.elvCrypto;
|
|
@@ -67362,6 +67363,9 @@ class Kw {
|
|
|
67362
67363
|
if (this.playerOptions.maxBitrate && y.on(this.HLS.Events.MANIFEST_PARSED, (m, { levels: v, firstLevel: b }) => {
|
|
67363
67364
|
let x = v.map((E, C) => E.bitrate > this.playerOptions.maxBitrate ? C : void 0).filter((E) => typeof E < "u").reverse();
|
|
67364
67365
|
x.length === v.length && (this.Log(`Warning: Max bitrate '${this.playerOptions.maxBitrate}bps' is less than all available levels for this content.`), x = x.filter((E) => E > 0)), this.Log("Removing the following levels due to maxBitrate setting:"), this.Log(x.map((E) => [v[E].width, "x", v[E].height, ` (${(v[E].bitrate / 1e3 / 1e3).toFixed(1)}Mbps)`].join("")).join(", ")), x.find((E) => b === E) && (y.startLevel = v.map((E, C) => C).filter((E) => !x.includes(E)).reverse()[0]), x.map((E) => y.removeLevel(E));
|
|
67366
|
+
}), this.playerOptions.minBitrate && y.on(this.HLS.Events.MANIFEST_PARSED, (m, { levels: v, firstLevel: b }) => {
|
|
67367
|
+
let x = v.map((E, C) => E.bitrate < this.playerOptions.minBitrate ? C : void 0).filter((E) => typeof E < "u");
|
|
67368
|
+
x.length === v.length && (this.Log(`Warning: Min bitrate '${this.playerOptions.minBitrate}bps' is greater than all available levels for this content.`), x = x.slice(0, -1)), this.Log("Removing the following levels due to minBitrate setting:"), this.Log(x.map((E) => [v[E].width, "x", v[E].height, ` (${(v[E].bitrate / 1e3 / 1e3).toFixed(1)}Mbps)`].join("")).join(", ")), x.find((E) => b === E) && (y.startLevel = v.map((E, C) => C).filter((E) => !x.includes(E)).reverse()[0]), x.reverse().map((E) => y.removeLevel(E));
|
|
67365
67369
|
}), y.loadSource(e.toString()), y.attachMedia(this.video), this.controls && u.enabled) {
|
|
67366
67370
|
const m = u.SwitchView;
|
|
67367
67371
|
u.SwitchView = async (v) => {
|
|
@@ -67460,6 +67464,12 @@ class Kw {
|
|
|
67460
67464
|
maxBitrate: { video: this.playerOptions.maxBitrate / 1e3 }
|
|
67461
67465
|
}
|
|
67462
67466
|
}
|
|
67467
|
+
}), this.playerOptions.minBitrate && u.updateSettings({
|
|
67468
|
+
streaming: {
|
|
67469
|
+
abr: {
|
|
67470
|
+
minBitrate: { video: this.playerOptions.minBitrate / 1e3 }
|
|
67471
|
+
}
|
|
67472
|
+
}
|
|
67463
67473
|
}), e.searchParams.delete("authorization"), u.addRequestInterceptor(function(c) {
|
|
67464
67474
|
return c.headers.Authorization = `Bearer ${t}`, c;
|
|
67465
67475
|
}), a === $t.drms.WIDEVINE) {
|
package/lib/player/Player.js
CHANGED
|
@@ -827,6 +827,32 @@ export class EluvioPlayer {
|
|
|
827
827
|
});
|
|
828
828
|
}
|
|
829
829
|
|
|
830
|
+
// Limit playback to minimum bitrate, if specified
|
|
831
|
+
if(this.playerOptions.minBitrate) {
|
|
832
|
+
hlsPlayer.on(this.HLS.Events.MANIFEST_PARSED, (_, {levels, firstLevel}) => {
|
|
833
|
+
let levelsToRemove = levels
|
|
834
|
+
.map((level, i) => level.bitrate < this.playerOptions.minBitrate ? i : undefined)
|
|
835
|
+
.filter(i => typeof i !== "undefined");
|
|
836
|
+
// Note: Remove levels from lowest to highest index
|
|
837
|
+
|
|
838
|
+
if(levelsToRemove.length === levels.length) {
|
|
839
|
+
this.Log(`Warning: Min bitrate '${this.playerOptions.minBitrate}bps' is greater than all available levels for this content.`);
|
|
840
|
+
// Keep first level
|
|
841
|
+
levelsToRemove = levelsToRemove.slice(0, -1);
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
this.Log("Removing the following levels due to minBitrate setting:");
|
|
845
|
+
this.Log(levelsToRemove.map(i => [levels[i].width, "x", levels[i].height, ` (${(levels[i].bitrate / 1000 / 1000).toFixed(1)}Mbps)`].join("")).join(", "));
|
|
846
|
+
|
|
847
|
+
if(levelsToRemove.find(i => firstLevel === i)) {
|
|
848
|
+
// Player will start on level that is being removed - switch to highest level that will not be removed
|
|
849
|
+
hlsPlayer.startLevel = levels.map((_, i) => i).filter(i => !levelsToRemove.includes(i)).reverse()[0];
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
levelsToRemove.reverse().map(i => hlsPlayer.removeLevel(i));
|
|
853
|
+
});
|
|
854
|
+
}
|
|
855
|
+
|
|
830
856
|
hlsPlayer.loadSource(playoutUrl.toString());
|
|
831
857
|
hlsPlayer.attachMedia(this.video);
|
|
832
858
|
|
|
@@ -1010,6 +1036,16 @@ export class EluvioPlayer {
|
|
|
1010
1036
|
});
|
|
1011
1037
|
}
|
|
1012
1038
|
|
|
1039
|
+
if(this.playerOptions.minBitrate) {
|
|
1040
|
+
dashPlayer.updateSettings({
|
|
1041
|
+
"streaming": {
|
|
1042
|
+
"abr": {
|
|
1043
|
+
"minBitrate": { "video": this.playerOptions.minBitrate / 1000 }
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1046
|
+
});
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1013
1049
|
playoutUrl.searchParams.delete("authorization");
|
|
1014
1050
|
dashPlayer.addRequestInterceptor(function (request) {
|
|
1015
1051
|
request.headers["Authorization"] = `Bearer ${authorizationToken}`;
|
|
@@ -196,6 +196,7 @@ export const DefaultParameters = {
|
|
|
196
196
|
dashjsOptions: undefined,
|
|
197
197
|
debugLogging: false,
|
|
198
198
|
maxBitrate: undefined,
|
|
199
|
+
minBitrate: undefined,
|
|
199
200
|
// eslint-disable-next-line no-unused-vars
|
|
200
201
|
playerCallback: ({player, videoElement, hlsPlayer, dashPlayer}) => {},
|
|
201
202
|
// eslint-disable-next-line no-unused-vars
|