nicecode-v2/packages/meta/es/VideoPlayer/VideoPlayer.js

689 lines
28 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 _extends from "@babel/runtime/helpers/esm/extends";
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
import { noop, get, addEventListenerWrapper, dataURLToBlob, nextTick, toRealNumber, getTransforms, formatDurationTime } from '@zhst/func';
import Align from 'rc-align';
import { useLatest, useUpdateEffect, useFullscreen, useUnmount } from '@zhst/hooks';
import classNames from 'classnames';
import { message } from '..';
import { IconFont } from '@zhst/icon';
import { Cropper, EVENT_CROP_START, EVENT_CROP_END, Viewer } from "../ImageEditor";
import FlvPlayer, { FLV_EVENT } from "./components/FlvPlayer";
import Range from "./components/Progress";
import Loading from "./components/Loading";
import { CROP_TYPE } from "../utils/constants";
import { downloadFrame, getShowStatus } from "./videoPlayerHelper";
import "./index.less";
var componentName = "zhst-image__video-view";
var VideoPlayer = /*#__PURE__*/forwardRef(function (props, ref) {
var url = props.url,
_props$maxDuration = props.maxDuration,
maxDuration = _props$maxDuration === void 0 ? 20 : _props$maxDuration,
_props$screenshotButt = props.screenshotButtonAlign,
screenshotButtonAlign = _props$screenshotButt === void 0 ? {
points: ['bl', 'br'],
offset: [6, 0],
overflow: {
adjustX: true,
adjustY: true
}
} : _props$screenshotButt,
_props$autoPlay = props.autoPlay,
autoPlay = _props$autoPlay === void 0 ? false : _props$autoPlay,
odList = props.odList,
showOD = props.showOD,
_props$width = props.width,
width = _props$width === void 0 ? '100%' : _props$width,
_props$height = props.height,
height = _props$height === void 0 ? '532px' : _props$height,
_props$backgroundColo = props.backgroundColor,
backgroundColor = _props$backgroundColo === void 0 ? '#333' : _props$backgroundColo,
_props$screenshotButt2 = props.screenshotButtonRender,
screenshotButtonRender = _props$screenshotButt2 === void 0 ? function () {
return /*#__PURE__*/React.createElement("div", {
style: {
color: '#fff',
width: '80px',
top: 0
}
}, "\u56DE\u8C03DOM");
} : _props$screenshotButt2,
onCropChange = props.onCropChange,
defaultNormalizationRect = props.defautlNormalizationRect,
playerProps = props.playerProps;
// ========================== 播放 =========================
//实例参数
var containerRef = useRef(null); //容器ref
var videoRef = useRef(null); //video 标签dom
var videoInsRef = useRef(null); //flv 实例
var _useState = useState(0),
_useState2 = _slicedToArray(_useState, 2),
playSeq = _useState2[0],
setPlaySeq = _useState2[1]; // 通过重置playid使FLV组件重新渲染
var videoRemoveListener = useRef(noop); //移除dom监听的中间函数
var loadingTimeRef = useRef(0); //最后一次加载时间
var delayLoadingTimer = useRef(null); //算loading的定时器
//状态参数
var _useState3 = useState(false),
_useState4 = _slicedToArray(_useState3, 2),
isReady = _useState4[0],
setIsReady = _useState4[1]; //
var _useState5 = useState(false),
_useState6 = _slicedToArray(_useState5, 2),
isPlay = _useState6[0],
setIsPlay = _useState6[1]; //当前是否播放
var _useState7 = useState(false),
_useState8 = _slicedToArray(_useState7, 2),
isEnd = _useState8[0],
setIsEnd = _useState8[1]; //是否播放结束
var _useState9 = useState(false),
_useState10 = _slicedToArray(_useState9, 2),
isError = _useState10[0],
setIsError = _useState10[1]; //播放出错
var _useState11 = useState(false),
_useState12 = _slicedToArray(_useState11, 2),
isVideoLoadFinished = _useState12[0],
setIsVideoLoadFinish = _useState12[1]; //是否缓存加载完成
var _useState13 = useState(0),
_useState14 = _slicedToArray(_useState13, 2),
playTime = _useState14[0],
setPlayTime = _useState14[1]; //当前播放时间
var _useState15 = useState(true),
_useState16 = _slicedToArray(_useState15, 2),
isLoadingVideo = _useState16[0],
setIsLoadingVideo = _useState16[1]; //是否加载中
var _useState17 = useState(false),
_useState18 = _slicedToArray(_useState17, 2),
isDelayLoading = _useState18[0],
setIsDelayLoading = _useState18[1]; //显示的转圈loading 延迟0.2s显示
//设置延迟转圈圈
var latestIsLoadingVideo = useLatest(isLoadingVideo);
var setIsLoadingVideoWrapper = function setIsLoadingVideoWrapper(isLoading) {
setIsLoadingVideo(function (preLoading) {
if (!preLoading && isLoading) {
loadingTimeRef.current = new Date().getTime();
}
if (!isLoading) {
loadingTimeRef.current = null;
}
//延迟0。2s相关
if (!isLoading) {
setIsDelayLoading(false);
}
if (!delayLoadingTimer.current && preLoading) {
delayLoadingTimer.current = setTimeout(function () {
if (latestIsLoadingVideo.current) {
//0.2s后才显示
setIsDelayLoading(true);
}
delayLoadingTimer.current = null;
}, 200);
}
return isLoading;
});
};
// 初始化loading 30s 直接显示错误
// TODO :逻辑忘记了 不应该是每次init player吗
useEffect(function () {
var timer = setInterval(function () {
if (loadingTimeRef.current) {
if (new Date().getTime() - loadingTimeRef.current > 1000 * 30) {
checkIsErr();
}
}
}, 1000);
return function () {
clearInterval(timer);
};
}, []);
//结束的时候暂停 保证不播了
useUpdateEffect(function () {
if (isEnd) {
var _videoInsRef$current, _videoInsRef$current$;
videoInsRef === null || videoInsRef === void 0 || (_videoInsRef$current = videoInsRef.current) === null || _videoInsRef$current === void 0 || (_videoInsRef$current$ = _videoInsRef$current.pause) === null || _videoInsRef$current$ === void 0 || _videoInsRef$current$.call(_videoInsRef$current);
}
}, [isEnd]);
// 捕捉视频播放报错
var checkIsErr = function checkIsErr() {
setIsError(true);
try {
var _videoInsRef$current2, _videoInsRef$current3;
videoInsRef === null || videoInsRef === void 0 || (_videoInsRef$current2 = videoInsRef.current) === null || _videoInsRef$current2 === void 0 || (_videoInsRef$current3 = _videoInsRef$current2.destroy) === null || _videoInsRef$current3 === void 0 || _videoInsRef$current3.call(_videoInsRef$current2);
} catch (error) {
console.error(error);
}
};
// 初始化
var latestMaxDuration = useLatest(maxDuration);
var initPlayer = useCallback(function (ins, dom) {
videoRef.current = dom;
videoInsRef.current = ins;
var maxDuration = latestMaxDuration.current || 0;
//监听播放事件
var video = dom;
var errorLister = function errorLister(e) {
checkIsErr();
console.error('视频出错了', e, video.currentTime);
};
var waitingListener = function waitingListener() {
setIsLoadingVideoWrapper(true);
// console.debug('视频加载等待', e, video.currentTime);
};
var playingListener = function playingListener() {
setIsLoadingVideoWrapper(false);
setIsError(false);
// console.debug('视频从等待中播放', e, video.currentTime);
};
var playLister = function playLister() {
setIsPlay(true);
setIsError(false);
// console.debug('提示该视频正在播放中', e, video.currentTime);
};
var pauseListener = function pauseListener() {
setIsPlay(false);
// console.debug('暂停播放', e, video.currentTime);
};
var endedListner = function endedListner() {
setIsEnd(true);
setIsVideoLoadFinish(true);
// console.debug('视频播放完了', e, video.currentTime);
};
var timeupdateListner = function timeupdateListner() {
var nowTime = video.currentTime;
if (nowTime >= maxDuration) {
setIsEnd(true);
setIsVideoLoadFinish(true);
}
setPlayTime(nowTime);
};
// see https://github.com/bilibili/flv.js/issues/337
var windowErrorHandle = function windowErrorHandle(errorEvent) {
try {
if (errorEvent['message'] == "Uncaught TypeError: Cannot read property 'flushStashedSamples' of null") {
checkIsErr();
console.error('视频出错了 window监听', errorEvent);
}
} catch (error) {
console.error(error);
}
};
video.addEventListener('error', errorLister);
video.addEventListener('waiting', waitingListener);
video.addEventListener('playing', playingListener);
video.addEventListener('play', playLister);
video.addEventListener('pause', pauseListener);
video.addEventListener('ended', endedListner);
video.addEventListener('timeupdate', timeupdateListner);
window.addEventListener('error', windowErrorHandle);
videoRemoveListener.current = function () {
video.removeEventListener('error', errorLister);
video.removeEventListener('waiting', waitingListener);
video.removeEventListener('playing', playingListener);
video.removeEventListener('play', playLister);
video.removeEventListener('pause', pauseListener);
video.removeEventListener('ended', endedListner);
video.removeEventListener('timeupdate', timeupdateListner);
window.removeEventListener('error', windowErrorHandle);
};
videoInsRef === null || videoInsRef === void 0 || videoInsRef.current.on(FLV_EVENT.ERROR, function (type, errDetail, info) {
checkIsErr();
console.error('videoInsRef 错误', type, errDetail, info, video.currentTime);
});
var playPromise = videoInsRef === null || videoInsRef === void 0 ? void 0 : videoInsRef.current.play();
//先ready 遮挡会导致播放失败
setIsReady(true);
playPromise.then(function () {
setIsReady(true);
}).catch(function () {
try {} catch (error) {}
// setIsError(true);
for (var _len = arguments.length, arg = new Array(_len), _key = 0; _key < _len; _key++) {
arg[_key] = arguments[_key];
}
console.error('playPromise视频出错了', arg);
});
}, []);
useUnmount(function () {
try {
videoRemoveListener.current();
} catch (e) {
console.error(e);
}
});
// 重新加载
var _reload = /*#__PURE__*/function () {
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
var oldTime;
return _regeneratorRuntime().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
if (!videoInsRef.current) {
_context.next = 15;
break;
}
oldTime = videoInsRef.current.currentTime;
videoInsRef.current.currentTime = 0;
//如果修改时间不成功,则走重新加载的逻辑
if (!(oldTime === videoInsRef.current.currentTime)) {
_context.next = 14;
break;
}
//重置状态
setIsReady(false);
setIsPlay(false);
setIsLoadingVideoWrapper(false);
setIsReady(false);
setIsEnd(false);
setIsVideoLoadFinish(false);
setPlayTime(0);
//清楚dom事件监听
try {
videoRemoveListener.current();
} catch (error) {
console.error(error);
}
setPlaySeq(function (pre) {
return pre + 1;
});
return _context.abrupt("return");
case 14:
videoInsRef.current.play();
case 15:
setPlayTime(0);
setIsEnd(false);
case 17:
case "end":
return _context.stop();
}
}, _callee);
}));
return function reload() {
return _ref.apply(this, arguments);
};
}();
// 进度条操作
var seek = function seek(v) {
if (videoInsRef.current && isVideoLoadFinished) {
setPlayTime(parseFloat(v));
videoInsRef.current.currentTime = parseFloat(v);
} else {
message.warning('待视频加载完,才可操作进度条');
}
};
// ========================== 视频opt bar =========================
var _useFullscreen = useFullscreen(containerRef, {
pageFullscreen: true
}),
_useFullscreen2 = _slicedToArray(_useFullscreen, 2),
isFullscreen = _useFullscreen2[0],
toggleFullscreen = _useFullscreen2[1].toggleFullscreen;
var showMaxDuration = !!maxDuration ? maxDuration : toRealNumber(get(videoRef, 'current.duration', 0));
var showSlider = videoInsRef.current && isVideoLoadFinished;
var showStatus = getShowStatus(isDelayLoading, isEnd, isError);
// ========================== 截图 =========================
var corpContainerRef = useRef();
var cropInsRef = useRef(null);
var _useState19 = useState(false),
_useState20 = _slicedToArray(_useState19, 2),
showCrop = _useState20[0],
_setShowCrop = _useState20[1];
//回显默认框选
var isFirstFlagRef = useRef(true);
useEffect(function () {
var isFirst = isFirstFlagRef.current;
if (!isLoadingVideo && isReady && isFirst && defaultNormalizationRect && !showStatus) {
nextTick(function () {
_setShowCrop(true);
});
}
}, [isLoadingVideo, showStatus]);
//定位按钮相关参数
var alginContainerRef = useRef(null);
var alignRef = useRef(null);
var _useState21 = useState(null),
_useState22 = _slicedToArray(_useState21, 2),
cropRect = _useState22[0],
setCropRect = _useState22[1];
// 监听showCrop, isReady - 是否可编辑、视频播放组件是否挂载
useEffect(function () {
var handlerCropStart;
var handlerCropEnd;
setCropRect(null);
if (!isReady) return;
if (showCrop) {
var _canvas$parentNode, _videoInsRef$current4;
handlerCropStart = addEventListenerWrapper(corpContainerRef.current, EVENT_CROP_START, function () {
setCropRect(null);
});
handlerCropEnd = addEventListenerWrapper(corpContainerRef.current, EVENT_CROP_END, function (event) {
var _alignRef$current, _alignRef$current$for;
var data = event.detail;
setCropRect({
x: data.left,
y: data.top,
w: data.width,
h: data.height
});
alignRef === null || alignRef === void 0 || (_alignRef$current = alignRef.current) === null || _alignRef$current === void 0 || (_alignRef$current$for = _alignRef$current.forceAlign) === null || _alignRef$current$for === void 0 || _alignRef$current$for.call(_alignRef$current);
});
var video = videoRef.current;
//计算 limitcroppbox
var scale = Math.min(video.offsetWidth / video.videoWidth, video.offsetHeight / video.videoHeight);
var finalVideoWidth = video.videoWidth * scale;
var finalVideoHeight = video.videoHeight * scale;
var cropBoxLimited = {
width: finalVideoWidth,
height: finalVideoHeight,
top: (video.offsetHeight - finalVideoHeight) / 2,
left: (video.offsetWidth - finalVideoWidth) / 2
};
//获取视频图片
var canvas = document.createElement('canvas');
canvas.width = video.offsetWidth;
canvas.height = video.offsetHeight;
canvas.style.display = 'none';
document.body.appendChild(canvas);
var ctx = canvas.getContext('2d');
ctx === null || ctx === void 0 || ctx.drawImage(video, (video.offsetWidth - finalVideoWidth) / 2, (video.offsetHeight - finalVideoHeight) / 2, finalVideoWidth, finalVideoHeight);
var imageData = canvas.toDataURL('image/png');
(_canvas$parentNode = canvas.parentNode) === null || _canvas$parentNode === void 0 || _canvas$parentNode.removeChild(canvas);
//回显编辑框
var isFirst = isFirstFlagRef.current;
var initialCropBoxData = null;
if (isFirst && defaultNormalizationRect) {
initialCropBoxData = {
left: defaultNormalizationRect.x * finalVideoWidth + cropBoxLimited.left,
top: defaultNormalizationRect.y * finalVideoHeight + cropBoxLimited.top,
width: defaultNormalizationRect.w * finalVideoWidth,
height: defaultNormalizationRect.h * finalVideoHeight
};
}
isFirstFlagRef.current = false;
// 初始化圈选工具
cropInsRef.current = new Cropper(corpContainerRef.current, {
showMask: true,
cropBoxLimited: cropBoxLimited,
editAble: false,
img: imageData,
initialCropBoxData: initialCropBoxData
});
videoInsRef === null || videoInsRef === void 0 || (_videoInsRef$current4 = videoInsRef.current) === null || _videoInsRef$current4 === void 0 || _videoInsRef$current4.pause();
} else {
var _videoInsRef$current5;
var _element = videoInsRef.current._mediaElement || {};
videoInsRef === null || videoInsRef === void 0 || (_videoInsRef$current5 = videoInsRef.current) === null || _videoInsRef$current5 === void 0 || _videoInsRef$current5.play();
// 挂载图片选择
cropInsRef.current = new Viewer(corpContainerRef.current, {
scaleAble: false,
selectAble: false,
dragAble: false,
width: _element.clientWidth,
height: _element.clientHeight,
backgroundColor: 'transparent'
});
// 判定是否存在od框
showOD && (odList === null || odList === void 0 ? void 0 : odList.forEach(function (_od) {
var _cropInsRef$current;
cropInsRef === null || cropInsRef === void 0 || (_cropInsRef$current = cropInsRef.current) === null || _cropInsRef$current === void 0 || _cropInsRef$current.addShape(_od);
}));
}
return function () {
var _handlerCropStart, _handlerCropEnd, _cropInsRef$current2, _cropInsRef$current2$;
(_handlerCropStart = handlerCropStart) === null || _handlerCropStart === void 0 || _handlerCropStart.remove();
(_handlerCropEnd = handlerCropEnd) === null || _handlerCropEnd === void 0 || _handlerCropEnd.remove();
cropInsRef === null || cropInsRef === void 0 || (_cropInsRef$current2 = cropInsRef.current) === null || _cropInsRef$current2 === void 0 || (_cropInsRef$current2$ = _cropInsRef$current2.destroy) === null || _cropInsRef$current2$ === void 0 || _cropInsRef$current2$.call(_cropInsRef$current2);
cropInsRef.current = null;
};
}, [showCrop, isReady]);
var latestCropRect = useLatest(cropRect);
var getCropInfo = /*#__PURE__*/function () {
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
var _canvas$parentNode2;
var cropRect, video, rectList, extendRectList, selectIndex, scale, finalVideoWidth, finalVideoHeight, canvas, ctx, base64, blobData, file, newRect;
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
cropRect = latestCropRect.current;
video = videoRef.current;
if (video) {
_context3.next = 4;
break;
}
return _context3.abrupt("return");
case 4:
rectList = [];
extendRectList = [];
selectIndex = 0; //获取视频图片的url
scale = Math.min(video.offsetWidth / video.videoWidth, video.offsetHeight / video.videoHeight);
finalVideoWidth = video.videoWidth * scale;
finalVideoHeight = video.videoHeight * scale;
canvas = document.createElement('canvas');
canvas.width = finalVideoWidth;
canvas.height = finalVideoHeight;
canvas.style.display = 'none';
document.body.appendChild(canvas);
ctx = canvas.getContext('2d');
ctx.drawImage(video, 0, 0, finalVideoWidth, finalVideoHeight);
base64 = canvas.toDataURL('image/jpeg');
blobData = dataURLToBlob(base64);
(_canvas$parentNode2 = canvas.parentNode) === null || _canvas$parentNode2 === void 0 || _canvas$parentNode2.removeChild(canvas);
file = new window.File([blobData], "".concat(new Date().getTime()));
newRect = {
w: cropRect.w / finalVideoWidth,
h: cropRect.h / finalVideoHeight,
x: (cropRect.x - (video.offsetWidth - finalVideoWidth) / 2) / finalVideoWidth,
y: (cropRect.y - (video.offsetHeight - finalVideoHeight) / 2) / finalVideoHeight
};
rectList.push(newRect);
extendRectList.push(newRect);
//扩展框获取imgkey
extendRectList.forEach( /*#__PURE__*/function () {
var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(rect, index) {
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
extendRectList[index] = _objectSpread({}, rect);
case 1:
case "end":
return _context2.stop();
}
}, _callee2);
}));
return function (_x, _x2) {
return _ref3.apply(this, arguments);
};
}());
return _context3.abrupt("return", {
rectList: rectList,
extendRectList: extendRectList,
selectIndex: selectIndex,
file: file
});
case 26:
case "end":
return _context3.stop();
}
}, _callee3);
}));
return function getCropInfo() {
return _ref2.apply(this, arguments);
};
}();
// 监听showCrop、cropRect - 监听是否可编辑、绘制的矩形
useEffect(function () {
//计算归一化crop rect
var normalizationRect = null;
if (showCrop && cropRect) {
var video = videoRef.current;
var scale = Math.min(video.offsetWidth / video.videoWidth, video.offsetHeight / video.videoHeight);
var finalVideoWidth = video.videoWidth * scale;
var finalVideoHeight = video.videoHeight * scale;
var cropBoxLimited = {
width: finalVideoWidth,
height: finalVideoHeight,
top: (video.offsetHeight - finalVideoHeight) / 2,
left: (video.offsetWidth - finalVideoWidth) / 2
};
normalizationRect = {
x: (cropRect.x - cropBoxLimited.left) / cropBoxLimited.width,
y: (cropRect.y - cropBoxLimited.top) / cropBoxLimited.height,
w: cropRect.w / cropBoxLimited.width,
h: cropRect.h / cropBoxLimited.height
};
}
onCropChange === null || onCropChange === void 0 || onCropChange(showCrop, normalizationRect);
}, [showCrop, cropRect]);
// ========================== 截帧 =========================
var downloadVideoFrame = useCallback(function (opt) {
var _videoInsRef$current6, _videoInsRef$current7;
videoInsRef === null || videoInsRef === void 0 || (_videoInsRef$current6 = videoInsRef.current) === null || _videoInsRef$current6 === void 0 || (_videoInsRef$current7 = _videoInsRef$current6.pause) === null || _videoInsRef$current7 === void 0 || _videoInsRef$current7.call(_videoInsRef$current6);
downloadFrame(videoRef.current, opt);
}, []);
// ============================== 暴露出去的方法 ===============================
var latestIsReady = useLatest(isReady);
var cropAble = !showStatus && isReady;
useImperativeHandle(ref, function () {
return {
cropAble: cropAble,
setShowCrop: function setShowCrop(dispatch) {
var isReady = latestIsReady.current;
if (!isReady) return;
_setShowCrop === null || _setShowCrop === void 0 || _setShowCrop(dispatch);
},
downloadVideoFrame: downloadVideoFrame,
pause: function pause() {
var _videoInsRef$current8, _videoInsRef$current9;
(_videoInsRef$current8 = videoInsRef.current) === null || _videoInsRef$current8 === void 0 || (_videoInsRef$current9 = _videoInsRef$current8.pause) === null || _videoInsRef$current9 === void 0 || _videoInsRef$current9.call(_videoInsRef$current8);
},
play: function play() {
var _videoInsRef$current10, _videoInsRef$current11;
(_videoInsRef$current10 = videoInsRef.current) === null || _videoInsRef$current10 === void 0 || (_videoInsRef$current11 = _videoInsRef$current10.play) === null || _videoInsRef$current11 === void 0 || _videoInsRef$current11.call(_videoInsRef$current10);
},
reload: _reload
};
});
return /*#__PURE__*/React.createElement("div", {
className: classNames("".concat(componentName)),
ref: containerRef,
style: {
width: width,
height: height,
backgroundColor: backgroundColor
}
}, url && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FlvPlayer, _extends({
playId: playSeq,
autoPlay: autoPlay,
className: classNames("".concat(componentName, "-flv")),
type: url.startsWith('http') ? 'mp4' : 'flv',
url: url,
config: {
enableStashBuffer: true,
stashInitialSize: 1024 * 700,
isLive: true,
hasAudio: false,
hasVideo: true
},
onCreate: initPlayer
}, playerProps)), /*#__PURE__*/React.createElement("div", {
className: classNames("".concat(componentName, "-crop-container")),
ref: corpContainerRef,
style: {
display: isFullscreen ? 'none' : 'block',
width: '100%',
height: '100%'
}
}), showCrop && cropRect && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
ref: alginContainerRef,
className: classNames("".concat(componentName, "-align")),
style: Object.assign({
width: cropRect.w,
height: cropRect.h
}, getTransforms({
translateX: cropRect.x,
translateY: cropRect.y
}))
}), /*#__PURE__*/React.createElement(Align, {
ref: alignRef,
monitorWindowResize: true,
align: screenshotButtonAlign,
target: function target() {
return alginContainerRef.current;
}
}, screenshotButtonRender({
model: 'IMAGE',
getCropInfo: getCropInfo,
setShowCrop: _setShowCrop,
cropType: CROP_TYPE['CUSTOM']
}))), !showCrop && /*#__PURE__*/React.createElement("div", {
className: "".concat(componentName, "-opt")
}, /*#__PURE__*/React.createElement(IconFont, {
styles: {
marginRight: '12px',
color: '#fff',
display: 'flex'
},
onIconClick: function onIconClick() {
if (!isPlay) {
var _videoInsRef$current12;
//播放中暂停
videoInsRef === null || videoInsRef === void 0 || (_videoInsRef$current12 = videoInsRef.current) === null || _videoInsRef$current12 === void 0 || _videoInsRef$current12.play();
_setShowCrop(false);
} else {
var _videoInsRef$current13;
videoInsRef === null || videoInsRef === void 0 || (_videoInsRef$current13 = videoInsRef.current) === null || _videoInsRef$current13 === void 0 || _videoInsRef$current13.pause();
}
},
color: "#1890ff",
icon: !isPlay ? 'icon-bofang3' : 'icon-zanting1'
}), /*#__PURE__*/React.createElement("div", {
className: "".concat(componentName, "-opt-range"),
onClick: function onClick(e) {
e.stopPropagation();
}
}, /*#__PURE__*/React.createElement(Range, {
value: playTime,
min: 0,
max: showMaxDuration,
showSlider: showSlider,
onChange: seek
}), /*#__PURE__*/React.createElement("div", null, formatDurationTime(playTime), "/", formatDurationTime(showMaxDuration))), /*#__PURE__*/React.createElement(IconFont, {
styles: {
display: 'flex',
marginLeft: '12px'
},
color: "#fff",
size: 18,
onIconClick: function onIconClick(e) {
e.stopPropagation();
toggleFullscreen();
},
icon: isFullscreen ? 'icon-suoxiao1' : 'icon-quanping1'
})), !!showStatus && /*#__PURE__*/React.createElement(Loading, {
status: showStatus,
reload: function reload() {
return _reload();
}
})));
});
export default VideoPlayer;