diff --git a/viewer/src/components/Player.tsx b/viewer/src/components/Player.tsx index 265dec2..e42d1ed 100644 --- a/viewer/src/components/Player.tsx +++ b/viewer/src/components/Player.tsx @@ -1,53 +1,29 @@ -import dynamic from "next/dynamic"; -const ReactPlayer = dynamic(() => import("react-player/lazy"), { ssr: false }); -import { useState, useRef, useEffect } from "react"; import { useRouter } from 'next/router'; -import WebVttPlayer from "./WebVttPlayer/WebVttPlayer"; +import WebVttPlayerFunctional from "./WebVttPlayer/WebVttPlayerFunctional"; // functional component PlayerReact that uses ReactPlayer -// TODO: parameterize video source and VTT source with props (general spec for 3rd party use!). must define spec. +// TODO: better parameterize video source and VTT source with props (general spec for 3rd party use!). must define spec. export default function Player() { - // get files in directory "../../data" without using fs const router = useRouter(); + const videoUrl = '/data/MIT Regressions intro video.mp4' // BIZARRE BUG: react-player component only works when I live-reload URL to valid path. if Chrome loads directly, then returns "failed to load media". const audioUrl = router.asPath + 'data/MIT Regressions intro audio.mp3' const transcriptUrl = router.asPath + "data/MIT Regressions intro captions.vtt" const metadataUrl = router.asPath + "data/MIT Regressions intro metadata.vtt" return ( <> -
- -
-
-
+
-
-
+ ); } diff --git a/viewer/src/components/VideoPlayer.tsx b/viewer/src/components/VideoPlayer.tsx new file mode 100644 index 0000000..0bf06b0 --- /dev/null +++ b/viewer/src/components/VideoPlayer.tsx @@ -0,0 +1,38 @@ +import ReactPlayer from "react-player/lazy"; +// import CustomReactPlayer from "./CustomReactPlayer"; + +interface PlayerRef { + seeking: boolean; + played: number; + duration: number; + seekTo: (time: number) => void; +} +// inherit prop playing from parent component +export default function VideoPlayer({ playerRef, playing, videoUrl, transcriptUrl }: { playerRef: React.RefObject, playing: boolean, videoUrl: string, transcriptUrl: string }) { + // ReactPlayer.addCustomPlayer(CustomReactPlayer); + return ( + console.log('onSeek', e)} + config={{ + file: { + forceVideo: true, + tracks: [ + { + label: 'English', + kind: 'captions', + src: transcriptUrl, + srcLang: 'en', + default: true, + }, + ], + }, + }} + /> + ); +} \ No newline at end of file diff --git a/viewer/src/components/WebVttPlayer/Transcript.tsx b/viewer/src/components/WebVttPlayer/Transcript.tsx index 70e82ce..8641730 100644 --- a/viewer/src/components/WebVttPlayer/Transcript.tsx +++ b/viewer/src/components/WebVttPlayer/Transcript.tsx @@ -1,6 +1,6 @@ import React, { Component } from 'react' import TranscriptLine from './TranscriptLine' -// import './Track.css' // currently exists in global instead. gotta consolidate this +// import './Track.css' // currently exists in global instead. TODO: consolidate this styling class Transcript extends Component { @@ -11,9 +11,9 @@ class Transcript extends Component { lines.push( ) } diff --git a/viewer/src/components/WebVttPlayer/WebVttPlayer.tsx b/viewer/src/components/WebVttPlayer/WebVttPlayer.tsx index a70f740..ca5d6fc 100644 --- a/viewer/src/components/WebVttPlayer/WebVttPlayer.tsx +++ b/viewer/src/components/WebVttPlayer/WebVttPlayer.tsx @@ -4,33 +4,48 @@ import Metadata from './Metadata' import Search from './Search' import './WebVttPlayer.module.css' +import dynamic from "next/dynamic"; +const ReactPlayer = dynamic(() => import("react-player/lazy"), { ssr: false }); + // type for props type WebVttProps = { - audio: string, + video: string, transcript: string, metadata: string, preload: boolean } -class WebVttPlayer extends Component { +interface VideoRef { + seeking: boolean; + played: number; + duration: number; + seekTo: (time: number) => void; +} + +class WebVttPlayer extends Component { metatrack: React.RefObject + video: React.RefObject audio: React.RefObject track: React.RefObject - constructor(props: WebVttProps) { super(props) this.state = { loaded: false, currentTime: 0, - query: '' + query: '', + seeking: false, + played: new Float64Array(0), + playing: false, } this.track = React.createRef() this.metatrack = React.createRef() this.audio = React.createRef() - + this.video = React.createRef(); + // const playerRef=useRef(); + this.onLoaded = this.onLoaded.bind(this) this.seek = this.seek.bind(this) this.checkIfLoaded = this.checkIfLoaded.bind(this) @@ -41,12 +56,19 @@ class WebVttPlayer extends Component { + console.log('onPause') + this.setState({ playing: false }) + } + + render() { let track = null let metatrack = null if (this.state.loaded) { track = this.track.current.track metatrack = this.metatrack.current.track + console.log("loaded video.current : ", this.video.current); } const preload = this.props.preload ? "true" : "false" const metadata = this.props.metadata @@ -60,6 +82,18 @@ class WebVttPlayer extends Component
+ + console.log('onSeek', e)} + onProgress={this.handleProgress} + />