import { videoUrlMessage } from "@/utils/compress" import { ScissorOutlined } from "@ant-design/icons" import { Button, Popover, Image } from "antd" import React, { useState } from "react" import style from './index.less' import Lazyimg from "react-lazyimg-component" interface Props { url: string, onChange?: (url: string) => void } /** * 获取oo视频帧序列 * @returns */ const VideoFrameSelect: React.FC = ({ url, onChange }) => { /************************************/ const [urlList, setUrlList] = useState([]) const [urlNum, seturlNum] = useState(30) const [open, setOpen] = useState(false); const [selectUrl, setSelectUrl] = useState() const [visible, setVisible] = useState(false) const [lookUrl, setLookUrl] = useState() /************************************/ const handleOk = () => { if (selectUrl) { console.log(selectUrl) onChange?.(selectUrl) setTimeout(() => setOpen(false), 100) } }; const onVisibleChange = async (newOpen: boolean) => { if (newOpen && url && url.includes('.mp4')) { let data = await videoUrlMessage(url) let duration = data.videoLength let gap = duration / urlNum setUrlList(Array(urlNum).fill('').map((item, index) => url + `?x-oss-process=video/snapshot,t_${(index * gap * 1000).toFixed(0)}`)) } setOpen(newOpen); }; const selectHandle = (url: string) => { setSelectUrl(url) } return {open && <>
{urlList.map((url, index) =>
{ selectHandle(url) }} className={`lazy`} src={url} /> { setLookUrl(url); setVisible(true) }}>查看
)}
{ setVisible(value); }, }} /> } } destroyTooltipOnHide={true} trigger="click" open={open} onOpenChange={onVisibleChange} >
} export default React.memo(VideoFrameSelect)