import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck"; import _createClass from "@babel/runtime/helpers/esm/createClass"; import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized"; import _inherits from "@babel/runtime/helpers/esm/inherits"; import _createSuper from "@babel/runtime/helpers/esm/createSuper"; import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; var _excluded = ["className", "autoPlay", "config", "onCreate", "playId"]; import React, { Component } from 'react'; import flvjs from 'flv.js'; import { isEqual } from '@zhst/func'; export var FLV_EVENT = flvjs.Events; var VideoPlayer = /*#__PURE__*/function (_Component) { _inherits(VideoPlayer, _Component); var _super = _createSuper(VideoPlayer); function VideoPlayer() { var _this; _classCallCheck(this, VideoPlayer); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty(_assertThisInitialized(_this), "state", { curPlayUrl: '', shouldReinit: false }); _defineProperty(_assertThisInitialized(_this), "flvPlayer", null); _defineProperty(_assertThisInitialized(_this), "videoElement", null); _defineProperty(_assertThisInitialized(_this), "initFlv", function ($video) { _this.videoElement = $video; var _this$props = _this.props, className = _this$props.className, _this$props$autoPlay = _this$props.autoPlay, autoPlay = _this$props$autoPlay === void 0 ? true : _this$props$autoPlay, _this$props$config = _this$props.config, config = _this$props$config === void 0 ? {} : _this$props$config, onCreate = _this$props.onCreate, playId = _this$props.playId, others = _objectWithoutProperties(_this$props, _excluded); if ($video) { if (flvjs.isSupported() && _this.props.url && _this.props.url) { var reload = function reload() { var _this$flvPlayer; if (_this.flvPlayer && _this.flvPlayer.destroy) { try { _this.flvPlayer.destroy(); } catch (error) { console.error(error); } } var flvPlayer = flvjs.createPlayer(_objectSpread({}, others), _objectSpread({ deferLoadAfterSourceOpen: false }, config)); flvPlayer.attachMediaElement($video); flvPlayer.load(); _this.flvPlayer = flvPlayer; // @ts-ignore var controller = (_this$flvPlayer = _this.flvPlayer) === null || _this$flvPlayer === void 0 || (_this$flvPlayer = _this$flvPlayer._transmuxer) === null || _this$flvPlayer === void 0 ? void 0 : _this$flvPlayer._controller; var wsLoader = controller._ioctl._loader; var oldWsOnCompleteFunc = wsLoader._onComplete; wsLoader._onComplete = function () { if (!controller._remuxer) { controller._remuxer = { destroy: function destroy() { console.log('组件销毁'); }, flushStashedSamples: function flushStashedSamples() { console.log("flushStashedSamples"); } }; } oldWsOnCompleteFunc(); }; _this.flvPlayer.reload = reload; onCreate === null || onCreate === void 0 || onCreate(_this.flvPlayer, $video); }; reload(); } } }); return _this; } _createClass(VideoPlayer, [{ key: "componentWillUnmount", value: function componentWillUnmount() { if (this.flvPlayer) { var _this$flvPlayer2, _this$flvPlayer3; (_this$flvPlayer2 = this.flvPlayer) === null || _this$flvPlayer2 === void 0 || _this$flvPlayer2.unload(); (_this$flvPlayer3 = this.flvPlayer) === null || _this$flvPlayer3 === void 0 || _this$flvPlayer3.detachMediaElement(); } } }, { key: "componentDidUpdate", value: function componentDidUpdate() { if (this.state.shouldReinit) { this.setState({ shouldReinit: false }); this.initFlv(this.videoElement); } } }, { key: "render", value: function render() { var _this$props2 = this.props, className = _this$props2.className, style = _this$props2.style; return /*#__PURE__*/React.createElement("video", { muted: true, preload: "metadata", className: className, style: _objectSpread({ width: '100%', height: '100%' }, style), ref: this.initFlv }); } }]); return VideoPlayer; }(Component); _defineProperty(VideoPlayer, "getDerivedStateFromProps", function (nextProps, prevState) { var _nextProps$playId = nextProps.playId, playId = _nextProps$playId === void 0 ? 0 : _nextProps$playId; var _prevState$playId = prevState.playId, prePlayId = _prevState$playId === void 0 ? 0 : _prevState$playId; if (nextProps.url !== undefined) { if (!isEqual(nextProps.url, prevState.curPlayUrl) || !isEqual(playId, prePlayId)) { return { playId: playId, curPlayUrl: nextProps.url, shouldReinit: true }; } } // 否则,对于state不进行任何操作 return null; }); export { VideoPlayer as default };