From 92e5ed2e30126afc320ddf458c2653c4d41ef61d Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期三, 06 十二月 2023 16:10:32 +0800
Subject: [PATCH] 优化前端云端录像的播放

---
 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java |   48 +++++++++++++++++++++++++++---------------------
 1 files changed, 27 insertions(+), 21 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
index 9bff21f..67fea3e 100755
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -275,7 +275,7 @@
         List<SsrcTransaction> ssrcTransactionForAll = sessionManager.getSsrcTransactionForAll(null, null, null, param.getStream());
         if (ssrcTransactionForAll != null && ssrcTransactionForAll.size() == 1) {
 
-            // 涓哄綍鍒跺浗鏍囨ā鎷熶竴涓壌鏉冧俊鎭�
+            // 涓哄綍鍒跺浗鏍囨ā鎷熶竴涓壌鏉冧俊鎭�, 鏂逛究鍚庣画鍐欏叆褰曞儚鏂囦欢鏃朵娇鐢�
             StreamAuthorityInfo streamAuthorityInfo = StreamAuthorityInfo.getInstanceByHook(param);
             streamAuthorityInfo.setApp(param.getApp());
             streamAuthorityInfo.setStream(ssrcTransactionForAll.get(0).getStream());
@@ -291,26 +291,18 @@
             }
             // 濡傛灉鏄綍鍍忎笅杞藉氨璁剧疆瑙嗛闂撮殧鍗佺
             if (ssrcTransactionForAll.get(0).getType() == InviteSessionType.DOWNLOAD) {
-                result.setMp4_max_second(30);
-                result.setEnable_mp4(true);
-            }
-        }
-        if (mediaInfo.getRecordAssistPort() > 0 && userSetting.getRecordPath() == null) {
-            logger.info("鎺ㄦ祦鏃跺彂鐜板皻鏈缃綍鍍忚矾寰勶紝浠巃ssist鏈嶅姟涓鍙�");
-            JSONObject info = assistRESTfulUtils.getInfo(mediaInfo, null);
-            if (info != null && info.getInteger("code") != null && info.getInteger("code") == 0 ) {
-                JSONObject dataJson = info.getJSONObject("data");
-                if (dataJson != null) {
-                    String recordPath = dataJson.getString("record");
-                    userSetting.setRecordPath(recordPath);
-                    result.setMp4_save_path(recordPath);
-                    // 淇敼zlm涓殑褰曞儚璺緞
-                    if (mediaInfo.isAutoConfig()) {
-                        taskExecutor.execute(() -> {
-                            mediaServerService.setZLMConfig(mediaInfo, false);
-                        });
-                    }
+                // 鑾峰彇褰曞儚鐨勬�绘椂闀匡紝鐒跺悗璁剧疆涓鸿繖涓棰戠殑鏃堕暱
+                InviteInfo inviteInfo = inviteStreamService.getInviteInfo(InviteSessionType.DOWNLOAD, deviceId, channelId, param.getStream());
+                if (inviteInfo.getStreamInfo() != null ) {
+                    String startTime = inviteInfo.getStreamInfo().getStartTime();
+                    String endTime = inviteInfo.getStreamInfo().getEndTime();
+                    long difference = DateUtil.getDifference(startTime, endTime)/1000;
+                    result.setMp4_max_second((int)difference);
+                    result.setEnable_mp4(true);
+                    // 璁剧疆涓�2淇濊瘉寰楀埌鐨刴p4鐨勬椂闀挎槸姝e父鐨�
+                    result.setModify_stamp(2);
                 }
+
             }
         }
         if (param.getApp().equalsIgnoreCase("rtp")) {
@@ -410,6 +402,9 @@
                                     || param.getOriginType() == OriginType.RTC_PUSH.ordinal()) {
                                 param.setSeverId(userSetting.getServerId());
                                 zlmMediaListManager.addPush(param);
+
+                                // 鍐椾綑鏁版嵁锛岃嚜宸辩郴缁熶腑鑷敤
+                                redisCatchStorage.addPushListItem(param.getApp(), param.getStream(), param);
                             }
                         } else {
                             // 鍏煎娴佹敞閿�鏃剁被鍨嬩粠redis璁板綍鑾峰彇
@@ -418,6 +413,10 @@
                             if (onStreamChangedHookParam != null) {
                                 type = OriginType.values()[onStreamChangedHookParam.getOriginType()].getType();
                                 redisCatchStorage.removeStream(mediaInfo.getId(), type, param.getApp(), param.getStream());
+                                if ("PUSH".equalsIgnoreCase(type)) {
+                                    // 鍐椾綑鏁版嵁锛岃嚜宸辩郴缁熶腑鑷敤
+                                    redisCatchStorage.removePushListItem(param.getApp(), param.getStream(), param.getMediaServerId());
+                                }
                             }
                             GbStream gbStream = storager.getGbStream(param.getApp(), param.getStream());
                             if (gbStream != null) {
@@ -762,7 +761,7 @@
         taskExecutor.execute(() -> {
             JSONObject json = (JSONObject) JSON.toJSON(param);
             List<ZlmHttpHookSubscribe.Event> subscribes = this.subscribe.getSubscribes(HookType.on_rtp_server_timeout);
-            if (subscribes != null && subscribes.size() > 0) {
+            if (subscribes != null && !subscribes.isEmpty()) {
                 for (ZlmHttpHookSubscribe.Event subscribe : subscribes) {
                     subscribe.response(null, param);
                 }
@@ -781,7 +780,14 @@
         logger.info("[ZLM HOOK] 褰曞儚瀹屾垚浜嬩欢锛歿}->{}", param.getMediaServerId(), param.getFile_path());
 
         taskExecutor.execute(() -> {
+            List<ZlmHttpHookSubscribe.Event> subscribes = this.subscribe.getSubscribes(HookType.on_record_mp4);
+            if (subscribes != null && !subscribes.isEmpty()) {
+                for (ZlmHttpHookSubscribe.Event subscribe : subscribes) {
+                    subscribe.response(null, param);
+                }
+            }
             cloudRecordService.addRecord(param);
+
         });
 
         return HookResult.SUCCESS();

--
Gitblit v1.8.0