diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/ffmpeg/FfmpegSupportService.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/ffmpeg/FfmpegSupportService.java index 9a4227b..46ee48a 100644 --- a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/ffmpeg/FfmpegSupportService.java +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/ffmpeg/FfmpegSupportService.java @@ -21,7 +21,7 @@ public class FfmpegSupportService { public Executor downloadToStream(String input, long time, TimeUnit unit, ExecuteStreamHandler streamHandler, ExecuteResultHandler executeResultHandler) { FfmpegConfig.Rtp rtp = ffmpegConfig.getRtp(); FfmpegConfig.Debug debug = ffmpegConfig.getDebug(); - String inputParam = debug.getInput() ? rtp.getInput() : StringUtils.joinWith(" ", rtp.getInput(), input); + String inputParam = debug.getDownload() ? rtp.getDownload() : StringUtils.joinWith(" ", rtp.getDownload(), input); log.info("视频输入参数 {}", inputParam); String outputParam = debug.getOutput() ? rtp.getOutput() : StringUtils.joinWith(" ", rtp.getOutput(), "-"); @@ -34,7 +34,7 @@ public class FfmpegSupportService { public Executor ffmpegExecutor(String inputParam,String outputParam, long time, TimeUnit unit,ExecuteStreamHandler streamHandler,ExecuteResultHandler executeResultHandler){ FfmpegConfig.Rtp rtp = ffmpegConfig.getRtp(); String logLevelParam = StringUtils.joinWith(" ","-loglevel", rtp.getLogLevel()); - String command = StringUtils.joinWith(" ", ffmpegConfig.getFfmpeg(), inputParam, outputParam, logLevelParam); + String command = StringUtils.joinWith(" ", ffmpegConfig.getFfmpeg(), logLevelParam, inputParam, outputParam); CommandLine commandLine = CommandLine.parse(command); log.info("{}", commandLine); Executor executor = new DefaultExecutor(); diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/gb28181/Gb28181DownloadService.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/gb28181/Gb28181DownloadService.java index 1f6914c..4ec35d5 100644 --- a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/gb28181/Gb28181DownloadService.java +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/gb28181/Gb28181DownloadService.java @@ -125,6 +125,7 @@ public class Gb28181DownloadService { @SneakyThrows public void video(HttpServletRequest request, HttpServletResponse response, String deviceCode, Date startTime, Date endTime, Boolean fileHeader) { AsyncContext asyncContext = request.startAsync(); + asyncContext.setTimeout(0); asyncContext.start(()->{ HttpServletResponse asyncResponse = (HttpServletResponse)asyncContext.getResponse(); try{ diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/video/VideoService.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/video/VideoService.java index 2bb1b4e..60d38a7 100644 --- a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/video/VideoService.java +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/video/VideoService.java @@ -1,5 +1,8 @@ package cn.skcks.docking.gb28181.wvp.service.video; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; import cn.skcks.docking.gb28181.wvp.config.WvpProxyConfig; import cn.skcks.docking.gb28181.wvp.service.ffmpeg.FfmpegSupportService; import jakarta.servlet.AsyncContext; @@ -160,6 +163,7 @@ public class VideoService { ByteArrayOutputStream errorStream = new ByteArrayOutputStream(); PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream, errorStream); DefaultExecuteResultHandler defaultExecuteResultHandler = new DefaultExecuteResultHandler(); + DateTime startTime = DateUtil.date(); Executor executor = ffmpegSupportService.downloadToStream(url, time, TimeUnit.SECONDS,streamHandler,defaultExecuteResultHandler); log.info("开始录制 {}", url); ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); @@ -169,6 +173,8 @@ public class VideoService { log.info("结束录制 {}", url); }, time, TimeUnit.SECONDS); defaultExecuteResultHandler.waitFor(); + DateTime endTime = DateUtil.date(); + log.info("录制进程结束 {}, 录制耗时: {}", url, DateUtil.between(startTime,endTime, DateUnit.SECOND)); if(errorStream.size() > 0){ log.error("{}", errorStream); } diff --git a/gb28181-wvp-proxy-starter/src/main/resources/application-local.yml b/gb28181-wvp-proxy-starter/src/main/resources/application-local.yml index b5c9926..3ca175b 100644 --- a/gb28181-wvp-proxy-starter/src/main/resources/application-local.yml +++ b/gb28181-wvp-proxy-starter/src/main/resources/application-local.yml @@ -60,12 +60,13 @@ proxy: ffmpeg-support: task: max: 4 - ffmpeg: C:\ffmpeg\bin\ffmpeg.exe + ffmpeg: D:\Soft\Captura\ffmpeg\ffmpeg.exe ffprobe: D:\Soft\Captura\ffmpeg\ffprobe.exe rtp: # input: -i http://10.10.10.200:5080/live/test.live.flv input: -re -i - output: -vcodec copy -acodec copy -movflags empty_moov+frag_keyframe+default_base_moof -f mp4 # -rtsp_transport tcp + output: -preset ultrafast -tune zerolatency -vcodec libx264 -acodec aac -movflags empty_moov+frag_keyframe+default_base_moof -f mp4 # -rtsp_transport tcp + download: -thread_queue_size 128 -i debug: download: false input: false diff --git a/gb28181-wvp-proxy-starter/src/main/resources/application.yml b/gb28181-wvp-proxy-starter/src/main/resources/application.yml index 532955f..71cfd8a 100644 --- a/gb28181-wvp-proxy-starter/src/main/resources/application.yml +++ b/gb28181-wvp-proxy-starter/src/main/resources/application.yml @@ -24,8 +24,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: @@ -73,7 +73,8 @@ ffmpeg-support: ffprobe: /usr/bin/ffmpeg/ffprobe rtp: input: -i - output: -vcodec h264 -acodec aac -movflags empty_moov+frag_keyframe+default_base_moof -f mp4 # -rtsp_transport tcp + output: -preset ultrafast -tune zerolatency -vcodec libx264 -acodec aac -movflags empty_moov+frag_keyframe+default_base_moof -f mp4 # -rtsp_transport tcp + download: -thread_queue_size 128 -i debug: download: false input: false