添加 proxy.wvp.use-wvp-assist 配置

支持配置 是否 尝试使用 wvp-assist 下载视频回放
否则使用 playback 回放录制视频
This commit is contained in:
shikong 2023-09-11 11:37:57 +08:00
parent 37fc276f3d
commit f7b8960a98
3 changed files with 37 additions and 16 deletions

View File

@ -11,4 +11,8 @@ public class WvpProxyConfig {
private String url;
private String user;
private String passwd;
/**
* 是否尝试通过 wvp-assist 服务下载
*/
private Boolean useWvpAssist = true;
}

View File

@ -169,28 +169,44 @@ public class WvpService {
log.debug("{}", record);
});
try{
JsonResponse<String> videoPathResponse = downloadFromWvpAssist(deviceCode, deviceId, channelId, startTime, endTime, token);
String videoUrl = videoPathResponse.getData();
log.info("设备(deviceCode {}) (deviceId {}, channel{}) ({} ~ {}) 视频下载地址 {}", deviceCode, deviceId, channelId, startTime, endTime, videoUrl);
downloadService.download(response, videoUrl);
} catch (Exception e){
Retryer<JsonResponse<StreamContent>> playBackRetryer = RetryUtil.getDefaultRetryer("通过回放获取实时视频流下载");
JsonResponse<StreamContent> videoStreamResponse = playBackRetryer.call(() -> wvpProxyClient.playbackStart(token, deviceId, channelId, new GeneralTimeReq(startTime, endTime)));
StreamContent streamContent = videoStreamResponse.getData();
String stream = streamContent.getStream();
String streamUrl = streamContent.getFlv();
try {
recordService.header(response);
recordService.record(response, streamUrl, DateUtil.between(startDateTime, endDateTime, DateUnit.SECOND));
} finally {
wvpProxyClient.playbackStop(token, deviceId, channelId, stream);
Boolean useWvpAssist = wvpProxyConfig.getUseWvpAssist();
log.info("准备下载 deviceCode: {}, deviceId: {}, channelId:{}, ({}~{}) 历史视频, 通过 wvp-assist: {}", deviceCode, deviceId, channelId, startTime, endTime, useWvpAssist);
if(useWvpAssist){
try{
downloadFromWvpAssist(response, token, deviceCode, deviceId, channelId, startTime, endTime);
} catch (Exception e){
log.warn("尝试通过 wvp-assist 下载视频失败, 尝试通过 视频回放 拉取视频");
downloadFromPlayback(response, token, deviceId, channelId, startTime, endTime);
}
} else {
downloadFromPlayback(response, token, deviceId, channelId, startTime, endTime);
}
return login;
}
private void downloadFromWvpAssist(HttpServletResponse response, String token, String deviceCode, String deviceId, String channelId, String startTime, String endTime){
JsonResponse<String> videoPathResponse = downloadFromWvpAssist(deviceCode, deviceId, channelId, startTime, endTime, token);
String videoUrl = videoPathResponse.getData();
log.info("设备(deviceCode {}) (deviceId {}, channel{}) ({} ~ {}) 视频下载地址 {}", deviceCode, deviceId, channelId, startTime, endTime, videoUrl);
downloadService.download(response, videoUrl);
}
@SneakyThrows
private void downloadFromPlayback(HttpServletResponse response, String token, String deviceId, String channelId, String startTime, String endTime){
Retryer<JsonResponse<StreamContent>> playBackRetryer = RetryUtil.getDefaultRetryer("通过回放获取实时视频流下载");
JsonResponse<StreamContent> videoStreamResponse = playBackRetryer.call(() -> wvpProxyClient.playbackStart(token, deviceId, channelId, new GeneralTimeReq(startTime, endTime)));
StreamContent streamContent = videoStreamResponse.getData();
String stream = streamContent.getStream();
String streamUrl = streamContent.getFlv();
try {
recordService.header(response);
recordService.record(response, streamUrl, DateUtil.between(DateUtil.parseDateTime(startTime), DateUtil.parseDateTime(endTime), DateUnit.SECOND));
} finally {
wvpProxyClient.playbackStop(token, deviceId, channelId, stream);
}
}
@SuppressWarnings("UnstableApiUsage")
@SneakyThrows
private JsonResponse<String> downloadFromWvpAssist(String deviceCode, String deviceId, String channelId, String startTime, String endTime, String token) {

View File

@ -47,3 +47,4 @@ proxy:
url: http://192.168.1.241:18978
user: admin
passwd: admin
use-wvp-assist: false