feat(streaming): timestamp based stream markers #6

Merged
dylan merged 7 commits from feat/stream-markers into master 2026-07-02 19:14:43 +01:00
2 changed files with 32 additions and 1 deletions
Showing only changes of commit ba378680c6 - Show all commits

View File

@@ -1,6 +1,7 @@
package com.ddf.vodsystem.controllers; package com.ddf.vodsystem.controllers;
import com.ddf.vodsystem.controllers.dto.ClipSectionRequest; import com.ddf.vodsystem.controllers.dto.ClipSectionRequest;
import com.ddf.vodsystem.controllers.dto.SaveSectionByMarkerRequest;
import com.ddf.vodsystem.controllers.dto.SaveSectionRequest; import com.ddf.vodsystem.controllers.dto.SaveSectionRequest;
import com.ddf.vodsystem.controllers.dto.UUIDResponse; import com.ddf.vodsystem.controllers.dto.UUIDResponse;
import com.ddf.vodsystem.dto.Job; import com.ddf.vodsystem.dto.Job;
@@ -54,6 +55,21 @@ public class MediaController {
)); ));
} }
@PostMapping("/save/markers")
public ResponseEntity<APIResponse<UUIDResponse>> saveByMarkers(
@Valid @RequestBody SaveSectionByMarkerRequest saveSectionByMarkerRequest) throws IOException {
Job job = mediaService.saveSection(
saveSectionByMarkerRequest.startMarkerId(),
saveSectionByMarkerRequest.endMarkerId(),
saveSectionByMarkerRequest.title(),
saveSectionByMarkerRequest.description());
return ResponseEntity.ok(new APIResponse<>(
SUCCESS,
"Section saving successfully started",
new UUIDResponse(job.getUuid())
));
}
@PostMapping("/clip") @PostMapping("/clip")
public ResponseEntity<APIResponse<UUIDResponse>> clip( public ResponseEntity<APIResponse<UUIDResponse>> clip(
@RequestBody ClipSectionRequest clipSectionRequest) throws IOException { @RequestBody ClipSectionRequest clipSectionRequest) throws IOException {

View File

@@ -3,6 +3,7 @@ package com.ddf.vodsystem.services;
import com.ddf.vodsystem.dto.ClipOptions; import com.ddf.vodsystem.dto.ClipOptions;
import com.ddf.vodsystem.dto.Job; import com.ddf.vodsystem.dto.Job;
import com.ddf.vodsystem.dto.JobState; import com.ddf.vodsystem.dto.JobState;
import com.ddf.vodsystem.entities.Marker;
import com.ddf.vodsystem.entities.User; import com.ddf.vodsystem.entities.User;
import com.ddf.vodsystem.exceptions.NotAuthenticated; import com.ddf.vodsystem.exceptions.NotAuthenticated;
import com.ddf.vodsystem.services.media.CompressionService; import com.ddf.vodsystem.services.media.CompressionService;
@@ -32,12 +33,13 @@ public class MediaService {
private static final int HLS_SEGMENT_LENGTH = 3; private static final int HLS_SEGMENT_LENGTH = 3;
private final StreamActionsService streamActionsService; private final StreamActionsService streamActionsService;
private final VodService vodService; private final VodService vodService;
private final MarkerService markerService;
public MediaService(JobRegistryService jobRegistryService, public MediaService(JobRegistryService jobRegistryService,
DirectoryService directoryService, DirectoryService directoryService,
CompressionService compressionService, CompressionService compressionService,
UserService userService, UserService userService,
ClipService clipService, StreamActionsService streamActionsService, VodService vodService) { ClipService clipService, StreamActionsService streamActionsService, VodService vodService, MarkerService markerService) {
this.jobRegistryService = jobRegistryService; this.jobRegistryService = jobRegistryService;
this.directoryService = directoryService; this.directoryService = directoryService;
this.compressionService = compressionService; this.compressionService = compressionService;
@@ -45,6 +47,7 @@ public class MediaService {
this.clipService = clipService; this.clipService = clipService;
this.streamActionsService = streamActionsService; this.streamActionsService = streamActionsService;
this.vodService = vodService; this.vodService = vodService;
this.markerService = markerService;
} }
/** /**
@@ -149,6 +152,18 @@ public class MediaService {
); );
} }
public Job saveSection(
Long startMarkerId,
Long endMarkerId,
String title,
String description
) throws IOException {
Marker start = markerService.getMarkerById(startMarkerId);
Marker end = markerService.getMarkerById(endMarkerId);
return saveSection(start.getTimestamp(), end.getTimestamp(), title, description);
}
/** /**
* Saves the last {@code duration} seconds of the currently authenticated user's live stream as a clip. * Saves the last {@code duration} seconds of the currently authenticated user's live stream as a clip.
* <p> * <p>