From 4fc4d3a863d0551eff1875f3a4cf5f433d4e9598 Mon Sep 17 00:00:00 2001 From: shikong <919411476@qq.com> Date: Mon, 9 Oct 2023 14:52:36 +0800 Subject: [PATCH] =?UTF-8?q?/video=20=E6=94=AF=E6=8C=81=E6=9F=90=E4=BA=9B?= =?UTF-8?q?=E7=89=B9=E6=AE=8A=E6=83=85=E5=86=B5=E4=B8=8B=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=20=E5=AE=9E=E6=97=B6=E5=9B=9E=E6=94=BE=20=E4=BB=A3=E6=9B=BF?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docking/gb28181/wvp/config/ProxySipConfig.java | 5 +++++ .../wvp/service/ffmpeg/FfmpegSupportService.java | 13 +++++++++++++ .../gb28181/wvp/service/video/VideoService.java | 14 ++++++++++++-- .../src/main/resources/application-local.yml | 1 + .../src/main/resources/application.yml | 1 + 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/config/ProxySipConfig.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/config/ProxySipConfig.java index e39a618..10d11eb 100644 --- a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/config/ProxySipConfig.java +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/config/ProxySipConfig.java @@ -32,6 +32,11 @@ public class ProxySipConfig { private StreamMode streamMode = StreamMode.TCP_PASSIVE; + /** + * 某些特殊情况下 使用 视频回放点播 代替 下载 + */ + private boolean usePlaybackToDownload = false; + @Bean public SipConfig sipConfig(){ SipConfig sipConfig = new SipConfig(); 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 46ee48a..18ec126 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 @@ -30,6 +30,19 @@ public class FfmpegSupportService { return ffmpegExecutor(inputParam, outputParam, time, unit, streamHandler, executeResultHandler); } + @SneakyThrows + public Executor playbackToStream(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); + log.info("视频输入参数 {}", inputParam); + + String outputParam = debug.getOutput() ? rtp.getOutput() : StringUtils.joinWith(" ", rtp.getOutput(), "-"); + log.info("视频输出参数 {}", outputParam); + + return ffmpegExecutor(inputParam, outputParam, time, unit, streamHandler, executeResultHandler); + } + @SneakyThrows public Executor ffmpegExecutor(String inputParam,String outputParam, long time, TimeUnit unit,ExecuteStreamHandler streamHandler,ExecuteResultHandler executeResultHandler){ FfmpegConfig.Rtp rtp = ffmpegConfig.getRtp(); 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 4931ecb..2d336ed 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 @@ -238,7 +238,12 @@ public class VideoService { PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream, errorStream); DefaultExecuteResultHandler executeResultHandler = mediaStatus(device,callId); DateTime startTime = DateUtil.date(); - Executor executor = ffmpegSupportService.downloadToStream(url, time, TimeUnit.SECONDS,streamHandler,executeResultHandler); + Executor executor; + if(proxySipConfig.isUsePlaybackToDownload()){ + executor = ffmpegSupportService.playbackToStream(url, time, TimeUnit.SECONDS,streamHandler,executeResultHandler); + } else { + executor = ffmpegSupportService.downloadToStream(url, time, TimeUnit.SECONDS,streamHandler,executeResultHandler); + } log.info("开始录制 {}", url); ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); ScheduledFuture schedule = scheduledExecutorService.schedule(() -> { @@ -265,7 +270,12 @@ public class VideoService { PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream, errorStream); DefaultExecuteResultHandler defaultExecuteResultHandler = new DefaultExecuteResultHandler(); DateTime startTime = DateUtil.date(); - Executor executor = ffmpegSupportService.downloadToStream(url, time, TimeUnit.SECONDS,streamHandler,defaultExecuteResultHandler); + Executor executor; + if(proxySipConfig.isUsePlaybackToDownload()){ + executor = ffmpegSupportService.playbackToStream(url, time, TimeUnit.SECONDS,streamHandler,defaultExecuteResultHandler); + } else { + executor = ffmpegSupportService.downloadToStream(url, time, TimeUnit.SECONDS,streamHandler,defaultExecuteResultHandler); + } log.info("开始录制 {}", url); ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); ScheduledFuture schedule = scheduledExecutorService.schedule(() -> { 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 b136ac8..36d4192 100644 --- a/gb28181-wvp-proxy-starter/src/main/resources/application-local.yml +++ b/gb28181-wvp-proxy-starter/src/main/resources/application-local.yml @@ -57,6 +57,7 @@ proxy: ip: - 10.10.10.20 stream-mode: tcp_passive + use-playback-to-download: false # - 192.168.1.241 ffmpeg-support: ffmpeg: D:\Soft\Captura\ffmpeg\ffmpeg.exe diff --git a/gb28181-wvp-proxy-starter/src/main/resources/application.yml b/gb28181-wvp-proxy-starter/src/main/resources/application.yml index 5db37de..ccffa1c 100644 --- a/gb28181-wvp-proxy-starter/src/main/resources/application.yml +++ b/gb28181-wvp-proxy-starter/src/main/resources/application.yml @@ -65,6 +65,7 @@ proxy: # - 192.168.3.10 # - 192.168.1.241 stream-mode: tcp_passive + use-playback-to-download: true ffmpeg-support: ffmpeg: /usr/bin/ffmpeg/ffmpeg