From 44ed06bcbe888acda42a6d4ebd1388286bbba6d6 Mon Sep 17 00:00:00 2001 From: lin <648540858@qq.com> Date: Tue, 15 Jul 2025 18:11:23 +0800 Subject: [PATCH] =?UTF-8?q?[1078]=20=E6=94=AF=E6=8C=81=E6=97=A0=E4=BA=BA?= =?UTF-8?q?=E8=A7=82=E7=9C=8B=E8=87=AA=E5=8A=A8=E5=81=9C=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/jt1078PlayServiceImpl.java | 5 ++-- .../service/impl/jt1078ServiceImpl.java | 9 ++---- .../vmp/media/abl/ABLHttpHookListener.java | 2 +- .../media/zlm/ZLMMediaNodeServerService.java | 4 +-- .../iot/vmp/media/zlm/ZLMServerFactory.java | 5 ++-- .../vmp/service/impl/MediaServiceImpl.java | 28 +++++++++---------- .../com/genersoft/iot/vmp/utils/DateUtil.java | 4 +++ 7 files changed, 29 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078PlayServiceImpl.java index cebdc1815..0c1b7bcce 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078PlayServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078PlayServiceImpl.java @@ -234,8 +234,6 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { return; } - - // 设置超时监听 dynamicTask.startDelay(playKey, () -> { log.info("[JT-点播] 超时, phoneNumber: {}, channelId: {}", phoneNumber, channelId); @@ -382,7 +380,8 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService { } String app = "1078"; - String stream = phoneNumber + "_" + channelId; + String stream = String.format("%s_%s_%s_%s", phoneNumber, channelId, + DateUtil.yyyy_MM_dd_HH_mm_ssToUrl(startTime), DateUtil.yyyy_MM_dd_HH_mm_ssToUrl(endTime)); MediaServer mediaServer = mediaServerService.getMediaServerForMinimumLoad(null); if (mediaServer == null) { for (CommonCallback> errorCallback : errorCallbacks) { diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java index 9c0b5eff8..13db1c2fa 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java @@ -100,15 +100,12 @@ public class jt1078ServiceImpl implements Ijt1078Service { */ @Override public JTMediaStreamType checkStreamFromJt(String stream) { - if (!stream.startsWith("jt_")) { - return null; - } String[] streamParamArray = stream.split("_"); - if (streamParamArray.length == 3) { + if (streamParamArray.length == 2) { return JTMediaStreamType.PLAY; - }else if (streamParamArray.length == 5) { - return JTMediaStreamType.PLAYBACK; }else if (streamParamArray.length == 4) { + return JTMediaStreamType.PLAYBACK; + }else if (streamParamArray.length == 5) { return JTMediaStreamType.TALK; }else { return null; diff --git a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLHttpHookListener.java index b1fb6f6fc..ade53797e 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLHttpHookListener.java +++ b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLHttpHookListener.java @@ -249,7 +249,7 @@ public class ABLHttpHookListener { @PostMapping(value = "/on_stream_none_reader", produces = "application/json;charset=UTF-8") public JSONObject onStreamNoneReader(@RequestBody ABLHookParam param) { - logger.info("[ZLM HOOK]流无人观看:{}->{}/{}", param.getMediaServerId(), + logger.info("[ABL HOOK]流无人观看:{}->{}/{}", param.getMediaServerId(), param.getApp(), param.getStream()); JSONObject ret = new JSONObject(); diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java index 98b706f45..c13543b46 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaNodeServerService.java @@ -38,7 +38,7 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService { @Override public int createRTPServer(MediaServer mediaServer, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode) { - return zlmServerFactory.createRTPServer(mediaServer, streamId, ssrc, port, onlyAuto, disableAudio, reUsePort, tcpMode); + return zlmServerFactory.createRTPServer(mediaServer, "rtp", streamId, ssrc, port, onlyAuto, disableAudio, reUsePort, tcpMode); } @Override @@ -48,7 +48,7 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService { @Override public int createJTTServer(MediaServer mediaServer, String streamId, Integer port, Boolean disableVideo, Boolean disableAudio, Integer tcpMode) { - return zlmServerFactory.createRTPServer(mediaServer, streamId, 0, port, disableVideo, disableAudio, false, tcpMode); + return zlmServerFactory.createRTPServer(mediaServer, "1078", streamId, 0, port, disableVideo, disableAudio, false, tcpMode); } @Override diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerFactory.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerFactory.java index 733146382..401b3f5b8 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerFactory.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMServerFactory.java @@ -28,7 +28,7 @@ public class ZLMServerFactory { * @param tcpMode 0/null udp 模式,1 tcp 被动模式, 2 tcp 主动模式。 * @return */ - public int createRTPServer(MediaServer mediaServerItem, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode) { + public int createRTPServer(MediaServer mediaServerItem, String app, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode) { int result = -1; // 查询此rtp server 是否已经存在 JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(mediaServerItem, streamId); @@ -43,7 +43,7 @@ public class ZLMServerFactory { JSONObject jsonObject = zlmresTfulUtils.closeRtpServer(mediaServerItem, param); if (jsonObject != null ) { if (jsonObject.getInteger("code") == 0) { - return createRTPServer(mediaServerItem, streamId, ssrc, port,onlyAuto, reUsePort,disableAudio, tcpMode); + return createRTPServer(mediaServerItem, streamId, app, ssrc, port,onlyAuto, reUsePort,disableAudio, tcpMode); }else { log.warn("[开启rtpServer], 重启RtpServer错误"); } @@ -61,6 +61,7 @@ public class ZLMServerFactory { tcpMode = 0; } param.put("tcp_mode", tcpMode); + param.put("app", app); param.put("stream_id", streamId); if (disableAudio != null) { param.put("only_track", disableAudio?2:0); diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java index 668ca25e9..d78e684af 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java @@ -251,21 +251,21 @@ public class MediaServiceImpl implements IMediaService { } } return result; - }else { - // 判断是否是1078点播 - JTMediaStreamType jtMediaStreamType = ijt1078Service.checkStreamFromJt(stream); - if (jtMediaStreamType != null) { - String[] streamParamArray = stream.split("_"); - if (jtMediaStreamType.equals(JTMediaStreamType.PLAY)) { - jt1078PlayService.stopPlay(streamParamArray[1], Integer.parseInt(streamParamArray[2])); - }else if (jtMediaStreamType.equals(JTMediaStreamType.PLAYBACK)) { - jt1078PlayService.stopPlayback(streamParamArray[1], Integer.parseInt(streamParamArray[2])); - } - }else { - return false; - } } - } else if ("talk".equals(app) || "broadcast".equals(app)) { + }else if ("1078".equals(app)) { + // 判断是否是1078播放类型 + JTMediaStreamType jtMediaStreamType = ijt1078Service.checkStreamFromJt(stream); + if (jtMediaStreamType != null) { + String[] streamParamArray = stream.split("_"); + if (jtMediaStreamType.equals(JTMediaStreamType.PLAY)) { + jt1078PlayService.stopPlay(streamParamArray[0], Integer.parseInt(streamParamArray[1])); + }else if (jtMediaStreamType.equals(JTMediaStreamType.PLAYBACK)) { + jt1078PlayService.stopPlayback(streamParamArray[0], Integer.parseInt(streamParamArray[1])); + } + }else { + return false; + } + }else if ("talk".equals(app) || "broadcast".equals(app)) { return false; } else { // 非国标流 推流/拉流代理 diff --git a/src/main/java/com/genersoft/iot/vmp/utils/DateUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/DateUtil.java index 5cd097e05..4d97d7ed9 100755 --- a/src/main/java/com/genersoft/iot/vmp/utils/DateUtil.java +++ b/src/main/java/com/genersoft/iot/vmp/utils/DateUtil.java @@ -75,6 +75,10 @@ public class DateUtil { return formatterISO8601.format(formatter.parse(formatTime)); } + public static String yyyy_MM_dd_HH_mm_ssToUrl(@NotNull String formatTime) { + return urlFormatter.format(formatter.parse(formatTime)); + } + public static String ISO8601Toyyyy_MM_dd_HH_mm_ss(String formatTime) { // 三种日期格式都尝试,为了兼容不同厂家的日期格式 if (verification(formatTime, formatterCompatibleISO8601)) {