From 0a7fefaead0adbf2159a827e3674067947c0eb31 Mon Sep 17 00:00:00 2001 From: shikong <919411476@qq.com> Date: Fri, 8 Sep 2023 12:21:23 +0800 Subject: [PATCH] =?UTF-8?q?feign=20wvp=20=E6=8E=A5=E5=8F=A3=E5=AE=9A?= =?UTF-8?q?=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wvp/dto/common/GeneralTimeReq.java | 23 +++++ .../wvp/dto/download/DownloadStartReq.java | 23 +++++ .../wvp/dto/download/DownloadStartResp.java | 62 ++++++++++++++ .../dto/media/proxy/AddDownloadTaskReq.java | 22 +++++ .../dto/media/proxy/GetDownloadTaskReq.java | 24 ++++++ .../dto/media/proxy/GetDownloadTaskResp.java | 32 +++++++ .../wvp/dto/record/QueryRecordReq.java | 17 ++++ .../wvp/dto/record/QueryRecordResp.java | 40 +++++++++ .../gb28181/wvp/dto/stream/StreamContent.java | 60 ++++++++++++++ .../gb28181/wvp/proxy/WvpProxyClient.java | 83 +++++++++++++++++-- .../src/main/resources/application.yml | 4 +- 11 files changed, 383 insertions(+), 7 deletions(-) create mode 100644 gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/common/GeneralTimeReq.java create mode 100644 gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/download/DownloadStartReq.java create mode 100644 gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/download/DownloadStartResp.java create mode 100644 gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/media/proxy/AddDownloadTaskReq.java create mode 100644 gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/media/proxy/GetDownloadTaskReq.java create mode 100644 gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/media/proxy/GetDownloadTaskResp.java create mode 100644 gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/record/QueryRecordReq.java create mode 100644 gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/record/QueryRecordResp.java create mode 100644 gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/stream/StreamContent.java diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/common/GeneralTimeReq.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/common/GeneralTimeReq.java new file mode 100644 index 0000000..9385c82 --- /dev/null +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/common/GeneralTimeReq.java @@ -0,0 +1,23 @@ +package cn.skcks.docking.gb28181.wvp.dto.common; + +import cn.hutool.core.date.DatePattern; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +@NoArgsConstructor +@AllArgsConstructor +@Data +public class GeneralTimeReq { + @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + private Date startTime; + + @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + private Date endTime; +} diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/download/DownloadStartReq.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/download/DownloadStartReq.java new file mode 100644 index 0000000..579c697 --- /dev/null +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/download/DownloadStartReq.java @@ -0,0 +1,23 @@ +package cn.skcks.docking.gb28181.wvp.dto.download; + +import cn.hutool.core.date.DatePattern; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +@NoArgsConstructor +@Data +public class DownloadStartReq { + @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + private Date startTime; + + @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + private Date endTime; + + private int downloadSpeed = 4; +} diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/download/DownloadStartResp.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/download/DownloadStartResp.java new file mode 100644 index 0000000..cae463b --- /dev/null +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/download/DownloadStartResp.java @@ -0,0 +1,62 @@ +package cn.skcks.docking.gb28181.wvp.dto.download; + +import cn.hutool.core.date.DatePattern; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; +import java.util.List; + +@NoArgsConstructor +@Data +public class DownloadStartResp { + private String app; + + @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + private Date endTime; + + private String flv; + private String fmp4; + private String hls; + private String httpsFlv; + private String httpsFmp4; + private String httpsHls; + private String httpsTs; + private String mediaServerId; + private Double progress; + private String rtc; + private String rtcs; + private String rtmp; + private String rtsp; + + @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + private Date startTime; + private String stream; + private List tracks; + private String ts; + private String wsFlv; + private String wsFmp4; + private String wsHls; + private String wsTs; + private String wssFlv; + private String wssFmp4; + private String wssHls; + + @NoArgsConstructor + @Data + public static class TracksDTO { + private Integer channels; + private Integer codecId; + private Integer codecType; + private Integer fps; + private Integer height; + private Boolean ready; + private Integer sampleBit; + private Integer sampleRate; + private Integer width; + } +} diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/media/proxy/AddDownloadTaskReq.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/media/proxy/AddDownloadTaskReq.java new file mode 100644 index 0000000..e5d2934 --- /dev/null +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/media/proxy/AddDownloadTaskReq.java @@ -0,0 +1,22 @@ +package cn.skcks.docking.gb28181.wvp.dto.media.proxy; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +public class AddDownloadTaskReq { + /** + * 应用id + *

WvpProxyClient.downloadStart 或 WvpProxyClient.downloadProgress 返回值中获取的 app 字段

+ */ + private String app; + + /** + * 流id + *

WvpProxyClient.downloadStart 或 WvpProxyClient.downloadProgress 返回值中获取的 stream 字段

+ */ + private String stream; +} diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/media/proxy/GetDownloadTaskReq.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/media/proxy/GetDownloadTaskReq.java new file mode 100644 index 0000000..dffc7c7 --- /dev/null +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/media/proxy/GetDownloadTaskReq.java @@ -0,0 +1,24 @@ +package cn.skcks.docking.gb28181.wvp.dto.media.proxy; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class GetDownloadTaskReq { + /** + * 应用id + *

WvpProxyClient.downloadStart 或 WvpProxyClient.downloadProgress 返回值中获取的 app 字段

+ */ + private String app; + + /** + * 流id + *

WvpProxyClient.downloadStart 或 WvpProxyClient.downloadProgress 返回值中获取的 stream 字段

+ */ + private String stream; + + private String taskId; + + @JsonProperty("isEnd") + private Boolean isEnd; +} diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/media/proxy/GetDownloadTaskResp.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/media/proxy/GetDownloadTaskResp.java new file mode 100644 index 0000000..635ed60 --- /dev/null +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/media/proxy/GetDownloadTaskResp.java @@ -0,0 +1,32 @@ +package cn.skcks.docking.gb28181.wvp.dto.media.proxy; + +import cn.hutool.core.date.DatePattern; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +@NoArgsConstructor +@Data +public class GetDownloadTaskResp { + private String id; + private String app; + private String stream; + @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + private Date startTime; + + @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + private Date endTime; + + @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + private String createTime; + private String percentage; + private String recordFile; + private String downloadFile; + private String playFile; +} diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/record/QueryRecordReq.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/record/QueryRecordReq.java new file mode 100644 index 0000000..eb57e0f --- /dev/null +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/record/QueryRecordReq.java @@ -0,0 +1,17 @@ +package cn.skcks.docking.gb28181.wvp.dto.record; + +import cn.hutool.core.date.DatePattern; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +public class QueryRecordReq { + @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + private Date startTime; + + @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + private Date endTime; +} diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/record/QueryRecordResp.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/record/QueryRecordResp.java new file mode 100644 index 0000000..1d915a7 --- /dev/null +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/record/QueryRecordResp.java @@ -0,0 +1,40 @@ +package cn.skcks.docking.gb28181.wvp.dto.record; + +import cn.hutool.core.date.DatePattern; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.List; + +@NoArgsConstructor +@Data +public class QueryRecordResp { + + private String channelId; + private Integer count; + private String deviceId; + private String name; + private List recordList; + private String sn; + private Integer sumNum; + + @NoArgsConstructor + @Data + public static class RecordListDTO { + private String deviceId; + + @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + private String endTime; + private String filePath; + private String name; + private Integer secrecy; + + @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + private String startTime; + private String type; + } +} diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/stream/StreamContent.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/stream/StreamContent.java new file mode 100644 index 0000000..9f0a142 --- /dev/null +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/stream/StreamContent.java @@ -0,0 +1,60 @@ +package cn.skcks.docking.gb28181.wvp.dto.stream; + +import cn.hutool.core.date.DatePattern; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; +import java.util.List; + +@NoArgsConstructor +@Data +public class StreamContent { + private String app; + @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + private Date endTime; + private String flv; + private String fmp4; + private String hls; + private String httpsFlv; + private String httpsFmp4; + private String httpsHls; + private String httpsTs; + private String mediaServerId; + private Double progress; + private String rtc; + private String rtcs; + private String rtmp; + private String rtsp; + + @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + private Date startTime; + private String stream; + private List tracks; + private String ts; + private String wsFlv; + private String wsFmp4; + private String wsHls; + private String wsTs; + private String wssFlv; + private String wssFmp4; + private String wssHls; + + @NoArgsConstructor + @Data + public static class TracksDTO { + private Integer channels; + private Integer codecId; + private Integer codecType; + private Integer fps; + private Integer height; + private Boolean ready; + private Integer sampleBit; + private Integer sampleRate; + private Integer width; + } +} diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/proxy/WvpProxyClient.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/proxy/WvpProxyClient.java index b5f4677..349a1d7 100644 --- a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/proxy/WvpProxyClient.java +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/proxy/WvpProxyClient.java @@ -1,12 +1,20 @@ package cn.skcks.docking.gb28181.wvp.proxy; import cn.skcks.docking.gb28181.common.json.JsonResponse; +import cn.skcks.docking.gb28181.wvp.dto.common.GeneralTimeReq; import cn.skcks.docking.gb28181.wvp.dto.device.GetDeviceChannelsReq; import cn.skcks.docking.gb28181.wvp.dto.device.GetDeviceChannelsResp; import cn.skcks.docking.gb28181.wvp.dto.device.GetDeviceTreeReq; import cn.skcks.docking.gb28181.wvp.dto.device.GetDeviceTreeResp; +import cn.skcks.docking.gb28181.wvp.dto.download.DownloadStartReq; import cn.skcks.docking.gb28181.wvp.dto.login.WvpLoginReq; import cn.skcks.docking.gb28181.wvp.dto.login.WvpLoginResp; +import cn.skcks.docking.gb28181.wvp.dto.media.proxy.AddDownloadTaskReq; +import cn.skcks.docking.gb28181.wvp.dto.media.proxy.GetDownloadTaskReq; +import cn.skcks.docking.gb28181.wvp.dto.media.proxy.GetDownloadTaskResp; +import cn.skcks.docking.gb28181.wvp.dto.record.QueryRecordReq; +import cn.skcks.docking.gb28181.wvp.dto.record.QueryRecordResp; +import cn.skcks.docking.gb28181.wvp.dto.stream.StreamContent; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.SpringQueryMap; import org.springframework.http.MediaType; @@ -14,14 +22,79 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestHeader; -@FeignClient(name="wvpProxyClient", url = "${proxy.wvp.url}") +@FeignClient(name = "wvpProxyClient", url = "${proxy.wvp.url}") public interface WvpProxyClient { @GetMapping(value = "/api/user/login", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) JsonResponse login(@SpringQueryMap WvpLoginReq req); - @GetMapping(value = "/api/device/query/tree/channel/{deviceId}") - JsonResponse getDeviceTree(@RequestHeader("access-token") String token, @PathVariable String deviceId, @SpringQueryMap GetDeviceTreeReq req); + @GetMapping("/api/device/query/tree/channel/{deviceId}") + JsonResponse getDeviceTree(@RequestHeader("access-token") String token, + @PathVariable String deviceId, + @SpringQueryMap GetDeviceTreeReq req); - @GetMapping(value = "/api/device/query/devices/{deviceId}/channels") - JsonResponse getDeviceChannels(@RequestHeader("access-token") String token, @PathVariable String deviceId, @SpringQueryMap GetDeviceChannelsReq req); + @GetMapping("/api/device/query/devices/{deviceId}/channels") + JsonResponse getDeviceChannels(@RequestHeader("access-token") String token, + @PathVariable String deviceId, + @SpringQueryMap GetDeviceChannelsReq req); + + @GetMapping("/api/gb_record/query/{deviceId}/{channelId}") + JsonResponse queryRecord(@RequestHeader("access-token") String token, + @PathVariable String deviceId, + @PathVariable String channelId, + @SpringQueryMap QueryRecordReq req); + + // /api/playback/start/44050100001180000001/44050100001310000001?startTime=2023-09-07%2000:20:01&endTime=2023-09-07%2000:25:01 + @GetMapping("/api/playback/start/{deviceId}/{channelId}") + JsonResponse playbackStart(@RequestHeader("access-token") String token, + @PathVariable String deviceId, + @PathVariable String channelId, + @SpringQueryMap GeneralTimeReq req); + + // /api/playback/stop/44050100001180000001/44050100001310000001/44050100001180000001_44050100001310000001_20230908083001_20230908083501 + @GetMapping("/api/gb_record/download/start/{deviceId}/{channelId}") + JsonResponse downloadStart(@RequestHeader("access-token") String token, + @PathVariable String deviceId, + @PathVariable String channelId, + @SpringQueryMap DownloadStartReq req); + + // /api/gb_record/download/progress/44050100001180000001/44050100001310000001/59777645 + @GetMapping("/api/gb_record/download/progress/{deviceId}/{channelId}/{stream}") + JsonResponse downloadProgress(@RequestHeader("access-token") String token, + @PathVariable String deviceId, + @PathVariable String channelId, + @PathVariable String stream); + + /** + * 停止下载, 部分设备会出现长时间卡住不动 且 wvp 会出现 100 错误, 故调用即可无需理会返回值 + * @param token 认证token + * @param deviceId 国标设备id/下级平台id + * @param channelId 通道id + * @param stream downloadStart中的 stream + */ + // /api/gb_record/download/stop/44050100001180000001/44050100001310000001/59777645 + @GetMapping("/api/gb_record/download/stop/{deviceId}/{channelId}/{stream}") + JsonResponse downloadStop(@RequestHeader("access-token") String token, + @PathVariable String deviceId, + @PathVariable String channelId, + @PathVariable String stream); + + /** + * 添加视频裁剪合并 任务 到 wvp-assist 服务, 返回 taskId 用于后续操作 + * @param token 认证token + * @param mediaServerId 流媒体服务id, 从 downloadStart/downloadProgress 获得 + * @return 返回 taskId 用于后续操作 + */ + // /record_proxy/your_server_id/api/record/file/download/task/add?app=rtp&stream=59777645 + @GetMapping("/record_proxy/{mediaServerId}/api/record/file/download/task/add") + JsonResponse addDownloadTask2MediaServer(@RequestHeader("access-token") String token, + @PathVariable String mediaServerId, + @SpringQueryMap AddDownloadTaskReq req); + + // /record_proxy/your_server_id/api/record/file/download/task/list?app=rtp&stream=59777645&taskId=0490d767d94ce20aedce57c862b6bfe9&isEnd=true + @GetMapping("/record_proxy/{mediaServerId}/api/record/file/download/task/list") + JsonResponse getDownloadTask4MediaServer(@RequestHeader("access-token") String token, + @PathVariable String mediaServerId, + @SpringQueryMap GetDownloadTaskReq req); + + // /api/gb_record/download/progress/44050100001180000001/44050100001310000001/59777645 } diff --git a/gb28181-wvp-proxy-starter/src/main/resources/application.yml b/gb28181-wvp-proxy-starter/src/main/resources/application.yml index 714280f..c42a141 100644 --- a/gb28181-wvp-proxy-starter/src/main/resources/application.yml +++ b/gb28181-wvp-proxy-starter/src/main/resources/application.yml @@ -25,8 +25,8 @@ spring: username: root password: 123456a url: jdbc:mysql://192.168.1.241:3306/gb28181_docking_platform?createDatabaseIfNotExist=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai - profiles: - active: local +# profiles: +# active: local cloud: openfeign: httpclient: