@micromag/element-video 0.3.579 → 0.3.580

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.
Files changed (2) hide show
  1. package/es/index.js +67 -29
  2. package/package.json +2 -2
package/es/index.js CHANGED
@@ -2,6 +2,7 @@ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import _objectSpread from '@babel/runtime/helpers/objectSpread2';
3
3
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
4
4
  import classNames from 'classnames';
5
+ import Hls from 'hls.js';
5
6
  import isFunction from 'lodash/isFunction';
6
7
  import PropTypes$1 from 'prop-types';
7
8
  import React, { useMemo, useRef, useState, useEffect, useCallback } from 'react';
@@ -9,7 +10,6 @@ import { PropTypes } from '@micromag/core';
9
10
  import { Spinner } from '@micromag/core/components';
10
11
  import { useMediaThumbnail, useMediaCurrentTime, useMediaDuration, useMediaReady, useProgressSteps } from '@micromag/core/hooks';
11
12
  import { getMediaFilesAsArray, getVideoSupportedMimes } from '@micromag/core/utils';
12
- import Hls from 'hls.js';
13
13
 
14
14
  var styles = {"container":"micromag-element-video-container","withSize":"micromag-element-video-withSize","media":"micromag-element-video-media","spinner":"micromag-element-video-spinner"};
15
15
 
@@ -134,19 +134,19 @@ var Video = function Video(_ref) {
134
134
  return getMediaFilesAsArray(files);
135
135
  }, [files]);
136
136
  var finalThumbnail = useMediaThumbnail(media, thumbnail);
137
- var _ref12 = useRef(null);
138
- var currentTime = useMediaCurrentTime(_ref12.current, {
137
+ var _ref14 = useRef(null);
138
+ var currentTime = useMediaCurrentTime(_ref14.current, {
139
139
  id: mediaUrl,
140
140
  disabled: paused || onProgressStep === null
141
141
  });
142
- var duration = useMediaDuration(_ref12.current, {
142
+ var duration = useMediaDuration(_ref14.current, {
143
143
  id: mediaUrl
144
144
  });
145
145
  var _useState = useState(false),
146
146
  _useState2 = _slicedToArray(_useState, 2),
147
147
  showLoading = _useState2[0],
148
148
  setShowLoading = _useState2[1];
149
- var ready = useMediaReady(_ref12.current, {
149
+ var ready = useMediaReady(_ref14.current, {
150
150
  id: mediaUrl
151
151
  });
152
152
  useEffect(function () {
@@ -176,16 +176,54 @@ var Video = function Video(_ref) {
176
176
  return mime === 'application/vnd.apple.mpegurl' || (name || '').endsWith('.m3u8');
177
177
  });
178
178
  }, [filesArray, hlsIsSupported, disableHls]);
179
+ var _useState3 = useState(null),
180
+ _useState4 = _slicedToArray(_useState3, 2),
181
+ hlsJs = _useState4[0],
182
+ setHlsJs = _useState4[1];
183
+ useEffect(function () {
184
+ if (hlsJs !== null && _ref14.current !== null) {
185
+ hlsJs.attachMedia(_ref14.current);
186
+ }
187
+ return function () {
188
+ if (hlsJs !== null) {
189
+ hlsJs.detachMedia();
190
+ hlsJs.destroy();
191
+ }
192
+ };
193
+ }, [hlsJs, _ref14.current]);
194
+ var _useState5 = useState(0),
195
+ _useState6 = _slicedToArray(_useState5, 2);
196
+ _useState6[0];
197
+ var setHlsTsOffset = _useState6[1];
179
198
  useEffect(function () {
180
- if (_ref12.current === null || !hlsIsSupported) {
199
+ if (_ref14.current === null || !hlsIsSupported) {
181
200
  return;
182
201
  }
183
202
  if (hlsSources !== null && hlsSources.length > 0) {
203
+ setHlsTsOffset(0);
184
204
  var hls = new Hls();
205
+ var _onHlsBufferAppended = function onHlsBufferAppended(eventName, _ref5) {
206
+ var frag = _ref5.frag;
207
+ var fragStart = frag.start,
208
+ fragType = frag.type,
209
+ _frag$sn = frag.sn,
210
+ fragSn = _frag$sn === void 0 ? null : _frag$sn,
211
+ _frag$elementaryStrea = frag.elementaryStreams.video,
212
+ videoStream = _frag$elementaryStrea === void 0 ? null : _frag$elementaryStrea;
213
+ var _ref6 = videoStream || {},
214
+ _ref6$startPTS = _ref6.startPTS,
215
+ videoStartPTS = _ref6$startPTS === void 0 ? null : _ref6$startPTS;
216
+ if (fragType === 'main' && fragSn !== 'initSegment' && videoStartPTS !== null) {
217
+ var tOffset = videoStartPTS - fragStart;
218
+ hls.off(Hls.Events.BUFFER_APPENDED, _onHlsBufferAppended);
219
+ setHlsTsOffset(tOffset);
220
+ }
221
+ };
222
+ hls.on(Hls.Events.BUFFER_APPENDED, _onHlsBufferAppended);
185
223
  hls.loadSource(hlsSources[0].url);
186
- hls.attachMedia(_ref12.current);
224
+ setHlsJs(hls);
187
225
  }
188
- }, [hlsIsSupported, hlsSources, _ref12]);
226
+ }, [hlsIsSupported, hlsSources, _ref14]);
189
227
  var sourceFiles = useMemo(function () {
190
228
  if (filesArray.length === 0 || hlsSources !== null && hlsSources.length > 0) {
191
229
  return null;
@@ -204,11 +242,11 @@ var Video = function Video(_ref) {
204
242
  var _file$mime2 = file.mime,
205
243
  mime = _file$mime2 === void 0 ? "video/".concat(fileHandle === 'h264' ? 'mp4' : fileHandle) : _file$mime2;
206
244
  var currentMimeFile = filesMap[mime] || null;
207
- var _ref5 = currentMimeFile || {},
208
- _ref5$id = _ref5.id,
209
- currentId = _ref5$id === void 0 ? null : _ref5$id,
210
- _ref5$handle = _ref5.handle,
211
- currentHandle = _ref5$handle === void 0 ? null : _ref5$handle;
245
+ var _ref7 = currentMimeFile || {},
246
+ _ref7$id = _ref7.id,
247
+ currentId = _ref7$id === void 0 ? null : _ref7$id,
248
+ _ref7$handle = _ref7.handle,
249
+ currentHandle = _ref7$handle === void 0 ? null : _ref7$handle;
212
250
  var currentMimeHandle = currentHandle || currentId;
213
251
  return currentMimeFile === null || currentMimeHandle === 'original' ? _objectSpread(_objectSpread({}, filesMap), {}, _defineProperty({}, mime, file)) : filesMap;
214
252
  }, {});
@@ -218,14 +256,14 @@ var Video = function Video(_ref) {
218
256
  }, [filesArray, hlsSources]);
219
257
 
220
258
  // @NOTE: Media is an animated image and doesn't have source files in video formats
221
- var _ref6 = filesArray.find(function (_ref7) {
222
- var handle = _ref7.handle;
259
+ var _ref8 = filesArray.find(function (_ref9) {
260
+ var handle = _ref9.handle;
223
261
  return handle === 'original';
224
262
  }) || {},
225
- _ref6$type = _ref6.type,
226
- originalType = _ref6$type === void 0 ? null : _ref6$type,
227
- _ref6$mime = _ref6.mime,
228
- originalMime = _ref6$mime === void 0 ? mediaMime : _ref6$mime;
263
+ _ref8$type = _ref8.type,
264
+ originalType = _ref8$type === void 0 ? null : _ref8$type,
265
+ _ref8$mime = _ref8.mime,
266
+ originalMime = _ref8$mime === void 0 ? mediaMime : _ref8$mime;
229
267
  var originalFileIsImage = originalType === 'image' || originalMime !== null && originalMime.indexOf('image/') === 0;
230
268
  var isImageWithoutSourceFile = originalFileIsImage && (sourceFiles === null || sourceFiles.length === 0);
231
269
  var withSize = width !== null && height !== null;
@@ -235,7 +273,7 @@ var Video = function Video(_ref) {
235
273
  }
236
274
  }, [duration, customOnDurationChange]);
237
275
  var onVolumeChange = useCallback(function () {
238
- var _ref$current = _ref12.current,
276
+ var _ref$current = _ref14.current,
239
277
  element = _ref$current === void 0 ? null : _ref$current;
240
278
  if (element === null) {
241
279
  return;
@@ -246,10 +284,10 @@ var Video = function Video(_ref) {
246
284
  }, [customOnVolumeChange]);
247
285
 
248
286
  // Manage suspend
249
- var _useState3 = useState(false),
250
- _useState4 = _slicedToArray(_useState3, 2),
251
- isSuspended = _useState4[0],
252
- setIsSuspended = _useState4[1];
287
+ var _useState7 = useState(false),
288
+ _useState8 = _slicedToArray(_useState7, 2),
289
+ isSuspended = _useState8[0],
290
+ setIsSuspended = _useState8[1];
253
291
  var onPlay = useCallback(function (e) {
254
292
  if (isSuspended) {
255
293
  setIsSuspended(false);
@@ -280,7 +318,7 @@ var Video = function Video(_ref) {
280
318
  }
281
319
  }, [ready, onReady]);
282
320
  useEffect(function () {
283
- var _ref$current2 = _ref12.current,
321
+ var _ref$current2 = _ref14.current,
284
322
  element = _ref$current2 === void 0 ? null : _ref$current2;
285
323
  if (element === null) {
286
324
  return;
@@ -317,7 +355,7 @@ var Video = function Video(_ref) {
317
355
  }) : null, !isImageWithoutSourceFile ? /*#__PURE__*/React.createElement("video", {
318
356
  key: mediaUrl,
319
357
  ref: function ref(newRef) {
320
- _ref12.current = newRef;
358
+ _ref14.current = newRef;
321
359
  if (mediaRef !== null && isFunction(mediaRef)) {
322
360
  mediaRef(newRef);
323
361
  } else if (mediaRef !== null) {
@@ -346,9 +384,9 @@ var Video = function Video(_ref) {
346
384
  "data-has-audio": hasAudio,
347
385
  "data-is-suspended": isSuspended,
348
386
  "aria-hidden": true
349
- }, (sourceFiles || []).map(function (_ref11) {
350
- var sourceUrl = _ref11.url,
351
- sourceMime = _ref11.mime;
387
+ }, (sourceFiles || []).map(function (_ref13) {
388
+ var sourceUrl = _ref13.url,
389
+ sourceMime = _ref13.mime;
352
390
  return /*#__PURE__*/React.createElement("source", {
353
391
  key: "".concat(sourceUrl, "-").concat(sourceMime),
354
392
  src: sourceUrl !== null ? "".concat(sourceUrl, "#t=0.001") : null,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micromag/element-video",
3
- "version": "0.3.579",
3
+ "version": "0.3.580",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "keywords": [
@@ -72,5 +72,5 @@
72
72
  "access": "public",
73
73
  "registry": "https://registry.npmjs.org/"
74
74
  },
75
- "gitHead": "4c435acd50f36704c12652d8df9e5a86cfe0cf08"
75
+ "gitHead": "8534b331c1ddf17be6cb2bb33dc32f6ed31cf391"
76
76
  }