@micromag/element-video 0.3.582 → 0.3.583
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 +70 -50
- package/package.json +4 -4
package/es/index.js
CHANGED
|
@@ -140,19 +140,19 @@ var Video = function Video(_ref) {
|
|
|
140
140
|
return getMediaFilesAsArray(files);
|
|
141
141
|
}, [files]);
|
|
142
142
|
var finalThumbnail = useMediaThumbnail(media, thumbnail);
|
|
143
|
-
var
|
|
144
|
-
var currentTime = useMediaCurrentTime(
|
|
143
|
+
var _ref16 = useRef(null);
|
|
144
|
+
var currentTime = useMediaCurrentTime(_ref16.current, {
|
|
145
145
|
id: mediaUrl,
|
|
146
146
|
disabled: paused || onProgressStep === null
|
|
147
147
|
});
|
|
148
|
-
var duration = useMediaDuration(
|
|
148
|
+
var duration = useMediaDuration(_ref16.current, {
|
|
149
149
|
id: mediaUrl
|
|
150
150
|
});
|
|
151
151
|
var _useState = useState(false),
|
|
152
152
|
_useState2 = _slicedToArray(_useState, 2),
|
|
153
153
|
showLoading = _useState2[0],
|
|
154
154
|
setShowLoading = _useState2[1];
|
|
155
|
-
var ready = useMediaReady(
|
|
155
|
+
var ready = useMediaReady(_ref16.current, {
|
|
156
156
|
id: mediaUrl
|
|
157
157
|
});
|
|
158
158
|
useEffect(function () {
|
|
@@ -167,11 +167,12 @@ var Video = function Video(_ref) {
|
|
|
167
167
|
clearTimeout(id);
|
|
168
168
|
};
|
|
169
169
|
}, [mediaUrl, withLoading]);
|
|
170
|
-
var
|
|
171
|
-
|
|
172
|
-
|
|
170
|
+
var _useState3 = useState(false),
|
|
171
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
172
|
+
hlsFailed = _useState4[0],
|
|
173
|
+
setHlsFailed = _useState4[1];
|
|
173
174
|
var hlsSources = useMemo(function () {
|
|
174
|
-
if (filesArray.length === 0 || disableHls) {
|
|
175
|
+
if (filesArray.length === 0 || disableHls || !Hls.isSupported() || hlsFailed) {
|
|
175
176
|
return null;
|
|
176
177
|
}
|
|
177
178
|
return filesArray.filter(function (_ref4) {
|
|
@@ -181,24 +182,24 @@ var Video = function Video(_ref) {
|
|
|
181
182
|
name = _ref4$name === void 0 ? null : _ref4$name;
|
|
182
183
|
return mime === 'application/vnd.apple.mpegurl' || (name || '').endsWith('.m3u8');
|
|
183
184
|
});
|
|
184
|
-
}, [filesArray,
|
|
185
|
-
var
|
|
186
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
187
|
-
hlsJs = _useState4[0],
|
|
188
|
-
setHlsJs = _useState4[1];
|
|
189
|
-
var _useState5 = useState(0),
|
|
185
|
+
}, [filesArray, disableHls, hlsFailed]);
|
|
186
|
+
var _useState5 = useState(null),
|
|
190
187
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
191
|
-
|
|
192
|
-
|
|
188
|
+
hlsJs = _useState6[0],
|
|
189
|
+
setHlsJs = _useState6[1];
|
|
190
|
+
var _useState7 = useState(0),
|
|
191
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
192
|
+
hlsTsOffset = _useState8[0],
|
|
193
|
+
setHlsTsOffset = _useState8[1];
|
|
193
194
|
|
|
194
195
|
// initialize hls instance if an hls source is provided
|
|
195
196
|
useEffect(function () {
|
|
196
|
-
if (_ref15.current === null || !hlsIsSupported) {
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
197
|
setHlsTsOffset(0);
|
|
200
|
-
|
|
198
|
+
setHlsFailed(false);
|
|
199
|
+
if (shouldLoad && _ref16.current !== null && hlsSources !== null && hlsSources.length > 0) {
|
|
201
200
|
var hls = new Hls({
|
|
201
|
+
maxBufferLength: 15,
|
|
202
|
+
// seconds. prevents loading too much per screen.
|
|
202
203
|
startLevel: qualityStartLevel
|
|
203
204
|
});
|
|
204
205
|
hls.on(Hls.Events.LEVEL_SWITCHED, function (_, _ref5) {
|
|
@@ -207,19 +208,36 @@ var Video = function Video(_ref) {
|
|
|
207
208
|
onQualityLevelChange(level);
|
|
208
209
|
}
|
|
209
210
|
});
|
|
211
|
+
hls.on(Hls.Events.ERROR, function (_, _ref6) {
|
|
212
|
+
var isFatal = _ref6.fatal,
|
|
213
|
+
errorType = _ref6.type;
|
|
214
|
+
if (isFatal) {
|
|
215
|
+
switch (errorType) {
|
|
216
|
+
case Hls.ErrorTypes.MEDIA_ERROR:
|
|
217
|
+
// automatically try to recover from media errors
|
|
218
|
+
hls.recoverMediaError();
|
|
219
|
+
break;
|
|
220
|
+
case Hls.ErrorTypes.NETWORK_ERROR:
|
|
221
|
+
// happens when all retries and media options have been exhausted. in that case, fallback to mp4/webm playback
|
|
222
|
+
setHlsJs(null);
|
|
223
|
+
setHlsFailed(true);
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
});
|
|
210
228
|
|
|
211
229
|
// compute hls timestamp offset when we get the first video fragment
|
|
212
|
-
var _onHlsBufferAppended = function onHlsBufferAppended(_,
|
|
213
|
-
var frag =
|
|
230
|
+
var _onHlsBufferAppended = function onHlsBufferAppended(_, _ref7) {
|
|
231
|
+
var frag = _ref7.frag;
|
|
214
232
|
var fragStart = frag.start,
|
|
215
233
|
fragType = frag.type,
|
|
216
234
|
_frag$sn = frag.sn,
|
|
217
235
|
fragSn = _frag$sn === void 0 ? null : _frag$sn,
|
|
218
236
|
_frag$elementaryStrea = frag.elementaryStreams.video,
|
|
219
237
|
videoStream = _frag$elementaryStrea === void 0 ? null : _frag$elementaryStrea;
|
|
220
|
-
var
|
|
221
|
-
|
|
222
|
-
videoStartPTS =
|
|
238
|
+
var _ref8 = videoStream || {},
|
|
239
|
+
_ref8$startPTS = _ref8.startPTS,
|
|
240
|
+
videoStartPTS = _ref8$startPTS === void 0 ? null : _ref8$startPTS;
|
|
223
241
|
if (fragType === 'main' && fragSn !== 'initSegment' && videoStartPTS !== null) {
|
|
224
242
|
var tOffset = videoStartPTS - fragStart;
|
|
225
243
|
hls.off(Hls.Events.BUFFER_APPENDED, _onHlsBufferAppended);
|
|
@@ -229,13 +247,15 @@ var Video = function Video(_ref) {
|
|
|
229
247
|
hls.on(Hls.Events.BUFFER_APPENDED, _onHlsBufferAppended);
|
|
230
248
|
hls.loadSource(hlsSources[0].url);
|
|
231
249
|
setHlsJs(hls);
|
|
250
|
+
} else {
|
|
251
|
+
setHlsJs(null);
|
|
232
252
|
}
|
|
233
|
-
}, [shouldLoad,
|
|
253
|
+
}, [shouldLoad, hlsSources, _ref16]);
|
|
234
254
|
|
|
235
255
|
// attach hls.js when the <video> ref is ready
|
|
236
256
|
useEffect(function () {
|
|
237
|
-
if (hlsJs !== null &&
|
|
238
|
-
hlsJs.attachMedia(
|
|
257
|
+
if (hlsJs !== null && _ref16.current !== null) {
|
|
258
|
+
hlsJs.attachMedia(_ref16.current);
|
|
239
259
|
}
|
|
240
260
|
return function () {
|
|
241
261
|
if (hlsJs !== null) {
|
|
@@ -243,7 +263,7 @@ var Video = function Video(_ref) {
|
|
|
243
263
|
hlsJs.destroy();
|
|
244
264
|
}
|
|
245
265
|
};
|
|
246
|
-
}, [hlsJs,
|
|
266
|
+
}, [hlsJs, _ref16.current]);
|
|
247
267
|
|
|
248
268
|
// handle changes of qualityStartLevel when an hls.js instance exists
|
|
249
269
|
useEffect(function () {
|
|
@@ -269,11 +289,11 @@ var Video = function Video(_ref) {
|
|
|
269
289
|
var _file$mime2 = file.mime,
|
|
270
290
|
mime = _file$mime2 === void 0 ? "video/".concat(fileHandle === 'h264' ? 'mp4' : fileHandle) : _file$mime2;
|
|
271
291
|
var currentMimeFile = filesMap[mime] || null;
|
|
272
|
-
var
|
|
273
|
-
|
|
274
|
-
currentId =
|
|
275
|
-
|
|
276
|
-
currentHandle =
|
|
292
|
+
var _ref9 = currentMimeFile || {},
|
|
293
|
+
_ref9$id = _ref9.id,
|
|
294
|
+
currentId = _ref9$id === void 0 ? null : _ref9$id,
|
|
295
|
+
_ref9$handle = _ref9.handle,
|
|
296
|
+
currentHandle = _ref9$handle === void 0 ? null : _ref9$handle;
|
|
277
297
|
var currentMimeHandle = currentHandle || currentId;
|
|
278
298
|
return currentMimeFile === null || currentMimeHandle === 'original' ? _objectSpread(_objectSpread({}, filesMap), {}, _defineProperty({}, mime, file)) : filesMap;
|
|
279
299
|
}, {});
|
|
@@ -283,14 +303,14 @@ var Video = function Video(_ref) {
|
|
|
283
303
|
}, [filesArray, hlsSources]);
|
|
284
304
|
|
|
285
305
|
// @NOTE: Media is an animated image and doesn't have source files in video formats
|
|
286
|
-
var
|
|
287
|
-
var handle =
|
|
306
|
+
var _ref10 = filesArray.find(function (_ref11) {
|
|
307
|
+
var handle = _ref11.handle;
|
|
288
308
|
return handle === 'original';
|
|
289
309
|
}) || {},
|
|
290
|
-
|
|
291
|
-
originalType =
|
|
292
|
-
|
|
293
|
-
originalMime =
|
|
310
|
+
_ref10$type = _ref10.type,
|
|
311
|
+
originalType = _ref10$type === void 0 ? null : _ref10$type,
|
|
312
|
+
_ref10$mime = _ref10.mime,
|
|
313
|
+
originalMime = _ref10$mime === void 0 ? mediaMime : _ref10$mime;
|
|
294
314
|
var originalFileIsImage = originalType === 'image' || originalMime !== null && originalMime.indexOf('image/') === 0;
|
|
295
315
|
var isImageWithoutSourceFile = originalFileIsImage && (sourceFiles === null || sourceFiles.length === 0);
|
|
296
316
|
var withSize = width !== null && height !== null;
|
|
@@ -300,7 +320,7 @@ var Video = function Video(_ref) {
|
|
|
300
320
|
}
|
|
301
321
|
}, [duration, customOnDurationChange]);
|
|
302
322
|
var onVolumeChange = useCallback(function () {
|
|
303
|
-
var _ref$current =
|
|
323
|
+
var _ref$current = _ref16.current,
|
|
304
324
|
element = _ref$current === void 0 ? null : _ref$current;
|
|
305
325
|
if (element === null) {
|
|
306
326
|
return;
|
|
@@ -311,10 +331,10 @@ var Video = function Video(_ref) {
|
|
|
311
331
|
}, [customOnVolumeChange]);
|
|
312
332
|
|
|
313
333
|
// Manage suspend
|
|
314
|
-
var
|
|
315
|
-
|
|
316
|
-
isSuspended =
|
|
317
|
-
setIsSuspended =
|
|
334
|
+
var _useState9 = useState(false),
|
|
335
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
336
|
+
isSuspended = _useState10[0],
|
|
337
|
+
setIsSuspended = _useState10[1];
|
|
318
338
|
var onPlay = useCallback(function (e) {
|
|
319
339
|
if (isSuspended) {
|
|
320
340
|
setIsSuspended(false);
|
|
@@ -345,7 +365,7 @@ var Video = function Video(_ref) {
|
|
|
345
365
|
}
|
|
346
366
|
}, [ready, onReady]);
|
|
347
367
|
useEffect(function () {
|
|
348
|
-
var _ref$current2 =
|
|
368
|
+
var _ref$current2 = _ref16.current,
|
|
349
369
|
element = _ref$current2 === void 0 ? null : _ref$current2;
|
|
350
370
|
if (element === null) {
|
|
351
371
|
return;
|
|
@@ -382,7 +402,7 @@ var Video = function Video(_ref) {
|
|
|
382
402
|
}) : null, !isImageWithoutSourceFile ? /*#__PURE__*/React.createElement("video", {
|
|
383
403
|
key: mediaUrl,
|
|
384
404
|
ref: function ref(newRef) {
|
|
385
|
-
|
|
405
|
+
_ref16.current = newRef;
|
|
386
406
|
if (mediaRef !== null && isFunction(mediaRef)) {
|
|
387
407
|
mediaRef(newRef);
|
|
388
408
|
} else if (mediaRef !== null) {
|
|
@@ -413,9 +433,9 @@ var Video = function Video(_ref) {
|
|
|
413
433
|
"data-hls": hlsJs !== null,
|
|
414
434
|
"data-ts-offset": hlsTsOffset,
|
|
415
435
|
"aria-hidden": true
|
|
416
|
-
}, (sourceFiles || []).map(function (
|
|
417
|
-
var sourceUrl =
|
|
418
|
-
sourceMime =
|
|
436
|
+
}, (sourceFiles || []).map(function (_ref15) {
|
|
437
|
+
var sourceUrl = _ref15.url,
|
|
438
|
+
sourceMime = _ref15.mime;
|
|
419
439
|
return /*#__PURE__*/React.createElement("source", {
|
|
420
440
|
key: "".concat(sourceUrl, "-").concat(sourceMime),
|
|
421
441
|
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.583",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "",
|
|
6
6
|
"keywords": [
|
|
@@ -59,8 +59,8 @@
|
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
61
|
"@babel/runtime": "^7.13.10",
|
|
62
|
-
"@micromag/core": "^0.3.
|
|
63
|
-
"@micromag/element-closed-captions": "^0.3.
|
|
62
|
+
"@micromag/core": "^0.3.583",
|
|
63
|
+
"@micromag/element-closed-captions": "^0.3.583",
|
|
64
64
|
"classnames": "^2.2.6",
|
|
65
65
|
"hls.js": "^1.5.15",
|
|
66
66
|
"lodash": "^4.17.21",
|
|
@@ -72,5 +72,5 @@
|
|
|
72
72
|
"access": "public",
|
|
73
73
|
"registry": "https://registry.npmjs.org/"
|
|
74
74
|
},
|
|
75
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "d899cc28ac1f5b552114d8bfcd668a9bb8ab651c"
|
|
76
76
|
}
|