@gumlet/react-hls-player
Version:
Component for video playback using HLS.js in react
83 lines (82 loc) • 3.4 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
import React, { useEffect } from 'react';
import Hls from 'hls.js';
function ReactHlsPlayer(_a) {
var hlsConfig = _a.hlsConfig, _b = _a.playerRef, playerRef = _b === void 0 ? React.createRef() : _b, getHLSRef = _a.getHLSRef, src = _a.src, autoPlay = _a.autoPlay, props = __rest(_a, ["hlsConfig", "playerRef", "getHLSRef", "src", "autoPlay"]);
useEffect(function () {
var hls;
function _initPlayer() {
if (hls != null) {
hls.destroy();
}
window.Hls = Hls;
var newHls = new Hls(__assign({ enableWorker: false }, hlsConfig));
if (getHLSRef) {
getHLSRef(newHls);
}
if (playerRef.current != null) {
newHls.attachMedia(playerRef.current);
}
newHls.on(Hls.Events.MEDIA_ATTACHED, function () {
newHls.loadSource(src);
newHls.on(Hls.Events.MANIFEST_PARSED, function () {
var _a;
if (autoPlay) {
(_a = playerRef === null || playerRef === void 0 ? void 0 : playerRef.current) === null || _a === void 0 ? void 0 : _a.play().catch(function () {
return console.log('Unable to autoplay prior to user interaction with the dom.');
});
}
});
});
newHls.on(Hls.Events.ERROR, function (event, data) {
if (data.fatal) {
switch (data.type) {
case Hls.ErrorTypes.NETWORK_ERROR:
newHls.startLoad();
break;
case Hls.ErrorTypes.MEDIA_ERROR:
newHls.recoverMediaError();
break;
default:
_initPlayer();
break;
}
}
});
hls = newHls;
}
if (Hls.isSupported()) {
_initPlayer();
}
return function () {
if (hls != null) {
hls.destroy();
}
};
}, [autoPlay, hlsConfig, playerRef, getHLSRef, src]);
if (Hls.isSupported())
return React.createElement("video", __assign({ ref: playerRef }, props));
return React.createElement("video", __assign({ ref: playerRef, src: src, autoPlay: autoPlay }, props));
}
export default ReactHlsPlayer;