@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.
@@ -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-9vn4h4Fg.mjs")).default;
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) {
@@ -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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eluvio/elv-player-js",
3
- "version": "2.1.31",
3
+ "version": "2.1.33",
4
4
  "description": "![Eluvio Logo](lib/static/images/Logo.png \"Eluvio Logo\")",
5
5
  "main": "dist/elv-player-js.es.js",
6
6
  "license": "MIT",