From a9eab491d567bdf52da5e1e9970e4c8f49808bc0 Mon Sep 17 00:00:00 2001 From: shikong <919411476@qq.com> Date: Tue, 10 Oct 2023 09:22:06 +0800 Subject: [PATCH] =?UTF-8?q?/device/video.mp4=20=E6=B7=BB=E5=8A=A0=E5=81=8F?= =?UTF-8?q?=E7=A7=BB=E9=87=8F=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wvp/api/video/VideoController.java | 15 +++++++++-- .../wvp/api/video/dto/VideoMp4Req.java | 4 +-- .../config/Gb28181DeviceVideoApiConfig.java | 27 +++++++++++++++++++ .../src/main/resources/application.yml | 4 +++ 4 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/config/Gb28181DeviceVideoApiConfig.java diff --git a/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/video/VideoController.java b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/video/VideoController.java index 4dfb558..f562fac 100644 --- a/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/video/VideoController.java +++ b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/video/VideoController.java @@ -1,9 +1,11 @@ package cn.skcks.docking.gb28181.wvp.api.video; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.skcks.docking.gb28181.media.config.ZlmMediaConfig; import cn.skcks.docking.gb28181.wvp.api.video.dto.VideoMp4Req; import cn.skcks.docking.gb28181.wvp.api.video.dto.VideoReq; +import cn.skcks.docking.gb28181.wvp.config.Gb28181DeviceVideoApiConfig; import cn.skcks.docking.gb28181.wvp.config.SwaggerConfig; import cn.skcks.docking.gb28181.wvp.config.WvpProxyConfig; import cn.skcks.docking.gb28181.wvp.service.gb28181.Gb28181DownloadService; @@ -24,6 +26,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.time.temporal.ChronoUnit; import java.util.Date; @Slf4j @@ -40,6 +43,8 @@ public class VideoController { private final Gb28181DownloadService gb28181DownloadService; + private final Gb28181DeviceVideoApiConfig gb28181DeviceVideoApiConfig; + @Bean public GroupedOpenApi videoApi() { return SwaggerConfig.api("VideoApi", "/video"); @@ -60,8 +65,14 @@ public class VideoController { @GetMapping(value = "/device/video.mp4",produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) @ResponseBody public void video(HttpServletRequest request, HttpServletResponse response, @ParameterObject VideoMp4Req req) { - Date startTime = DateUtil.date(req.getStartTime()); - Date endTime = DateUtil.date(req.getEndTime()); + long forward = gb28181DeviceVideoApiConfig.getOffset().getForward().get(ChronoUnit.MILLIS); + long back = gb28181DeviceVideoApiConfig.getOffset().getBack().get(ChronoUnit.MILLIS); + DateTime reqStartTime = DateUtil.date(req.getStartTime()); + DateTime reqEndTime = DateUtil.date(req.getEndTime()); + Date startTime = DateUtil.offsetMillisecond(reqStartTime, (int) -forward); + Date endTime = DateUtil.offsetMillisecond(reqEndTime, (int) back); + log.info("请求的时间范围 {} ~ {}", reqStartTime, reqEndTime); + log.info("偏移后的时间范围 {} ~ {}", startTime, endTime); gb28181DownloadService.video(request,response,req.getDeviceCode(), startTime, endTime, req.getFileHeader()); } } diff --git a/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/video/dto/VideoMp4Req.java b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/video/dto/VideoMp4Req.java index 416d663..23bf159 100644 --- a/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/video/dto/VideoMp4Req.java +++ b/gb28181-wvp-proxy-api/src/main/java/cn/skcks/docking/gb28181/wvp/api/video/dto/VideoMp4Req.java @@ -13,11 +13,11 @@ public class VideoMp4Req { @Schema(description = "设备编码") private String deviceCode; - @Schema(description = "开始时间 (毫秒)",example = "1695593100207") + @Schema(description = "开始时间 (毫秒) (proxy.gb28181.device-api.offset 可额外设置偏移量)",example = "1695593100207") @NotBlank(message = "开始时间 不能为空") private Long startTime; - @Schema(description = "结束时间 (毫秒)",example = "1695593190207") + @Schema(description = "结束时间 (毫秒) (proxy.gb28181.device-api.offset 可额外设置偏移量)",example = "1695593190207") @NotBlank(message = "结束时间 不能为空") private Long endTime; diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/config/Gb28181DeviceVideoApiConfig.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/config/Gb28181DeviceVideoApiConfig.java new file mode 100644 index 0000000..e8ebb27 --- /dev/null +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/config/Gb28181DeviceVideoApiConfig.java @@ -0,0 +1,27 @@ +package cn.skcks.docking.gb28181.wvp.config; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.time.Duration; +import java.time.temporal.ChronoUnit; + +@Component +@ConfigurationProperties(prefix = "proxy.gb28181.device-api", ignoreInvalidFields = true) +@Order(0) +@Data +public class Gb28181DeviceVideoApiConfig { + private Offset offset = new Offset(); + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class Offset { + private Duration forward = Duration.of(30, ChronoUnit.SECONDS); + private Duration back= Duration.of(0, ChronoUnit.SECONDS); + } +} diff --git a/gb28181-wvp-proxy-starter/src/main/resources/application.yml b/gb28181-wvp-proxy-starter/src/main/resources/application.yml index ccffa1c..b886aed 100644 --- a/gb28181-wvp-proxy-starter/src/main/resources/application.yml +++ b/gb28181-wvp-proxy-starter/src/main/resources/application.yml @@ -66,6 +66,10 @@ proxy: # - 192.168.1.241 stream-mode: tcp_passive use-playback-to-download: true + device-api: + offset: + forward: 30s + back: 0s ffmpeg-support: ffmpeg: /usr/bin/ffmpeg/ffmpeg