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