@eluvio/elv-player-js 2.0.43 → 2.0.45

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.
@@ -43,7 +43,7 @@ export class EluvioPlayer {
43
43
  return () => this.__settingsListeners = this.__settingsListeners.filter(l => l !== listener);
44
44
  }
45
45
 
46
- constructor({target, video, parameters, SetErrorMessage}) {
46
+ constructor({target, video, parameters, Reload, UpdateParameters, SetErrorMessage}) {
47
47
  this.latest = true;
48
48
  this.loading = true;
49
49
  this.target = target;
@@ -69,6 +69,9 @@ export class EluvioPlayer {
69
69
  ].includes(parameters.playerOptions.controls);
70
70
  this.__error = undefined;
71
71
 
72
+ this.__ReloadComponent = Reload;
73
+ this.__UpdateParameters = UpdateParameters;
74
+
72
75
  this.SetErrorMessage = (message, error) => {
73
76
  SetErrorMessage(message);
74
77
  this.__error = error;
@@ -634,7 +637,8 @@ export class EluvioPlayer {
634
637
 
635
638
  // Increase maxBufferHole for channels
636
639
  if(
637
- this.sourceOptions.playoutParameters?.channel &&
640
+ this.sourceOptions.playoutParameters &&
641
+ this.sourceOptions.playoutParameters.channel &&
638
642
  Object.keys(customProfileSettings).length === 0
639
643
  ) {
640
644
  profileSettings.maxBufferHole = 4.2;
@@ -729,6 +733,19 @@ export class EluvioPlayer {
729
733
 
730
734
  // TODO: Refactor this somewhere else
731
735
  this.SetPlayerProfile = async ({profile, customHLSOptions={}}) => {
736
+ if(this.playoutUrl && this.playoutUrl.includes("hls-widevine")) {
737
+ // Chrome has an issue with widevine that requires fully recreating the video element
738
+ this.__UpdateParameters({
739
+ playerOptions: {
740
+ playerProfile: profile,
741
+ hlsjsOptions: customHLSOptions
742
+ }
743
+ });
744
+
745
+ this.__ReloadComponent();
746
+ return;
747
+ }
748
+
732
749
  this.videoDuration = undefined;
733
750
  this.playerOptions.playerProfile = profile;
734
751
  this.customHLSOptions = customHLSOptions;
@@ -1197,6 +1214,11 @@ export class EluvioPlayer {
1197
1214
  return;
1198
1215
  }
1199
1216
 
1217
+ if(this.playoutUrl && this.playoutUrl.includes("hls-widevine")) {
1218
+ // Chrome has an issue with widevine that requires fully recreating the video element
1219
+ this.__ReloadComponent();
1220
+ }
1221
+
1200
1222
  try {
1201
1223
  if(error && this.playerOptions.restartCallback) {
1202
1224
  try {
@@ -6,7 +6,8 @@ import {Spinner} from "./Components.jsx";
6
6
  import {RegisterModal} from "./Observers.js";
7
7
 
8
8
  const PlayerProfileForm = ({player, Close}) => {
9
- const [playerOptions, setPlayerOptions] = useState(JSON.stringify(player.hlsOptions || "{}", null, 2));
9
+ const [playerOptions, setPlayerOptions] = useState(
10
+ );
10
11
  const [submitting, setSubmitting] = useState(false);
11
12
  const [errorMessage, setErrorMessage] = useState("");
12
13
 
@@ -20,6 +21,14 @@ const PlayerProfileForm = ({player, Close}) => {
20
21
  return () => modalHandlerDisposer && modalHandlerDisposer();
21
22
  }, [formRef]);
22
23
 
24
+ useEffect(() => {
25
+ let options = {...(player.hlsOptions || {})};
26
+ delete options.drmSystems;
27
+ delete options.emeEnabled;
28
+
29
+ setPlayerOptions(JSON.stringify(options, null, 2));
30
+ }, []);
31
+
23
32
  const Submit = async event => {
24
33
  event.preventDefault();
25
34
 
@@ -18,7 +18,7 @@ import TicketForm from "./TicketForm.jsx";
18
18
  import {Copy, Spinner, SVG, UserActionIndicator} from "./Components.jsx";
19
19
  import TVControls from "./TVControls.jsx";
20
20
  import PlayerProfileForm from "./PlayerProfileForm.jsx";
21
- import {ImageUrl, MergeDefaultParameters} from "./Common.js";
21
+ import {ImageUrl, MergeDefaultParameters, MergeParameters} from "./Common.js";
22
22
  import {ChromecastIcon} from "../static/icons/Icons.js";
23
23
  import * as Icons from "../static/icons/Icons";
24
24
 
@@ -48,7 +48,15 @@ const Poster = ({player}) => {
48
48
  };
49
49
 
50
50
  let clearInteractionTimeout;
51
- const PlayerUI = ({target, parameters, InitCallback, ErrorCallback, Unmount, Reset}) => {
51
+ const PlayerUI = ({
52
+ target,
53
+ parameters,
54
+ InitCallback,
55
+ ErrorCallback,
56
+ Unmount,
57
+ Reset,
58
+ SetAdditionalParameters
59
+ }) => {
52
60
  const [player, setPlayer] = useState(undefined);
53
61
  const [client, setClient] = useState(undefined);
54
62
  const [size, setSize] = useState("lg");
@@ -101,7 +109,11 @@ const PlayerUI = ({target, parameters, InitCallback, ErrorCallback, Unmount, Res
101
109
  target,
102
110
  video: videoRef.current,
103
111
  parameters,
104
- SetErrorMessage: setErrorMessage
112
+ SetErrorMessage: setErrorMessage,
113
+ Reload: Reset,
114
+ UpdateParameters: parameters => {
115
+ SetAdditionalParameters(parameters);
116
+ }
105
117
  });
106
118
 
107
119
  window.__elvPlayer = newPlayer;
@@ -294,12 +306,15 @@ const PlayerUI = ({target, parameters, InitCallback, ErrorCallback, Unmount, Res
294
306
  );
295
307
  };
296
308
 
297
- const PlayerWrapper = (args) => {
309
+ const PlayerWrapper = ({parameters, ...args}) => {
298
310
  const [playerKey, setPlayerKey] = useState(Math.random());
311
+ const [additionalParameters, setAdditionalParameters] = useState({});
299
312
 
300
313
  return (
301
314
  <PlayerUI
302
315
  {...args}
316
+ SetAdditionalParameters={setAdditionalParameters}
317
+ parameters={MergeParameters(parameters, additionalParameters)}
303
318
  key={`player-${playerKey}`}
304
319
  Reset={() => setPlayerKey(Math.random())}
305
320
  />
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eluvio/elv-player-js",
3
- "version": "2.0.43",
3
+ "version": "2.0.45",
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",
@@ -40,7 +40,7 @@
40
40
  "dashjs": "git+https://github.com/elv-zenia/dash.js.git#text-track-fix",
41
41
  "focus-visible": "^5.2.0",
42
42
  "hls.js": "1.6.0",
43
- "mux-embed": "^4.30.0",
43
+ "mux-embed": "^5.9.0",
44
44
  "react": "^18.2.0",
45
45
  "react-dom": "^18.2.0",
46
46
  "resize-observer-polyfill": "^1.5.1",