From 84e0addf5392bb36f38cfffd1d6b473553ad192a Mon Sep 17 00:00:00 2001 From: shikong <919411476@qq.com> Date: Mon, 11 Sep 2023 09:42:41 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E4=BF=A1=E6=81=AF/=E5=AE=8C?= =?UTF-8?q?=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wvp/service/video/RecordService.java | 25 ++++++++++++++++--- .../src/main/resources/application.yml | 6 ++--- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/video/RecordService.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/video/RecordService.java index 4e23b8e..382af32 100644 --- a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/video/RecordService.java +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/video/RecordService.java @@ -25,6 +25,10 @@ import java.util.concurrent.atomic.AtomicBoolean; @Slf4j @Service public class RecordService { + /** + * 写入 flv 响应头信息 + * @param response HttpServletResponse 响应 + */ public void header(HttpServletResponse response) { response.setContentType("video/x-flv"); response.setHeader("Accept-Ranges", "none"); @@ -32,6 +36,13 @@ public class RecordService { response.setHeader("Content-Disposition","attachment; filename=\"record.flv\""); } + /** + * 录制视频 并写入 响应 + * @param request HttpServletRequest 请求 + * @param response HttpServletResponse 同步响应 + * @param url 要录制的视频地址 + * @param time 录制时长 (单位: 秒) + */ @SneakyThrows public void record(HttpServletRequest request, HttpServletResponse response, String url, long time) { AsyncContext asyncContext = request.startAsync(); @@ -47,11 +58,17 @@ public class RecordService { }); } + /** + * 录制视频 并写入 异步响应 + * @param response AsyncContext.getResponse 异步响应 + * @param url 要录制的视频地址 + * @param time 录制时长 (单位: 秒) + */ @SneakyThrows public void record(ServletResponse response, String url, long time) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); OutputStream outputStream = response.getOutputStream(); - log.info("url {}", url); + log.info("准备录制 url {}, time: {}", url, time); // FFmpeg 调试日志 // FFmpegLogCallback.set(); FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(url); @@ -78,12 +95,12 @@ public class RecordService { recorder.setFormat("flv"); recorder.setVideoOption("threads", String.valueOf(Runtime.getRuntime().availableProcessors())); // 解码线程数 recorder.start(grabber.getFormatContext()); - log.info("开始录像"); + log.info("开始录制 {}", url); ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); AtomicBoolean record = new AtomicBoolean(true); scheduledExecutorService.schedule(() -> { - log.info("到达结束时间, 结束录制"); + log.info("到达结束时间, 结束录制 {}", url); record.set(false); }, time, TimeUnit.SECONDS); try { @@ -103,7 +120,7 @@ public class RecordService { throw new RuntimeException(e); } catch (IOException ignore){} - log.info("结束录制"); + log.info("结束录制 {}", url); outputStream.close(); } } diff --git a/gb28181-wvp-proxy-starter/src/main/resources/application.yml b/gb28181-wvp-proxy-starter/src/main/resources/application.yml index 714280f..8a756fa 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: @@ -44,6 +44,6 @@ media: proxy: wvp: - url: http://192.168.3.13:18978 + url: http://192.168.1.241:18978 user: admin passwd: admin