/device/video.mp4 添加偏移量配置

This commit is contained in:
shikong 2023-10-10 09:22:06 +08:00
parent 6d1dfc6445
commit a9eab491d5
4 changed files with 46 additions and 4 deletions

View File

@ -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());
}
}

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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