nicecode-v2/packages/meta/es/VideoPlayer/components/FlvPlayer/index.js

140 lines
5.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 };