var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/VideoPlayer/components/FlvPlayer/index.tsx var FlvPlayer_exports = {}; __export(FlvPlayer_exports, { FLV_EVENT: () => FLV_EVENT, default: () => VideoPlayer }); module.exports = __toCommonJS(FlvPlayer_exports); var import_react = __toESM(require("react")); var import_flv = __toESM(require("flv.js")); var import_func = require("@zhst/func"); var FLV_EVENT = import_flv.default.Events; var VideoPlayer = class extends import_react.Component { constructor() { super(...arguments); this.state = { curPlayUrl: "", shouldReinit: false }; this.flvPlayer = null; this.videoElement = null; this.initFlv = ($video) => { this.videoElement = $video; const { className, autoPlay = true, config = {}, onCreat, playId, ...others } = this.props; if ($video) { if (import_flv.default.isSupported() && this.props.url && this.props.url) { const reload = () => { if (this.flvPlayer && this.flvPlayer.destroy) { try { this.flvPlayer.destroy(); } catch (error) { console.error(error); } } let flvPlayer = import_flv.default.createPlayer({ ...others }, { deferLoadAfterSourceOpen: false, ...config }); flvPlayer.attachMediaElement($video); flvPlayer.load(); this.flvPlayer = flvPlayer; let controller = this.flvPlayer._transmuxer._controller; let wsLoader = controller._ioctl._loader; const oldWsOnCompleteFunc = wsLoader._onComplete; wsLoader._onComplete = function() { if (!controller._remuxer) { controller._remuxer = { destroy: () => { console.log("组件销毁"); }, flushStashedSamples: () => { console.log("flushStashedSamples"); } }; } oldWsOnCompleteFunc(); }; this.flvPlayer.reload = reload; onCreat && onCreat(this.flvPlayer, $video); }; reload(); onCreat && onCreat(this.flvPlayer, $video); } } }; } componentWillUnmount() { var _a, _b; if (this.flvPlayer) { (_a = this.flvPlayer) == null ? void 0 : _a.unload(); (_b = this.flvPlayer) == null ? void 0 : _b.detachMediaElement(); } } componentDidUpdate() { if (this.state.shouldReinit) { this.setState({ shouldReinit: false }); this.initFlv(this.videoElement); } } render() { const { className, style } = this.props; return /* @__PURE__ */ import_react.default.createElement( "video", { muted: true, preload: "metadata", className, style: Object.assign( { width: "100%", height: "100%" }, style ? style : {} ), ref: this.initFlv } ); } }; VideoPlayer.getDerivedStateFromProps = (nextProps, prevState) => { const { playId = 0 } = nextProps; const { playId: prePlayId = 0 } = prevState; if (nextProps.url !== void 0) { if (!(0, import_func.isEqual)(nextProps.url, prevState.curPlayUrl) || !(0, import_func.isEqual)(playId, prePlayId)) { return { playId, curPlayUrl: nextProps.url, shouldReinit: true }; } } return null; }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { FLV_EVENT });