kindring 1 жил өмнө
parent
commit
c7cd8979cf

+ 1 - 0
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java

@@ -133,6 +133,7 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In
 				storager.stopPlay(device.getDeviceId(), channelId);
 				StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(device.getDeviceId(), channelId);
 				if (streamInfo != null) {
+					logger.info("[尝试关闭推流] 可能是设备主动停止推流 {}", device.getDeviceId());
 					redisCatchStorage.stopPlay(streamInfo);
 					mediaServerService.closeRTPServer(streamInfo.getMediaServerId(), streamInfo.getStream());
 				}

+ 1 - 1
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java

@@ -97,7 +97,7 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen
             Device device = deviceService.getDevice(deviceId);
 
             // 获取对应的sip配置
-            logger.info("[sip 注册信息] host" + uri.getHost());
+            logger.info("[sip 注册信息] realm" + uri.getHost());
             SipUserConfig sipUserConfig = sipConfigService.getSipConfigByDomain(uri.getHost());
             if (sipUserConfig == null || !sipUserConfig.isEnableFlag()) {
                 logger.error("[sip注册] 不受支持的sip域, 回复404: {}", uri.getHost());

+ 3 - 4
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java

@@ -116,7 +116,7 @@ public class ZLMHttpHookListener {
     @PostMapping(value = "/on_server_keepalive", produces = "application/json;charset=UTF-8")
     public HookResult onServerKeepalive(@RequestBody OnServerKeepaliveHookParam param) {
 
-//        logger.info("[ZLM HOOK] 收到zlm心跳:" + param.getMediaServerId());
+        logger.info("[ZLM HOOK] 收到zlm心跳:" + param.getMediaServerId());
 
         taskExecutor.execute(() -> {
             List<ZlmHttpHookSubscribe.Event> subscribes = this.subscribe.getSubscribes(HookType.on_server_keepalive);
@@ -139,9 +139,7 @@ public class ZLMHttpHookListener {
     
     @PostMapping(value = "/on_play", produces = "application/json;charset=UTF-8")
     public HookResult onPlay(@RequestBody OnPlayHookParam param) {
-        if (logger.isDebugEnabled()) {
-            logger.debug("[ZLM HOOK] 播放鉴权:{}->{}" + param.getMediaServerId(), param);
-        }
+        logger.info("[ZLM HOOK] 播放鉴权:{}->{}" + param.getMediaServerId(), param);
         String mediaServerId = param.getMediaServerId();
 
         taskExecutor.execute(() -> {
@@ -248,6 +246,7 @@ public class ZLMHttpHookListener {
 //            }
             //
             result.setEnable_audio(true);
+            result.setAdd_mute_audio(true);
             // 如果是录像下载就设置视频间隔十秒
             if (ssrcTransactionForAll.get(0).getType() == VideoStreamSessionManager.SessionType.download) {
                 result.setMp4_max_second(10);

+ 4 - 4
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java

@@ -75,10 +75,10 @@ public class ZLMRTPServerFactory {
 
         if (openRtpServerResultJson != null) {
             if (openRtpServerResultJson.getInteger("code") == 0) {
-                result= openRtpServerResultJson.getInteger("port");
-                Map<String, Object> closeRtpServerParam = new HashMap<>();
-                closeRtpServerParam.put("stream_id", stream);
-                zlmresTfulUtils.closeRtpServer(mediaServerItem, closeRtpServerParam);
+                result = openRtpServerResultJson.getInteger("port");
+                Map<String, Object> postParam = new HashMap<>();
+                postParam.put("stream_id", stream);
+                zlmresTfulUtils.closeRtpServer(mediaServerItem, postParam);
             }else {
                 usedFreelist.add(startPort);
                 startPort +=2;

+ 14 - 2
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/hook/HookResultForOnPublish.java

@@ -1,15 +1,19 @@
 package com.genersoft.iot.vmp.media.zlm.dto.hook;
 
-public class HookResultForOnPublish extends HookResult{
+public class HookResultForOnPublish extends HookResult {
 
     private boolean enable_audio;
     private boolean enable_mp4;
+
+    // 转协议时,无音频是否添加静音aac音频
+    private boolean add_mute_audio;
     private int mp4_max_second;
 
+
     public HookResultForOnPublish() {
     }
 
-    public static HookResultForOnPublish SUCCESS(){
+    public static HookResultForOnPublish SUCCESS() {
         return new HookResultForOnPublish(0, "success");
     }
 
@@ -41,4 +45,12 @@ public class HookResultForOnPublish extends HookResult{
     public void setMp4_max_second(int mp4_max_second) {
         this.mp4_max_second = mp4_max_second;
     }
+
+    public boolean isAdd_mute_audio() {
+        return add_mute_audio;
+    }
+
+    public void setAdd_mute_audio(boolean add_mute_audio) {
+        this.add_mute_audio = add_mute_audio;
+    }
 }

+ 1 - 4
src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java

@@ -51,9 +51,7 @@ public interface IMediaServerService {
 
     SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, String ssrc, boolean ssrcCheck, boolean isPlayback, Integer port);
 
-    void closeRTPServer(MediaServerItem mediaServerItem, String streamId);
-
-    void closeRTPServer(String mediaServerId, String streamId);
+    boolean closeRTPServer(String mediaServerId, String streamId);
 
     void clearRTPServer(MediaServerItem mediaServerItem);
 
@@ -75,7 +73,6 @@ public interface IMediaServerService {
      */
     SSRCInfo startSendRtpServer(MediaServerItem mediaServerItem,String app, String streamId,String audioStreamId,String addr,String port,String ssrc,int waitTime);
 
-    void closeSendRtpServer(MediaServerItem mediaServerItem, String streamId);
 
     void update(MediaServerItem mediaSerItem);
 

+ 7 - 22
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java

@@ -224,29 +224,14 @@ public class MediaServerServiceImpl implements IMediaServerService {
     }
 
 
-
-    @Override
-    public void closeSendRtpServer(MediaServerItem mediaServerItem, String streamId){
-        if (mediaServerItem == null) {
-            return;
-        }
-        zlmrtpServerFactory.closeRtpServer(mediaServerItem, streamId);
-        releaseSsrc(mediaServerItem.getId(), streamId);
-    }
-
-    @Override
-    public void closeRTPServer(MediaServerItem mediaServerItem, String streamId) {
+    public boolean closeRTPServer(String mediaServerId, String streamId) {
+        logger.info("[关闭rtp server], mediaServerId:{} streamId:{}", mediaServerId, streamId);
+        MediaServerItem mediaServerItem = this.getOne(mediaServerId);
         if (mediaServerItem == null) {
-            return;
+            logger.error("[关闭rtp server 失败] !!!mediaServerId 错误:", mediaServerId);
+            return false;
         }
-        zlmrtpServerFactory.closeRtpServer(mediaServerItem, streamId);
-    }
-
-    @Override
-    public void closeRTPServer(String mediaServerId, String streamId) {
-        logger.info("[关闭rtp server], mediaServerId:", mediaServerId);
-        MediaServerItem mediaServerItem = this.getOne(mediaServerId);
-        closeRTPServer(mediaServerItem, streamId);
+        return zlmrtpServerFactory.closeRtpServer(mediaServerItem, streamId);
     }
 
     @Override
@@ -770,7 +755,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
             // 缓存不存在,从数据库查询,如果数据库不存在则是错误的
             mediaServerItem = getOneFromDatabase(mediaServerId);
             if (mediaServerItem == null) {
-                logger.warn("[更新ZLM 保活信息] 服务({})获取失败,未找到流媒体信息", mediaServerId);
+                logger.warn("[更新ZLM 保活信息] 流媒体服务({})获取失败,未找到流媒体信息", mediaServerId);
                 return;
             }
             // zlm连接重试

+ 8 - 9
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java

@@ -278,9 +278,8 @@ public class PlayServiceImpl implements IPlayService {
                 } finally {
                     timeoutCallback.run(1, "收流超时");
                     mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
-                    mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
+                    mediaServerService.closeRTPServer(mediaServerItem.getId(), ssrcInfo.getStream());
                     streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
-                    mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
                     // 取消订阅消息监听
                     HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, "rtsp", mediaServerItem.getId());
                     subscribe.removeSubscribe(hookSubscribe);
@@ -361,7 +360,7 @@ public class PlayServiceImpl implements IPlayService {
                                     });
                                 }
                                 // 关闭rtp server
-                                mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
+                                mediaServerService.closeRTPServer(mediaServerItem.getId(), ssrcInfo.getStream());
                                 // 重新开启ssrc server
                                 mediaServerService.openRTPServer(mediaServerItem, ssrcInfo.getStream(), ssrcInResponse, device.isSsrcCheck(), false, ssrcInfo.getPort());
 
@@ -370,7 +369,7 @@ public class PlayServiceImpl implements IPlayService {
                     }
                     , (errEvent) -> {
                         dynamicTask.stop(timeOutTaskKey);
-                        mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
+                        mediaServerService.closeRTPServer(mediaServerItem.getId(), ssrcInfo.getStream());
                         // 释放ssrc
                         mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
 
@@ -381,7 +380,7 @@ public class PlayServiceImpl implements IPlayService {
 
             logger.error("[命令发送失败] 点播消息: {}", e.getMessage());
             dynamicTask.stop(timeOutTaskKey);
-            mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
+            mediaServerService.closeRTPServer(mediaServerItem.getId(), ssrcInfo.getStream());
             // 释放ssrc
             mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
 
@@ -784,7 +783,7 @@ public class PlayServiceImpl implements IPlayService {
             } catch (SsrcTransactionNotFoundException e) {
                 // 点播超时回复BYE 同时释放ssrc以及此次点播的资源
                 mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
-                mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
+                mediaServerService.closeRTPServer(mediaServerItem.getId(), ssrcInfo.getStream());
                 streamSession.remove(deviceId, channelId, ssrcInfo.getStream());
             }
             // 回复之前所有的点播请求
@@ -866,7 +865,7 @@ public class PlayServiceImpl implements IPlayService {
                                         });
                                     }
                                     // 关闭rtp server
-                                    mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
+                                    mediaServerService.closeRTPServer(mediaServerItem.getId(), ssrcInfo.getStream());
                                     // 重新开启ssrc server
                                     mediaServerService.openRTPServer(mediaServerItem, ssrcInfo.getStream(), ssrcInResponse, device.isSsrcCheck(), true, ssrcInfo.getPort());
                                 }
@@ -931,7 +930,7 @@ public class PlayServiceImpl implements IPlayService {
                 logger.error("[录像流]录像下载请求超时, 发送BYE失败 {}", e.getMessage());
             } catch (SsrcTransactionNotFoundException e) {
                 mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
-                mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
+                mediaServerService.closeRTPServer(mediaServerItem.getId(), ssrcInfo.getStream());
                 streamSession.remove(deviceId, channelId, ssrcInfo.getStream());
             }
         }, userSetting.getPlayTimeout());
@@ -1005,7 +1004,7 @@ public class PlayServiceImpl implements IPlayService {
                                         });
                                     }
                                     // 关闭rtp server
-                                    mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
+                                    mediaServerService.closeRTPServer(mediaServerItem.getId(), ssrcInfo.getStream());
                                     // 重新开启ssrc server
                                     mediaServerService.openRTPServer(mediaServerItem, ssrcInfo.getStream(), ssrcInResponse, device.isSsrcCheck(), true, ssrcInfo.getPort());
                                 }

+ 8 - 6
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/aiLib/AiControl.java

@@ -177,18 +177,20 @@ public class AiControl {
                 upload6 = bodyAiAlarm.getUpload6(),
                 upload7 = bodyAiAlarm.getUpload7();
 
-        logger.debug("上报ai识别接口调用 body:{}",bodyAiAlarm);
-        logger.debug("上报ai识别接口调用 items:{}",results_recoInfos);
-        logger.info("test upload{},upload0{}",upload,upload0);
+        logger.debug("上报ai识别接口调用 body:{}", bodyAiAlarm);
+        logger.debug("上报ai识别接口调用 items:{}", results_recoInfos);
+        logger.info("test upload{},upload0{}", upload, upload0);
         WVPResult result = new WVPResult<>();
         // 处理上传文件参数,合并 不同upload字段下的 file 文件
         List<MultipartFile> uploads = new ArrayList<>();
         hbUploads(upload, upload0, upload1, upload2, uploads);
         hbUploads(upload3, upload4, upload5, upload6, uploads);
-        if(upload7!=null&&!upload7.isEmpty()){ uploads.add(upload7); }
-        if (deviceId==null||deviceId.isEmpty() || deviceId==""){
+        if (upload7 != null && !upload7.isEmpty()) {
+            uploads.add(upload7);
+        }
+        if (deviceId == null || deviceId.isEmpty() || deviceId == "") {
             logger.warn("没有设备id");
-            return WVPResult.fail(ErrorCode.ERROR400.getCode(),"没有设备id");
+            return WVPResult.fail(ErrorCode.ERROR400.getCode(), "没有设备id");
         }
         channelId = (channelId==null||channelId.isEmpty())?"":channelId;
         if(uploads.size() == 0){