You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

172 lines
7.1 KiB

import React, { useState, useEffect, useRef } from "react";
import { connect } from "react-redux";
import moment from 'moment'
import VideoOperationCloudControl from './videoOperationCloudControl'
import VideoOperationTalk from './videoOperationTalk'
import VideoOperationSpeed from './videoOperationSpeed'
import VideoOperationVoice from './videoOperationVoice'
import VideoOperationHistroyTime from './videoOperationHistroyTime'
import VideoOperationHistroyProcess from "./videoOperationHistroyProcess";
import { IconPause, IconPlay } from '@douyinfe/semi-icons';
import './videoPlay.less';
import { log } from "ezuikit-js";
const timeFormat = 'YYYY-MM-DD HH:mm:ss'
const VideoOperation = ({
ToastInCustom,
operationState, operation,
voiceDisY, setVoiceDisY,
processDisX, setProcessDisX,
isAdjustProcess, setIsAdjustProcess,
resolution, setResolution,
histroyTime, setHistroyTime,
histroyBegain,
play, pause, closeSound, openSound,
isPlaying,
videoObj,
setYingshiPrepare, yingshiPrepareRef,
slideDown,
player,
// setPlayer,
playState,
videoFront,
videoAfter
}) => {
const [showTimeSelect, setShowTimeSelect] = useState(false)
const butStyle = {
border: '1px solid #fff', color: '#fff', padding: '0 10px',
display: 'flex', alignItems: 'center', height: '64%', marginLeft: 12, cursor: 'pointer',
position: 'relative'
}
const changeResolution = () => {
// if (yingshiPrepareRef.current) {
// return
// }
if (videoObj.type == 'yingshi') {
// yingshiPrepareRef.current = 'yingshi'
// setYingshiPrepare('play')
}
console.log(player);
videoFront = new moment(); //验证前时间
player.stop().then((res) => {
if (resolution == 'sd') {
player.play({ url: videoObj?.playUrlHd, options: { hd: true } })
} else {
player.play({ url: videoObj?.playUrlSd, options: { hd: false } } )
}
playState = false
})
setResolution(resolution == 'sd' ? 'hd' : 'sd')
// setPlayer({ url: resolution == 'sd' ? videoObj?.playUrlSd : videoObj?.playUrlHd })
}
const histroySelected = operationState && operationState.histroy.select
return (
<>
{
operationState ?
operationState?.control?.select ?
<VideoOperationCloudControl videoObj={videoObj} /> :
operationState.talk.select ?
<VideoOperationTalk
videoObj={videoObj}
/> :
'' : ''
}
{
showTimeSelect ?
<VideoOperationHistroyTime
close={() => { setShowTimeSelect(false) }} histroyTime={histroyTime} setHistroyTime={setHistroyTime} setProcessDisX={setProcessDisX}
/>
: ''
}
{/* 下方操作 */}
<div className={slideDown == 'true' ? 'animation' : ""} style={{
height: histroySelected ? 44 : 42, lineHeight: `${histroySelected ? 44 : 42}px`,
background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.8) 100%)', padding: '0 12px',
position: 'absolute', bottom: slideDown == 'true' ? -42 : 0, width: '100%', zIndex: 99, color: '#fff',
}}>
{
histroySelected && histroyTime.length ?
<VideoOperationHistroyProcess
processDisX={processDisX} setProcessDisX={setProcessDisX} histroyTime={histroyTime}
isAdjustProcess={isAdjustProcess} setIsAdjustProcess={setIsAdjustProcess}
/> : ''
}
<div style={{
display: 'flex', justifyContent: 'space-between', height: '100%'
}}>
{
operationState ?
histroySelected ?
<>
<div style={{ display: 'flex', alignItems: 'center' }}>
{
videoObj.type != 'yingshi' ?
isPlaying ?
<IconPause style={{ cursor: 'pointer' }} onClick={pause} />
: <IconPlay style={{ cursor: 'pointer' }} onClick={play} />
: ''
}
<span style={{ marginLeft: 12 }}>
{histroyTime.length ? `${moment(histroyTime[0]).format(timeFormat)} / ${moment(histroyTime[1]).format(timeFormat)}` : ''}
</span>
</div>
<div style={{ display: 'flex', alignItems: 'center' }}>
<VideoOperationVoice voiceDisY={voiceDisY} setVoiceDisY={setVoiceDisY} videoObj={videoObj} closeSound={closeSound} openSound={openSound} />
{
videoObj.type != 'yingshi' ?
<VideoOperationSpeed butStyle={butStyle} />
: ''
}
<div style={butStyle} onClick={() => {
setShowTimeSelect(!showTimeSelect)
}}>时间设置</div>
</div>
</>
:
<>
<div style={{ display: 'flex', alignItems: 'center' }}>
{
operationState ?
operation.map(p => {
if (p.hide) return null;
return <img
src={`/assets/images/background/video-icon-${p.key}-${operationState[p.key].select ? 'select' : 'unselect'}.png`}
height={18}
style={{ marginRight: 24, cursor: 'pointer' }}
onClick={(e) => { p.click(e) }}
/>
}) : ''
}
</div>
<div style={{ display: 'flex', alignItems: 'center', userSelect: 'none' }}>
{
videoObj.playUrlSd && videoObj.playUrlHd ?
resolution == 'sd' ?
<div style={butStyle} onClick={changeResolution}>标清</div> :
<div style={butStyle} onClick={changeResolution}>高清</div>
: ''
}
</div>
</> : ''
}
</div>
</div>
</>
)
}
function mapStateToProps (state) {
const { auth } = state;
return {
user: auth.user,
};
}
export default connect(mapStateToProps)(VideoOperation);