@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.
- package/es/index.js +67 -29
- 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
|
|
138
|
-
var currentTime = useMediaCurrentTime(
|
|
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(
|
|
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(
|
|
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 (
|
|
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
|
|
224
|
+
setHlsJs(hls);
|
|
187
225
|
}
|
|
188
|
-
}, [hlsIsSupported, hlsSources,
|
|
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
|
|
208
|
-
|
|
209
|
-
currentId =
|
|
210
|
-
|
|
211
|
-
currentHandle =
|
|
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
|
|
222
|
-
var handle =
|
|
259
|
+
var _ref8 = filesArray.find(function (_ref9) {
|
|
260
|
+
var handle = _ref9.handle;
|
|
223
261
|
return handle === 'original';
|
|
224
262
|
}) || {},
|
|
225
|
-
|
|
226
|
-
originalType =
|
|
227
|
-
|
|
228
|
-
originalMime =
|
|
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 =
|
|
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
|
|
250
|
-
|
|
251
|
-
isSuspended =
|
|
252
|
-
setIsSuspended =
|
|
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 =
|
|
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
|
-
|
|
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 (
|
|
350
|
-
var sourceUrl =
|
|
351
|
-
sourceMime =
|
|
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.
|
|
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": "
|
|
75
|
+
"gitHead": "8534b331c1ddf17be6cb2bb33dc32f6ed31cf391"
|
|
76
76
|
}
|