@micromag/element-video 0.3.580 → 0.3.582
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 +77 -48
- package/package.json +2 -2
package/es/index.js
CHANGED
|
@@ -45,9 +45,11 @@ var propTypes = {
|
|
|
45
45
|
onSuspend: PropTypes$1.func,
|
|
46
46
|
onSuspended: PropTypes$1.func,
|
|
47
47
|
onPlayError: PropTypes$1.func,
|
|
48
|
+
onQualityLevelChange: PropTypes$1.func,
|
|
48
49
|
focusable: PropTypes$1.bool,
|
|
49
50
|
withPoster: PropTypes$1.bool,
|
|
50
|
-
withLoading: PropTypes$1.bool
|
|
51
|
+
withLoading: PropTypes$1.bool,
|
|
52
|
+
qualityStartLevel: PropTypes$1.number
|
|
51
53
|
};
|
|
52
54
|
var defaultProps = {
|
|
53
55
|
media: null,
|
|
@@ -79,9 +81,11 @@ var defaultProps = {
|
|
|
79
81
|
onSuspend: null,
|
|
80
82
|
onSuspended: null,
|
|
81
83
|
onPlayError: null,
|
|
84
|
+
onQualityLevelChange: null,
|
|
82
85
|
focusable: true,
|
|
83
86
|
withPoster: false,
|
|
84
|
-
withLoading: false
|
|
87
|
+
withLoading: false,
|
|
88
|
+
qualityStartLevel: -1
|
|
85
89
|
};
|
|
86
90
|
var Video = function Video(_ref) {
|
|
87
91
|
var media = _ref.media,
|
|
@@ -111,11 +115,13 @@ var Video = function Video(_ref) {
|
|
|
111
115
|
customOnSuspend = _ref.onSuspend,
|
|
112
116
|
onSuspended = _ref.onSuspended,
|
|
113
117
|
onPlayError = _ref.onPlayError,
|
|
118
|
+
onQualityLevelChange = _ref.onQualityLevelChange,
|
|
114
119
|
focusable = _ref.focusable,
|
|
115
120
|
withPoster = _ref.withPoster,
|
|
116
121
|
withLoading = _ref.withLoading,
|
|
117
122
|
disablePictureInPicture = _ref.disablePictureInPicture,
|
|
118
|
-
disableHls = _ref.disableHls
|
|
123
|
+
disableHls = _ref.disableHls,
|
|
124
|
+
qualityStartLevel = _ref.qualityStartLevel;
|
|
119
125
|
var _ref2 = media || {},
|
|
120
126
|
_ref2$url = _ref2.url,
|
|
121
127
|
mediaUrl = _ref2$url === void 0 ? null : _ref2$url,
|
|
@@ -134,19 +140,19 @@ var Video = function Video(_ref) {
|
|
|
134
140
|
return getMediaFilesAsArray(files);
|
|
135
141
|
}, [files]);
|
|
136
142
|
var finalThumbnail = useMediaThumbnail(media, thumbnail);
|
|
137
|
-
var
|
|
138
|
-
var currentTime = useMediaCurrentTime(
|
|
143
|
+
var _ref15 = useRef(null);
|
|
144
|
+
var currentTime = useMediaCurrentTime(_ref15.current, {
|
|
139
145
|
id: mediaUrl,
|
|
140
146
|
disabled: paused || onProgressStep === null
|
|
141
147
|
});
|
|
142
|
-
var duration = useMediaDuration(
|
|
148
|
+
var duration = useMediaDuration(_ref15.current, {
|
|
143
149
|
id: mediaUrl
|
|
144
150
|
});
|
|
145
151
|
var _useState = useState(false),
|
|
146
152
|
_useState2 = _slicedToArray(_useState, 2),
|
|
147
153
|
showLoading = _useState2[0],
|
|
148
154
|
setShowLoading = _useState2[1];
|
|
149
|
-
var ready = useMediaReady(
|
|
155
|
+
var ready = useMediaReady(_ref15.current, {
|
|
150
156
|
id: mediaUrl
|
|
151
157
|
});
|
|
152
158
|
useEffect(function () {
|
|
@@ -180,39 +186,40 @@ var Video = function Video(_ref) {
|
|
|
180
186
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
181
187
|
hlsJs = _useState4[0],
|
|
182
188
|
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
189
|
var _useState5 = useState(0),
|
|
195
|
-
_useState6 = _slicedToArray(_useState5, 2)
|
|
196
|
-
_useState6[0]
|
|
197
|
-
|
|
190
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
191
|
+
hlsTsOffset = _useState6[0],
|
|
192
|
+
setHlsTsOffset = _useState6[1];
|
|
193
|
+
|
|
194
|
+
// initialize hls instance if an hls source is provided
|
|
198
195
|
useEffect(function () {
|
|
199
|
-
if (
|
|
196
|
+
if (_ref15.current === null || !hlsIsSupported) {
|
|
200
197
|
return;
|
|
201
198
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
var hls = new Hls(
|
|
205
|
-
|
|
206
|
-
|
|
199
|
+
setHlsTsOffset(0);
|
|
200
|
+
if (shouldLoad && hlsSources !== null && hlsSources.length > 0) {
|
|
201
|
+
var hls = new Hls({
|
|
202
|
+
startLevel: qualityStartLevel
|
|
203
|
+
});
|
|
204
|
+
hls.on(Hls.Events.LEVEL_SWITCHED, function (_, _ref5) {
|
|
205
|
+
var level = _ref5.level;
|
|
206
|
+
if (onQualityLevelChange !== null) {
|
|
207
|
+
onQualityLevelChange(level);
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
// compute hls timestamp offset when we get the first video fragment
|
|
212
|
+
var _onHlsBufferAppended = function onHlsBufferAppended(_, _ref6) {
|
|
213
|
+
var frag = _ref6.frag;
|
|
207
214
|
var fragStart = frag.start,
|
|
208
215
|
fragType = frag.type,
|
|
209
216
|
_frag$sn = frag.sn,
|
|
210
217
|
fragSn = _frag$sn === void 0 ? null : _frag$sn,
|
|
211
218
|
_frag$elementaryStrea = frag.elementaryStreams.video,
|
|
212
219
|
videoStream = _frag$elementaryStrea === void 0 ? null : _frag$elementaryStrea;
|
|
213
|
-
var
|
|
214
|
-
|
|
215
|
-
videoStartPTS =
|
|
220
|
+
var _ref7 = videoStream || {},
|
|
221
|
+
_ref7$startPTS = _ref7.startPTS,
|
|
222
|
+
videoStartPTS = _ref7$startPTS === void 0 ? null : _ref7$startPTS;
|
|
216
223
|
if (fragType === 'main' && fragSn !== 'initSegment' && videoStartPTS !== null) {
|
|
217
224
|
var tOffset = videoStartPTS - fragStart;
|
|
218
225
|
hls.off(Hls.Events.BUFFER_APPENDED, _onHlsBufferAppended);
|
|
@@ -223,7 +230,27 @@ var Video = function Video(_ref) {
|
|
|
223
230
|
hls.loadSource(hlsSources[0].url);
|
|
224
231
|
setHlsJs(hls);
|
|
225
232
|
}
|
|
226
|
-
}, [hlsIsSupported, hlsSources,
|
|
233
|
+
}, [shouldLoad, hlsIsSupported, hlsSources, _ref15]);
|
|
234
|
+
|
|
235
|
+
// attach hls.js when the <video> ref is ready
|
|
236
|
+
useEffect(function () {
|
|
237
|
+
if (hlsJs !== null && _ref15.current !== null) {
|
|
238
|
+
hlsJs.attachMedia(_ref15.current);
|
|
239
|
+
}
|
|
240
|
+
return function () {
|
|
241
|
+
if (hlsJs !== null) {
|
|
242
|
+
hlsJs.detachMedia();
|
|
243
|
+
hlsJs.destroy();
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
}, [hlsJs, _ref15.current]);
|
|
247
|
+
|
|
248
|
+
// handle changes of qualityStartLevel when an hls.js instance exists
|
|
249
|
+
useEffect(function () {
|
|
250
|
+
if (hlsJs !== null) {
|
|
251
|
+
hlsJs.startLevel = qualityStartLevel;
|
|
252
|
+
}
|
|
253
|
+
}, [qualityStartLevel]);
|
|
227
254
|
var sourceFiles = useMemo(function () {
|
|
228
255
|
if (filesArray.length === 0 || hlsSources !== null && hlsSources.length > 0) {
|
|
229
256
|
return null;
|
|
@@ -242,11 +269,11 @@ var Video = function Video(_ref) {
|
|
|
242
269
|
var _file$mime2 = file.mime,
|
|
243
270
|
mime = _file$mime2 === void 0 ? "video/".concat(fileHandle === 'h264' ? 'mp4' : fileHandle) : _file$mime2;
|
|
244
271
|
var currentMimeFile = filesMap[mime] || null;
|
|
245
|
-
var
|
|
246
|
-
|
|
247
|
-
currentId =
|
|
248
|
-
|
|
249
|
-
currentHandle =
|
|
272
|
+
var _ref8 = currentMimeFile || {},
|
|
273
|
+
_ref8$id = _ref8.id,
|
|
274
|
+
currentId = _ref8$id === void 0 ? null : _ref8$id,
|
|
275
|
+
_ref8$handle = _ref8.handle,
|
|
276
|
+
currentHandle = _ref8$handle === void 0 ? null : _ref8$handle;
|
|
250
277
|
var currentMimeHandle = currentHandle || currentId;
|
|
251
278
|
return currentMimeFile === null || currentMimeHandle === 'original' ? _objectSpread(_objectSpread({}, filesMap), {}, _defineProperty({}, mime, file)) : filesMap;
|
|
252
279
|
}, {});
|
|
@@ -256,14 +283,14 @@ var Video = function Video(_ref) {
|
|
|
256
283
|
}, [filesArray, hlsSources]);
|
|
257
284
|
|
|
258
285
|
// @NOTE: Media is an animated image and doesn't have source files in video formats
|
|
259
|
-
var
|
|
260
|
-
var handle =
|
|
286
|
+
var _ref9 = filesArray.find(function (_ref10) {
|
|
287
|
+
var handle = _ref10.handle;
|
|
261
288
|
return handle === 'original';
|
|
262
289
|
}) || {},
|
|
263
|
-
|
|
264
|
-
originalType =
|
|
265
|
-
|
|
266
|
-
originalMime =
|
|
290
|
+
_ref9$type = _ref9.type,
|
|
291
|
+
originalType = _ref9$type === void 0 ? null : _ref9$type,
|
|
292
|
+
_ref9$mime = _ref9.mime,
|
|
293
|
+
originalMime = _ref9$mime === void 0 ? mediaMime : _ref9$mime;
|
|
267
294
|
var originalFileIsImage = originalType === 'image' || originalMime !== null && originalMime.indexOf('image/') === 0;
|
|
268
295
|
var isImageWithoutSourceFile = originalFileIsImage && (sourceFiles === null || sourceFiles.length === 0);
|
|
269
296
|
var withSize = width !== null && height !== null;
|
|
@@ -273,7 +300,7 @@ var Video = function Video(_ref) {
|
|
|
273
300
|
}
|
|
274
301
|
}, [duration, customOnDurationChange]);
|
|
275
302
|
var onVolumeChange = useCallback(function () {
|
|
276
|
-
var _ref$current =
|
|
303
|
+
var _ref$current = _ref15.current,
|
|
277
304
|
element = _ref$current === void 0 ? null : _ref$current;
|
|
278
305
|
if (element === null) {
|
|
279
306
|
return;
|
|
@@ -318,7 +345,7 @@ var Video = function Video(_ref) {
|
|
|
318
345
|
}
|
|
319
346
|
}, [ready, onReady]);
|
|
320
347
|
useEffect(function () {
|
|
321
|
-
var _ref$current2 =
|
|
348
|
+
var _ref$current2 = _ref15.current,
|
|
322
349
|
element = _ref$current2 === void 0 ? null : _ref$current2;
|
|
323
350
|
if (element === null) {
|
|
324
351
|
return;
|
|
@@ -355,7 +382,7 @@ var Video = function Video(_ref) {
|
|
|
355
382
|
}) : null, !isImageWithoutSourceFile ? /*#__PURE__*/React.createElement("video", {
|
|
356
383
|
key: mediaUrl,
|
|
357
384
|
ref: function ref(newRef) {
|
|
358
|
-
|
|
385
|
+
_ref15.current = newRef;
|
|
359
386
|
if (mediaRef !== null && isFunction(mediaRef)) {
|
|
360
387
|
mediaRef(newRef);
|
|
361
388
|
} else if (mediaRef !== null) {
|
|
@@ -383,10 +410,12 @@ var Video = function Video(_ref) {
|
|
|
383
410
|
onSuspend: onSuspend,
|
|
384
411
|
"data-has-audio": hasAudio,
|
|
385
412
|
"data-is-suspended": isSuspended,
|
|
413
|
+
"data-hls": hlsJs !== null,
|
|
414
|
+
"data-ts-offset": hlsTsOffset,
|
|
386
415
|
"aria-hidden": true
|
|
387
|
-
}, (sourceFiles || []).map(function (
|
|
388
|
-
var sourceUrl =
|
|
389
|
-
sourceMime =
|
|
416
|
+
}, (sourceFiles || []).map(function (_ref14) {
|
|
417
|
+
var sourceUrl = _ref14.url,
|
|
418
|
+
sourceMime = _ref14.mime;
|
|
390
419
|
return /*#__PURE__*/React.createElement("source", {
|
|
391
420
|
key: "".concat(sourceUrl, "-").concat(sourceMime),
|
|
392
421
|
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.582",
|
|
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": "95704cba6bce8f9329171fbcb06acba2543decc0"
|
|
76
76
|
}
|