feign wvp 接口定义

This commit is contained in:
shikong 2023-09-08 12:21:23 +08:00
parent d2d278ae76
commit 0a7fefaead
11 changed files with 383 additions and 7 deletions

View File

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

View File

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

View File

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

View File

@ -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
* <p>WvpProxyClient.downloadStart WvpProxyClient.downloadProgress 返回值中获取的 app 字段</p>
*/
private String app;
/**
* 流id
* <p>WvpProxyClient.downloadStart WvpProxyClient.downloadProgress 返回值中获取的 stream 字段</p>
*/
private String stream;
}

View File

@ -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
* <p>WvpProxyClient.downloadStart WvpProxyClient.downloadProgress 返回值中获取的 app 字段</p>
*/
private String app;
/**
* 流id
* <p>WvpProxyClient.downloadStart WvpProxyClient.downloadProgress 返回值中获取的 stream 字段</p>
*/
private String stream;
private String taskId;
@JsonProperty("isEnd")
private Boolean isEnd;
}

View File

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

View File

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

View File

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

View File

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

View File

@ -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<WvpLoginResp> login(@SpringQueryMap WvpLoginReq req);
@GetMapping(value = "/api/device/query/tree/channel/{deviceId}")
JsonResponse<GetDeviceTreeResp> getDeviceTree(@RequestHeader("access-token") String token, @PathVariable String deviceId, @SpringQueryMap GetDeviceTreeReq req);
@GetMapping("/api/device/query/tree/channel/{deviceId}")
JsonResponse<GetDeviceTreeResp> getDeviceTree(@RequestHeader("access-token") String token,
@PathVariable String deviceId,
@SpringQueryMap GetDeviceTreeReq req);
@GetMapping(value = "/api/device/query/devices/{deviceId}/channels")
JsonResponse<GetDeviceChannelsResp> getDeviceChannels(@RequestHeader("access-token") String token, @PathVariable String deviceId, @SpringQueryMap GetDeviceChannelsReq req);
@GetMapping("/api/device/query/devices/{deviceId}/channels")
JsonResponse<GetDeviceChannelsResp> getDeviceChannels(@RequestHeader("access-token") String token,
@PathVariable String deviceId,
@SpringQueryMap GetDeviceChannelsReq req);
@GetMapping("/api/gb_record/query/{deviceId}/{channelId}")
JsonResponse<QueryRecordResp> 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<StreamContent> 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<StreamContent> 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<StreamContent> 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<Void> 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<String> 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<GetDownloadTaskResp> getDownloadTask4MediaServer(@RequestHeader("access-token") String token,
@PathVariable String mediaServerId,
@SpringQueryMap GetDownloadTaskReq req);
// /api/gb_record/download/progress/44050100001180000001/44050100001310000001/59777645
}

View File

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