feat(streaming): timestamp based stream markers #6
@@ -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 {
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user