import { useState, useEffect, useRef } from 'react' import { findDOMNode } from 'react-dom' import { Card, CardTitle, CardHeader, CardBody, Row, Col, Table, Button, Progress, CustomInput } from 'reactstrap' import Prism from 'prismjs' import ReactPlayer from 'react-player' import screenfull from 'screenfull' const pad = string => { return `0${string}`.slice(-2) } const format = seconds => { const date = new Date(seconds * 1000) const hh = date.getUTCHours() const mm = date.getUTCMinutes() const ss = pad(date.getUTCSeconds()) if (hh) { return `${hh}:${pad(mm)}:${ss}` } return `${mm}:${ss}` } const MediaPlayerControlledVideo = () => { useEffect(() => { Prism.highlightAll() }) const videoRef = useRef(null) const urlLink = 'http://youtube.com/watch?v=FCPdIvXo2rU' const [url, setUrl] = useState(urlLink) const [playing, setPlaying] = useState(false) const [controls, setControls] = useState(false) const [volume, setVolume] = useState(0.75) const [muted, setMuted] = useState(false) const [played, setPlayed] = useState(0) const [loaded, setLoaded] = useState(0) const [duration, setDuration] = useState(0) const [playbackRate, setPlaybackRate] = useState(1.0) const [loop, setLoop] = useState(false) const [seeking, setSeeking] = useState(null) const load = url => { setUrl(url) setPlayed(0) setLoaded(0) } const handlePlayPause = () => setPlaying(!playing) const handleStop = () => { setPlaying(false) setUrl(null) } const handleToggleControls = () => { setControls(!controls) setUrl(null) } useEffect(() => { if (url === null) { load(urlLink) } }) const handleToggleLoop = () => setLoop(!loop) const handleVolumeChange = e => setVolume(parseFloat(e.target.value)) const handleToggleMuted = () => setMuted(!muted) const handlePlaybackRate = e => setPlaybackRate(parseFloat(e.target.value)) const handlePlay = () => setPlaying(true) const handlePause = () => setPlaying(false) const handleSeekMouseDown = () => setSeeking(true) const handleSeekChange = e => { setPlayed(parseFloat(e.target.value)) } const handleSeekMouseUp = e => { setSeeking(false) videoRef.current.seekTo(parseFloat(e.target.value)) } const handleProgress = state => { if (!seeking) { setPlayed(state.played) setLoaded(state.loaded) } } const handleEnded = () => setPlaying(loop) const handleDuration = duration => setDuration(duration) const handleFullscreen = () => { screenfull.request(findDOMNode(videoRef.current)) } // for duration, elapsed and remaining time const Duration = ({ className, seconds }) => { return ( ) } const preDuration = const preElapsed = const preRemaining = return ( Controlled Video
Controls
Speed
Seek
Volume
Controls
Muted
Loop
Played
Loaded
              
                {`state={
  playing: ${playing},
  volume: ${volume.toFixed(2)},
  played: ${played.toFixed(2)},
  loaded: ${loaded.toFixed(2)},
  duration: ${format(preDuration.props.seconds)},
  elapsed: ${format(preElapsed.props.seconds)},
  remaining: ${format(preRemaining.props.seconds)}
}
`}
              
            
) } export default MediaPlayerControlledVideo