diff --git a/src/main/frontend/components/ClipRangeSlider.tsx b/src/main/frontend/components/ClipRangeSlider.tsx index b5cd036..ef29727 100644 --- a/src/main/frontend/components/ClipRangeSlider.tsx +++ b/src/main/frontend/components/ClipRangeSlider.tsx @@ -1,12 +1,12 @@ -import {VideoMetadataFrontend} from "Frontend/components/Playbar"; import RangeSlider from 'react-range-slider-input'; import 'react-range-slider-input/dist/style.css'; import {useRef} from "react"; import clsx from 'clsx'; +import VideoMetadata from "Frontend/generated/com/ddf/vodsystem/entities/VideoMetadata"; type Props = { videoRef: HTMLVideoElement | null; - videoMetadata: VideoMetadataFrontend; + videoMetadata: VideoMetadata; setSliderValue: Function; setClipRangeValue: Function; className?: string; diff --git a/src/main/frontend/components/PlaybackSlider.tsx b/src/main/frontend/components/PlaybackSlider.tsx index f4133dd..6f1fa34 100644 --- a/src/main/frontend/components/PlaybackSlider.tsx +++ b/src/main/frontend/components/PlaybackSlider.tsx @@ -1,10 +1,10 @@ -import {VideoMetadataFrontend} from "Frontend/components/Playbar"; import {useEffect, useState} from "react"; import clsx from 'clsx'; +import VideoMetadata from "Frontend/generated/com/ddf/vodsystem/entities/VideoMetadata"; type Props = { videoRef: HTMLVideoElement | null; - videoMetadata: VideoMetadataFrontend; + videoMetadata: VideoMetadata; sliderValue: number; setSliderValue: Function; className?: string; diff --git a/src/main/frontend/components/Playbar.tsx b/src/main/frontend/components/Playbar.tsx index b427d31..bd057bc 100644 --- a/src/main/frontend/components/Playbar.tsx +++ b/src/main/frontend/components/Playbar.tsx @@ -1,20 +1,12 @@ import { useEffect, useState} from "react"; import { Volume, Play, Pause } from 'lucide-react'; import clsx from 'clsx'; +import VideoMetadata from "Frontend/generated/com/ddf/vodsystem/entities/VideoMetadata"; -export type VideoMetadataFrontend = { - startPoint: number, - endPoint: number, - fps: number, - width: number, - height: number, - fileSize: number -} - type Props = { video: HTMLVideoElement | null; - videoMetadata: VideoMetadataFrontend; + videoMetadata: VideoMetadata; className?: string; }; @@ -87,9 +79,11 @@ export default function Playbar({ video, videoMetadata, className }: Props) { - + {videoMetadata.endPoint && + + } ); } \ No newline at end of file diff --git a/src/main/frontend/views/video/{id}.tsx b/src/main/frontend/views/video/{id}.tsx index 84f64b0..0f9b247 100644 --- a/src/main/frontend/views/video/{id}.tsx +++ b/src/main/frontend/views/video/{id}.tsx @@ -1,11 +1,11 @@ import { useParams } from 'react-router-dom'; import { useEffect, useRef, useState } from "react"; -import { VideoMetadataFrontend } from "Frontend/components/Playbar"; import Playbar from "./../../components/Playbar"; import PlaybackSlider from "./../../components/PlaybackSlider"; import ClipRangeSlider from "./../../components/ClipRangeSlider"; import ClipConfig from "./../../components/ClipConfig"; import * as editService from "../../generated/EditService"; +import * as metadataService from "../../generated/MetadataService" import VideoMetadata from "Frontend/generated/com/ddf/vodsystem/entities/VideoMetadata"; function exportFile(uuid: string, @@ -36,7 +36,7 @@ export default function VideoId() { const videoRef = useRef(null); const videoUrl = `api/v1/download/input/${id}` - const [metadata, setMetadata] = useState(null); + const [metadata, setMetadata] = useState(null); const [playbackValue, setPlaybackValue] = useState(0); const [clipRangeValue, setClipRangeValue] = useState([0, 1]); const [width, setWidth] = useState(1280); @@ -45,13 +45,11 @@ export default function VideoId() { const [fileSize, setFileSize] = useState(10); useEffect(() => { - fetch(`api/v1/metadata/original/${id}`) - .then((res) => { - if (!res.ok) throw new Error("Failed to fetch metadata"); - return res.json(); - }) - .then(setMetadata) - .catch((err) => console.log(err.message)); + if (!id) return; + + metadataService.getInputFileMetadata(id) + .then((data) => setMetadata(data ?? null)) // 👈 Normalize undefined to null + .catch((err) => console.error("Metadata fetch failed:", err)); }, [id]); const sendData = () => { diff --git a/src/main/java/com/ddf/vodsystem/services/CompressionService.java b/src/main/java/com/ddf/vodsystem/services/CompressionService.java index 6175504..fb0ebad 100644 --- a/src/main/java/com/ddf/vodsystem/services/CompressionService.java +++ b/src/main/java/com/ddf/vodsystem/services/CompressionService.java @@ -28,12 +28,6 @@ public class CompressionService { private final Pattern timePattern = Pattern.compile("out_time_ms=([\\d:.]+)"); - private final MetadataService metadataService; - - public CompressionService(MetadataService metadataService) { - this.metadataService = metadataService; - } - private void buildFilters(ArrayList command, Float fps, Integer width, Integer height) { List filters = new ArrayList<>(); @@ -138,10 +132,6 @@ public class CompressionService { throw new FFMPEGException("FFMPEG process failed"); } - // set new metadata - VideoMetadata newMetadata = metadataService.getVideoMetadata(job.getOutputFile()); - job.setOutputVideoMetadata(newMetadata); - job.setStatus(JobStatus.FINISHED); logger.info("FFMPEG finished"); } diff --git a/src/main/java/com/ddf/vodsystem/services/MetadataService.java b/src/main/java/com/ddf/vodsystem/services/MetadataService.java index 779eaf1..6431899 100644 --- a/src/main/java/com/ddf/vodsystem/services/MetadataService.java +++ b/src/main/java/com/ddf/vodsystem/services/MetadataService.java @@ -1,5 +1,6 @@ package com.ddf.vodsystem.services; +import com.ddf.vodsystem.entities.Job; import com.ddf.vodsystem.entities.VideoMetadata; import com.ddf.vodsystem.exceptions.FFMPEGException; import com.fasterxml.jackson.databind.JsonNode; @@ -21,6 +22,12 @@ import java.io.InputStreamReader; public class MetadataService { private static Logger logger = LoggerFactory.getLogger(MetadataService.class); + private final JobService jobService; + + public MetadataService(JobService jobService) { + this.jobService = jobService; + } + public VideoMetadata getVideoMetadata(File file) { logger.info("Getting metadata for file {}", file.getAbsolutePath()); @@ -45,6 +52,16 @@ public class MetadataService { } + public VideoMetadata getInputFileMetadata(String uuid) { + Job job = jobService.getJob(uuid); + return getVideoMetadata(job.getInputFile()); + } + + public VideoMetadata getOutputFileMetadata(String uuid) { + Job job = jobService.getJob(uuid); + return getVideoMetadata(job.getOutputFile()); + } + private JsonNode readStandardOutput(Process process) throws IOException{ // Read the standard output (JSON metadata) BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));