UNPKG

@trap_stevo/legendarybuilderproreact-ui

Version:

The legendary UI & utility API that makes your application a legendary application. ~ Created by Steven Compton

598 lines 27.6 kB
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator"; import _defineProperty from "@babel/runtime/helpers/defineProperty"; import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import _regeneratorRuntime from "@babel/runtime/regenerator"; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } import React, { useEffect, useRef, useState, useCallback } from "react"; import { HUDUniversalHUDUtilityManager, Countdown, Delay } from "../HUDManagers/HUDUniversalHUDUtilityManager.js"; import { useIdleDetection } from "../HUDManagers/HUDUniversalHUDEventEffectsManager.js"; import PropTypes from "prop-types"; import flvjs from "flv.js"; var styles = { container: { display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", height: "100vh", width: "100vw", backgroundColor: "#1a1a1a", color: "#00ffcc", fontFamily: "'Orbitron', sans-serif" }, actionContainer: { display: "flex", flexDirection: "column", justifyContent: "center", alignItems: "center", gap: "10px" }, videoContainer: { position: "relative", width: "100%" }, video: { borderRadius: "10px", boxShadow: "0 0 20px rgba(0, 255, 204, 0.569)", width: "100%" }, overlay: { position: "absolute", display: "flex", alignItems: "center", justifyContent: "center", backgroundColor: "rgba(0, 0, 0, 0.569)", borderRadius: "10px", height: "100%", width: "100%", zIndex: 1, left: 0, top: 0 }, message: { fontSize: "1.69rem", color: "#00ffcc", textShadow: "0 0 10px rgba(0, 255, 204, 0.7)" }, loadingSpinner: { border: "6px solid rgba(0, 255, 204, 0.2)", borderTop: "6px solid #00ffcc", borderRadius: "50%", animation: "spin 1s linear infinite", height: "69px", width: "69px", marginBottom: "15px", marginTop: "20px" } }; var keyframes = "\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n"; function log(type) { var enableLogging = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var onLog = arguments.length > 2 ? arguments[2] : undefined; var now = new Date(); var timestamp = now.toLocaleString(); for (var _len = arguments.length, message = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { message[_key - 3] = arguments[_key]; } if (onLog) { onLog.apply(void 0, ["[".concat(timestamp, "] ").concat(type.toUpperCase() !== "LOG" ? "[".concat(type.toUpperCase(), "]") : "", " :: ")].concat(message)); } if (!enableLogging) { return; } var logMethod = { log: console.log, info: console.info, warn: console.warn, error: console.error, debug: console.debug }[type] || console.log; logMethod.apply(void 0, ["[".concat(timestamp, "] ").concat(type.toUpperCase() !== "LOG" ? "[".concat(type.toUpperCase(), "]") : "", " :: ")].concat(message)); } ; function VideoStream(_ref) { var _ref$actionContainerC = _ref.actionContainerConfigurationSettings, actionContainerConfigurationSettings = _ref$actionContainerC === void 0 ? {} : _ref$actionContainerC, _ref$videoContainerCo = _ref.videoContainerConfigurationSettings, videoContainerConfigurationSettings = _ref$videoContainerCo === void 0 ? {} : _ref$videoContainerCo, _ref$loadingSpinnerCo = _ref.loadingSpinnerConfigurationSettings, loadingSpinnerConfigurationSettings = _ref$loadingSpinnerCo === void 0 ? {} : _ref$loadingSpinnerCo, _ref$containerConfigu = _ref.containerConfigurationSettings, containerConfigurationSettings = _ref$containerConfigu === void 0 ? {} : _ref$containerConfigu, _ref$messageConfigura = _ref.messageConfigurationSettings, messageConfigurationSettings = _ref$messageConfigura === void 0 ? {} : _ref$messageConfigura, _ref$overlayConfigura = _ref.overlayConfigurationSettings, overlayConfigurationSettings = _ref$overlayConfigura === void 0 ? {} : _ref$overlayConfigura, _ref$videoConfigurati = _ref.videoConfigurationSettings, videoConfigurationSettings = _ref$videoConfigurati === void 0 ? {} : _ref$videoConfigurati, _ref$webRTSPStreamCon = _ref.webRTSPStreamConfigurations, webRTSPStreamConfigurations = _ref$webRTSPStreamCon === void 0 ? {} : _ref$webRTSPStreamCon, _ref$hardwareAccelera = _ref.hardwareAccelerated, hardwareAccelerated = _ref$hardwareAccelera === void 0 ? true : _ref$hardwareAccelera, _ref$gStreamerDirect = _ref.gStreamerDirect, gStreamerDirect = _ref$gStreamerDirect === void 0 ? false : _ref$gStreamerDirect, _ref$useGStreamer = _ref.useGStreamer, useGStreamer = _ref$useGStreamer === void 0 ? false : _ref$useGStreamer, _ref$signalURL = _ref.signalURL, signalURL = _ref$signalURL === void 0 ? "http://localhost:5069" : _ref$signalURL, _ref$rtspURL = _ref.rtspURL, rtspURL = _ref$rtspURL === void 0 ? "rtsp://localhost:8554" : _ref$rtspURL, _ref$webRTSPIdleTimeL = _ref.webRTSPIdleTimeLimit, webRTSPIdleTimeLimit = _ref$webRTSPIdleTimeL === void 0 ? 3000 : _ref$webRTSPIdleTimeL, _ref$directAddress = _ref.directAddress, directAddress = _ref$directAddress === void 0 ? "127.0.0.1" : _ref$directAddress, _ref$directPort = _ref.directPort, directPort = _ref$directPort === void 0 ? 8769 : _ref$directPort, _ref$autoCleanupMaxBa = _ref.autoCleanupMaxBackwardDuration, autoCleanupMaxBackwardDuration = _ref$autoCleanupMaxBa === void 0 ? 3 : _ref$autoCleanupMaxBa, _ref$autoCleanupMinBa = _ref.autoCleanupMinBackwardDuration, autoCleanupMinBackwardDuration = _ref$autoCleanupMinBa === void 0 ? 1 : _ref$autoCleanupMinBa, _ref$restartStreamOnB = _ref.restartStreamOnBufferEmpty, restartStreamOnBufferEmpty = _ref$restartStreamOnB === void 0 ? false : _ref$restartStreamOnB, _ref$reconnectionInte = _ref.reconnectionInterval, reconnectionInterval = _ref$reconnectionInte === void 0 ? "2s" : _ref$reconnectionInte, _ref$restartStreamOnI = _ref.restartStreamOnIdle, restartStreamOnIdle = _ref$restartStreamOnI === void 0 ? true : _ref$restartStreamOnI, _ref$lazyLoadRecoverD = _ref.lazyLoadRecoverDuration, lazyLoadRecoverDuration = _ref$lazyLoadRecoverD === void 0 ? 2 : _ref$lazyLoadRecoverD, _ref$lazyLoadMaxDurat = _ref.lazyLoadMaxDuration, lazyLoadMaxDuration = _ref$lazyLoadMaxDurat === void 0 ? 1 : _ref$lazyLoadMaxDurat, _ref$stashInitialSize = _ref.stashInitialSize, stashInitialSize = _ref$stashInitialSize === void 0 ? 128 : _ref$stashInitialSize, _ref$enableLogging = _ref.enableLogging, enableLogging = _ref$enableLogging === void 0 ? false : _ref$enableLogging, _ref$loadingComponent = _ref.loadingComponent, loadingComponent = _ref$loadingComponent === void 0 ? null : _ref$loadingComponent, _ref$errorComponent = _ref.errorComponent, errorComponent = _ref$errorComponent === void 0 ? null : _ref$errorComponent, _ref$onWebRTSPIdle = _ref.onWebRTSPIdle, onWebRTSPIdle = _ref$onWebRTSPIdle === void 0 ? null : _ref$onWebRTSPIdle, _ref$onWebRTSPLog = _ref.onWebRTSPLog, onWebRTSPLog = _ref$onWebRTSPLog === void 0 ? null : _ref$onWebRTSPLog, _ref$height = _ref.height, height = _ref$height === void 0 ? "1080" : _ref$height, _ref$width = _ref.width, width = _ref$width === void 0 ? "1920" : _ref$width; var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), waitingForData = _useState2[0], setWaitingForData = _useState2[1]; var _useState3 = useState("connecting"), _useState4 = _slicedToArray(_useState3, 2), status = _useState4[0], setStatus = _useState4[1]; var _useState5 = useState(false), _useState6 = _slicedToArray(_useState5, 2), connected = _useState6[0], setConnected = _useState6[1]; var connectionAttempts = useRef(sessionStorage.getItem("WEBRTSPConnectionAttempts") !== null ? parseFloat(sessionStorage.getItem("WEBRTSPConnectionAttempts")) : 0); var mediaSourceRef = useRef(new MediaSource()); var clientID = useRef(HUDUniversalHUDUtilityManager.GenerateUUID()); var currentRTSPURL = useRef(rtspURL); var sourceBufferRef = useRef(null); var flvPlayerRef = useRef(null); var connecting = useRef(false); var videoRef = useRef(null); var queueRef = useRef([]); var wsRef = useRef(null); var webRTSPStreaming = useIdleDetection(function () { if (!connected) { return; } if (restartStreamOnIdle) { sessionStorage.setItem("WEBRTSPConnected", false); connecting.current = false; setConnected(false); retryConnection(); retryHardwareAcceleratedConnection(); } if (onWebRTSPIdle) { onWebRTSPIdle(clientID, status, connected, waitingForData, connectionAttempts); } }, webRTSPIdleTimeLimit); var updateRetryDisplay = useCallback(function (remainingTime) { var connectionT = "".concat(remainingTime.seconds, ":").concat(remainingTime.milliseconds); setStatus(connectionAttempts.current >= 30 ? "Retrying connection in ".concat(connectionT, " ~ ").concat(connectionAttempts.current, ": possibly offline") : "Retrying connection in ".concat(connectionT, " ~ ").concat(connectionAttempts.current)); }, []); var _Countdown = Countdown(reconnectionInterval, function () { return retryConnection(); }, updateRetryDisplay), remainingConnectionTime = _Countdown.remainingTime, connectionCompleted = _Countdown.completed, startConnectionCountdown = _Countdown.startCountdown, stopConnectionCountdown = _Countdown.stopCountdown, resetConnectionCountdown = _Countdown.resetCountdown; var _Countdown2 = Countdown(reconnectionInterval, function () { return retryHardwareAcceleratedConnection(); }, updateRetryDisplay), remainingTime = _Countdown2.remainingTime, completed = _Countdown2.completed, startCountdown = _Countdown2.startCountdown, stopCountdown = _Countdown2.stopCountdown, resetCountdown = _Countdown2.resetCountdown; var initializeWEBRTSPInstance = useCallback(function (video, inputRTSPURL) { if (flvjs.isSupported()) { var flvPlayerInstance = flvjs.createPlayer(_objectSpread({ type: "flv", url: gStreamerDirect ? "".concat(signalURL, "/direct-stream?gStreamerDirect=").concat(encodeURIComponent(gStreamerDirect), "&directAddress=").concat(directAddress, "&directPort=").concat(encodeURIComponent(directPort), "&useGStreamer=").concat(encodeURIComponent(useGStreamer), "&width=").concat(width, "&height=").concat(height, "&clientID=").concat(clientID.current) : "".concat(signalURL, "/direct-stream?rtspURL=").concat(encodeURIComponent(inputRTSPURL ? inputRTSPURL : rtspURL), "&useGStreamer=").concat(encodeURIComponent(useGStreamer), "&width=").concat(width, "&height=").concat(height, "&clientID=").concat(clientID.current), autoCleanupMaxBackwardDuration: autoCleanupMaxBackwardDuration, autoCleanupMinBackwardDuration: autoCleanupMinBackwardDuration, enableStashBuffer: false, lazyLoadRecoverDuration: lazyLoadRecoverDuration, lazyLoadMaxDuration: lazyLoadMaxDuration, stashInitialSize: stashInitialSize, isLive: true }, webRTSPStreamConfigurations)); flvPlayerInstance.attachMediaElement(video); flvPlayerInstance.load(); flvPlayerInstance.play()["catch"](function (error) { log("error", enableLogging, onWebRTSPLog, "WEBRTSP: Error attempting to play: ", error); setWaitingForData(false); setStatus("error"); connecting.current = false; }); flvPlayerInstance.on(flvjs.Events.ERROR, function (errorType, errorDetail) { log("error", enableLogging, onWebRTSPLog, "WEBRTSP: Error: ", errorType, errorDetail); setWaitingForData(false); setStatus("error"); if (connectionAttempts.current === 0) { setStatus("connecting"); } sessionStorage.setItem("WEBRTSPConnected", false); connecting.current = false; setConnected(false); retryConnection(); startCountdown(); }); flvPlayerInstance.on(flvjs.Events.BUFFER_FULL, function () { log("log", enableLogging, onWebRTSPLog, "WEBRTSP: Buffer full."); setWaitingForData(true); setStatus("idle"); }); flvPlayerInstance.on(flvjs.Events.BUFFER_EMPTY, function () { log("log", enableLogging, onWebRTSPLog, "WEBRTSP: Waiting for more data..."); setWaitingForData(true); setStatus("idle"); if (restartStreamOnBufferEmpty) { startCountdown(); } }); flvPlayerInstance.on(flvjs.Events.STATISTICS_INFO, function (stats) { if (stats.speed > 0 && connected === true) { log("log", enableLogging, onWebRTSPLog, "WEBRTSP: Streaming."); webRTSPStreaming(); return; } else if (stats.speed <= 0 && connected === true) { setStatus("Preparing"); } }); flvPlayerRef.current = flvPlayerInstance; setStatus("loading"); video.addEventListener("timeupdate", onVideoTimeUpdate); video.addEventListener("playing", onPlaying); video.addEventListener("play", onPlay); connecting.current = true; } }, [rtspURL, signalURL, useGStreamer, width, height, connecting]); var retryHardwareAcceleratedConnection = useCallback(function () { var video = videoRef.current; if (connecting.current === true) { return; } if (!signalURL || !video) { return; } if (flvPlayerRef.current) { try { if (video) { video.removeEventListener("timeupdate", onVideoTimeUpdate); video.removeEventListener("playing", onPlaying); video.removeEventListener("play", onPlay); } flvPlayerRef.current.destroy(); } catch (error) { log("log", enableLogging, onWebRTSPLog, "WEBRTSP: Skipped destroying player instance, instance not created."); } } initializeWEBRTSPInstance(video, currentRTSPURL.current); }, [initializeWEBRTSPInstance, rtspURL, currentRTSPURL]); var retryConnection = useCallback(function () { connectionAttempts.current += 1; log("log", enableLogging, onWebRTSPLog, "WEBRTSP Connection: Attempting reconnection. | (".concat(connectionAttempts.current, ")")); if (!hardwareAccelerated) { initializeWebSocket(); return; } }, []); var restablishConnection = function restablishConnection() { if (!hardwareAccelerated && wsRef.current) { wsRef.current.close(); } return; }; var refreshMediaSource = function refreshMediaSource() { mediaSourceRef.current = new MediaSource(); var handleSourceOpen = function handleSourceOpen() { if (!mediaSourceRef.current || mediaSourceRef.current.readyState !== 'open') return; sourceBufferRef.current = mediaSourceRef.current.addSourceBuffer('video/webm; codecs="vp8"'); sourceBufferRef.current.addEventListener('updateend', function () { try { if (queueRef.current.length > 0 && !sourceBufferRef.current.updating) { sourceBufferRef.current.appendBuffer(queueRef.current.shift()); } } catch (error) { console.error("WEBRTSP ERROR: ", error); } }); sourceBufferRef.current.addEventListener('error', function (e) { log("error", enableLogging, onWebRTSPLog, "WEBRTSP: Source buffer error: ", e); setStatus("error"); }); mediaSourceRef.current.addEventListener('error', function (e) { log("error", enableLogging, onWebRTSPLog, "WEBRTSP: Media source error: ", e); setStatus("error"); }); }; var handleMediaSourceClosure = function handleMediaSourceClosure(e) { log("log", enableLogging, onWebRTSPLog, "WEBRTSP: Media source closed.", e); refreshMediaSource(); return; }; var handleMediaSourceEnded = function handleMediaSourceEnded(e) { log("log", enableLogging, onWebRTSPLog, "WEBRTSP: Media source ended.", e); refreshMediaSource(); return; }; var video = videoRef.current; var mediaSource = mediaSourceRef.current; video.src = URL.createObjectURL(mediaSource); mediaSource.addEventListener('sourceclose', handleMediaSourceClosure); mediaSource.addEventListener('sourceended', handleMediaSourceEnded); mediaSource.addEventListener('sourceopen', handleSourceOpen); video.addEventListener('error', function (e) { log("error", enableLogging, onWebRTSPLog, "Video playback error: ", e); setStatus("error"); }); return function () { if (mediaSource) { mediaSource.removeEventListener('sourceended', handleMediaSourceClosure); mediaSource.removeEventListener('sourceended', handleMediaSourceEnded); mediaSource.removeEventListener('sourceopen', handleSourceOpen); } restablishConnection(); }; }; var initializeWebSocket = useCallback(function () { if (connecting.current) { return; } connecting.current = true; var ws = new WebSocket("".concat(signalURL, "?rtspURL=").concat(encodeURIComponent(rtspURL), "&width=").concat(width, "&height=").concat(height)); wsRef.current = ws; ws.onopen = function () { log("log", enableLogging, onWebRTSPLog, "WEBRTSP Connection: Connected!"); setStatus("loading"); sessionStorage.setItem("WEBRTSPConnectionAttempts", 0); sessionStorage.setItem("WEBRTSPConnected", true); connectionAttempts.current = 0; connecting.current = false; stopConnectionCountdown(); setConnected(true); }; ws.onmessage = function (event) { if (sourceBufferRef.current && !sourceBufferRef.current.updating && mediaSourceRef.current.readyState === "open" && event.data) { try { event.data.arrayBuffer().then(function (buffer) { try { if (!sourceBufferRef.current.updating) { sourceBufferRef.current.appendBuffer(buffer); } else { queueRef.current.push(buffer); } } catch (error) { log("error", enableLogging, onWebRTSPLog, "WEBRTSP ERROR: ", error); } if (status !== "streaming") { setWaitingForData(false); setStatus("streaming"); } }); } catch (error) { log("error", enableLogging, onWebRTSPLog, "WEBRTSP ERROR: ", error); } } }; ws.onclose = function () { log("log", enableLogging, onWebRTSPLog, "WEBRTSP Connection: Disconnected."); if (connectionAttempts.current === 0) { setStatus("connecting"); } sessionStorage.setItem("WEBRTSPConnected", false); connecting.current = false; setConnected(false); startConnectionCountdown(); }; ws.onerror = function (error) { if (connectionAttempts.current > 0) { return; } log("error", enableLogging, onWebRTSPLog, "WEBRTSP Connection: Connection error: ", error); setStatus("error"); }; }, [signalURL, rtspURL, width, height, status]); var onVideoTimeUpdate = useCallback(function (seekEvent) { var video = videoRef.current; if (video && video.currentTime === 0) { setStatus("Preparing"); } }, [videoRef]); var onPlaying = useCallback(function () { log("log", enableLogging, onWebRTSPLog, "WEBRTSP: Streaming."); sessionStorage.setItem("WEBRTSPConnectionAttempts", 0); sessionStorage.setItem("WEBRTSPConnected", true); connectionAttempts.current = 0; setStatus("streaming"); webRTSPStreaming(); stopCountdown(); setConnected(true); }, [setConnected, connectionAttempts]); var onPlay = useCallback(function () { log("log", enableLogging, onWebRTSPLog, "WEBRTSP: Starting."); setStatus("connecting"); }, [setStatus]); useEffect(function () { if (hardwareAccelerated) { return; } initializeWebSocket(); var handleSourceOpen = function handleSourceOpen() { if (!mediaSourceRef.current || mediaSourceRef.current.readyState !== 'open') return; try { sourceBufferRef.current = mediaSourceRef.current.addSourceBuffer('video/webm; codecs="vp8"'); } catch (error) { log("error", enableLogging, onWebRTSPLog, "WEBRTSP: Did not add source buffer.", error); refreshMediaSource(); return; } sourceBufferRef.current.addEventListener('updateend', function () { try { if (queueRef.current.length > 0 && !sourceBufferRef.current.updating) { sourceBufferRef.current.appendBuffer(queueRef.current.shift()); } } catch (error) { log("error", enableLogging, onWebRTSPLog, "WEBRTSP ERROR: ", error); } }); sourceBufferRef.current.addEventListener('error', function (e) { log("error", enableLogging, onWebRTSPLog, "WEBRTSP: Source buffer error: ", e); setStatus("error"); }); mediaSourceRef.current.addEventListener('error', function (e) { log("error", enableLogging, onWebRTSPLog, "WEBRTSP: Media source error: ", e); setStatus("error"); }); }; var video = videoRef.current; var mediaSource = mediaSourceRef.current; video.src = URL.createObjectURL(mediaSource); mediaSource.addEventListener('sourceopen', handleSourceOpen); video.addEventListener('stalled', function () { log("log", enableLogging, onWebRTSPLog, "WEBRTSP: Stalled."); setWaitingForData(true); }); video.addEventListener('waiting', function () { log("log", enableLogging, onWebRTSPLog, "WEBRTSP: Waiting for more data."); setWaitingForData(true); }); video.addEventListener('error', function (e) { log("error", enableLogging, onWebRTSPLog, "Video playback error:", e); setWaitingForData(false); setStatus("error"); }); return function () { if (mediaSource) { mediaSource.removeEventListener('sourceopen', handleSourceOpen); } restablishConnection(); }; }, []); useEffect(function () { var video = videoRef.current; if (!hardwareAccelerated || !signalURL || !video) { return; } initializeWEBRTSPInstance(video); return function () { if (flvPlayerRef.current) { try { flvPlayerRef.current.destroy(); } catch (error) { log("log", enableLogging, onWebRTSPLog, "WEBRTSP: Skipped destroying player instance, instance not created."); } } if (video) { video.removeEventListener("timeupdate", onVideoTimeUpdate); video.removeEventListener("playing", onPlaying); video.removeEventListener("play", onPlay); } }; }, [signalURL, rtspURL, hardwareAccelerated]); useEffect(function () { currentRTSPURL.current = rtspURL; }, [rtspURL]); return /*#__PURE__*/React.createElement("div", { style: _objectSpread(_objectSpread({}, styles.container), containerConfigurationSettings) }, /*#__PURE__*/React.createElement("style", null, keyframes), /*#__PURE__*/React.createElement("div", { style: _objectSpread(_objectSpread({}, styles.videoContainer), videoContainerConfigurationSettings) }, status !== "streaming" && status !== "error" && status !== "Idle" && /*#__PURE__*/React.createElement("div", { style: _objectSpread(_objectSpread({}, styles.overlay), overlayConfigurationSettings) }, /*#__PURE__*/React.createElement("div", { style: _objectSpread(_objectSpread({}, styles.actionContainer), actionContainerConfigurationSettings) }, loadingComponent ? loadingComponent : /*#__PURE__*/React.createElement("div", { style: _objectSpread(_objectSpread({}, styles.loadingSpinner), loadingSpinnerConfigurationSettings) }), /*#__PURE__*/React.createElement("div", { style: _objectSpread(_objectSpread({}, styles.message), messageConfigurationSettings) }, "".concat(status, "...")))), waitingForData && status === "streaming" && /*#__PURE__*/React.createElement("div", { style: _objectSpread(_objectSpread({}, styles.overlay), {}, { backgroundColor: "rgba(0, 0, 0, 0.169)" }, overlayConfigurationSettings) }, /*#__PURE__*/React.createElement("div", { style: _objectSpread(_objectSpread({}, styles.actionContainer), actionContainerConfigurationSettings) }, loadingComponent ? loadingComponent : /*#__PURE__*/React.createElement("div", { style: _objectSpread(_objectSpread({}, styles.loadingSpinner), loadingSpinnerConfigurationSettings) }), /*#__PURE__*/React.createElement("div", { style: _objectSpread(_objectSpread({}, styles.message), messageConfigurationSettings) }, "Idle..."))), /*#__PURE__*/React.createElement("video", { ref: videoRef, style: _objectSpread(_objectSpread(_objectSpread({}, styles.video), videoConfigurationSettings), {}, { visibility: status === "streaming" ? "visible" : "hidden" }), autoPlay: true, muted: true, onError: ( /*#__PURE__*/function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(e) { return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: console.error("Video error:", e); setStatus("error"); _context.next = 4; return Delay(1000); case 4: restablishConnection(); case 5: case "end": return _context.stop(); } }, _callee); })); return function (_x) { return _ref2.apply(this, arguments); }; }()) }), status === "error" && /*#__PURE__*/React.createElement("div", { style: _objectSpread(_objectSpread({}, styles.overlay), overlayConfigurationSettings) }, /*#__PURE__*/React.createElement("div", { style: _objectSpread(_objectSpread({}, styles.actionContainer), actionContainerConfigurationSettings) }, errorComponent && errorComponent, /*#__PURE__*/React.createElement("div", { style: _objectSpread(_objectSpread({}, styles.message), messageConfigurationSettings) }, "Error occurred during playback."))))); } ; VideoStream.propTypes = { actionContainerConfigurationSettings: PropTypes.object, videoContainerConfigurationSettings: PropTypes.object, loadingSpinnerConfigurationSettings: PropTypes.object, containerConfigurationSettings: PropTypes.object, messageConfigurationSettings: PropTypes.object, overlayConfigurationSettings: PropTypes.object, videoConfigurationSettings: PropTypes.object, hardwareAccelerated: PropTypes.bool, useGStreamer: PropTypes.bool, signalURL: PropTypes.string, rtspURL: PropTypes.string, height: PropTypes.string, width: PropTypes.string }; export default VideoStream;