From 01ecb07a2fac4ed96a318280bca88f3b9689500c Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 15 十二月 2023 17:54:56 +0800
Subject: [PATCH] Merge branch 'wvp-28181-record' into feature/record

---
 src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java |  107 ++++++++++++++---------------------------------------
 1 files changed, 28 insertions(+), 79 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
index 1e8dee7..2d94f30 100755
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -32,6 +32,7 @@
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
 import com.genersoft.iot.vmp.storager.dao.CloudRecordServiceMapper;
+import com.genersoft.iot.vmp.utils.CloudRecordUtils;
 import com.genersoft.iot.vmp.utils.DateUtil;
 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
 import gov.nist.javax.sip.message.SIPResponse;
@@ -49,9 +50,11 @@
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.ParseException;
+import java.time.Instant;
 import java.util.List;
 import java.util.UUID;
 import java.util.Vector;
+import java.util.concurrent.TimeUnit;
 
 @SuppressWarnings(value = {"rawtypes", "unchecked"})
 @Service
@@ -718,6 +721,28 @@
                         // 澶勭悊鏀跺埌200ok鍚庣殑TCP涓诲姩杩炴帴浠ュ強SSRC涓嶄竴鑷寸殑闂
                         InviteOKHandler(eventResult, ssrcInfo, mediaServerItem, device, channelId,
                                 downLoadTimeOutTaskKey, callback, inviteInfo, InviteSessionType.DOWNLOAD);
+
+                        // 娉ㄥ唽褰曞儚鍥炶皟浜嬩欢锛屽綍鍍忎笅杞界粨鏉熷悗鍐欏叆涓嬭浇鍦板潃
+                        ZlmHttpHookSubscribe.Event hookEventForRecord = (mediaServerItemInuse, hookParam) -> {
+                            logger.info("[褰曞儚涓嬭浇] 鏀跺埌褰曞儚鍐欏叆纾佺洏娑堟伅锛� 锛� {}/{}-{}",
+                                    inviteInfo.getDeviceId(), inviteInfo.getChannelId(), ssrcInfo.getStream());
+                            logger.info("[褰曞儚涓嬭浇] 鏀跺埌褰曞儚鍐欏叆纾佺洏娑堟伅鍐呭锛� " + hookParam);
+                            OnRecordMp4HookParam recordMp4HookParam = (OnRecordMp4HookParam)hookParam;
+                            String filePath = recordMp4HookParam.getFile_path();
+                            DownloadFileInfo downloadFileInfo = CloudRecordUtils.getDownloadFilePath(mediaServerItem, filePath);
+                            InviteInfo inviteInfoForNew = inviteStreamService.getInviteInfo(inviteInfo.getType(), inviteInfo.getDeviceId()
+                                    , inviteInfo.getChannelId(), inviteInfo.getStream());
+                            inviteInfoForNew.getStreamInfo().setDownLoadFilePath(downloadFileInfo);
+                            inviteStreamService.updateInviteInfo(inviteInfoForNew);
+                        };
+                        HookSubscribeForRecordMp4 hookSubscribe = HookSubscribeFactory.on_record_mp4(
+                                mediaServerItem.getId(), "rtp", ssrcInfo.getStream());
+
+                        // 璁剧疆杩囨湡鏃堕棿锛屼笅杞藉け璐ユ椂鑷姩澶勭悊璁㈤槄鏁版嵁
+//                        long difference = DateUtil.getDifference(startTime, endTime)/1000;
+//                        Instant expiresInstant = Instant.now().plusSeconds(TimeUnit.MINUTES.toSeconds(difference * 2));
+//                        hookSubscribe.setExpires(expiresInstant);
+                        subscribe.addSubscribe(hookSubscribe, hookEventForRecord);
                     });
         } catch (InvalidArgumentException | SipException | ParseException e) {
             logger.error("[鍛戒护鍙戦�佸け璐 褰曞儚涓嬭浇: {}", e.getMessage());
@@ -791,89 +816,13 @@
             BigDecimal totalCount = new BigDecimal((end - start) * 1000);
             BigDecimal divide = currentCount.divide(totalCount, 2, RoundingMode.HALF_UP);
             double process = divide.doubleValue();
+            if (process > 0.999) {
+                process = 1.0;
+            }
             inviteInfo.getStreamInfo().setProgress(process);
         }
         inviteStreamService.updateInviteInfo(inviteInfo);
         return inviteInfo.getStreamInfo();
-    }
-
-    @Override
-    public void getFilePath(String deviceId, String channelId, String stream, ErrorCallback<DownloadFileInfo> callback) {
-        InviteInfo inviteInfo = inviteStreamService.getInviteInfo(InviteSessionType.DOWNLOAD, deviceId, channelId, stream);
-        if (inviteInfo == null || inviteInfo.getStreamInfo() == null) {
-            logger.warn("[鑾峰彇褰曞儚涓嬭浇鏂囦欢鍦板潃] 鏈煡璇㈠埌褰曞儚涓嬭浇鐨勪俊鎭紝 {}/{}-{}", deviceId, channelId, stream);
-            callback.run(ErrorCode.ERROR100.getCode(), "鏈煡璇㈠埌褰曞儚涓嬭浇鐨勪俊鎭�", null);
-            return ;
-        }
-
-        if (!ObjectUtils.isEmpty(inviteInfo.getStreamInfo().getDownLoadFilePath())) {
-            callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(),
-                    inviteInfo.getStreamInfo().getDownLoadFilePath());
-            return;
-        }
-
-        StreamAuthorityInfo streamAuthorityInfo = redisCatchStorage.getStreamAuthorityInfo("rtp", stream);
-        if (streamAuthorityInfo == null) {
-            logger.warn("[鑾峰彇褰曞儚涓嬭浇鏂囦欢鍦板潃] 鏈煡璇㈠埌褰曞儚鐨勮棰戜俊鎭紝 {}/{}-{}", deviceId, channelId, stream);
-            callback.run(ErrorCode.ERROR100.getCode(), "鏈煡璇㈠埌褰曞儚鐨勮棰戜俊鎭�", null);
-            return ;
-        }
-
-        // 鑾峰彇褰撳墠宸蹭笅杞芥椂闀�
-        String mediaServerId = inviteInfo.getStreamInfo().getMediaServerId();
-        MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
-        if (mediaServerItem == null) {
-            logger.warn("[鑾峰彇褰曞儚涓嬭浇鏂囦欢鍦板潃] 鏌ヨ褰曞儚淇℃伅鏃跺彂鐜拌妭鐐逛笉瀛樺湪锛� {}/{}-{}", deviceId, channelId, stream);
-            callback.run(ErrorCode.ERROR100.getCode(), "鏌ヨ褰曞儚淇℃伅鏃跺彂鐜拌妭鐐逛笉瀛樺湪", null);
-            return ;
-        }
-
-        List<CloudRecordItem> cloudRecordItemList =  cloudRecordServiceMapper.getListByCallId(streamAuthorityInfo.getCallId());
-        if (!cloudRecordItemList.isEmpty()) {
-            String filePath = cloudRecordItemList.get(0).getFilePath();
-
-            DownloadFileInfo downloadFileInfo = getDownloadFilePath(mediaServerItem, filePath);
-            inviteInfo.getStreamInfo().setDownLoadFilePath(downloadFileInfo);
-            inviteStreamService.updateInviteInfo(inviteInfo);
-            callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), downloadFileInfo);
-        }else {
-            // 鍙兘灏氭湭鐢熸垚锛岄偅灏辩洃鍚琱ook绛夌潃鏀跺埌瀵瑰簲鐨勫綍鍍忛�氱煡
-            ZlmHttpHookSubscribe.Event hookEvent = (mediaServerItemInuse, hookParam) -> {
-                logger.info("[褰曞儚涓嬭浇]鏀跺埌璁㈤槄娑堟伅锛� 锛� {}/{}-{}", deviceId, channelId, stream);
-                logger.info("[褰曞儚涓嬭浇]鏀跺埌璁㈤槄娑堟伅鍐呭锛� " + hookParam);
-                dynamicTask.stop(streamAuthorityInfo.getCallId());
-                OnRecordMp4HookParam recordMp4HookParam = (OnRecordMp4HookParam)hookParam;
-                String filePath = recordMp4HookParam.getFile_path();
-                DownloadFileInfo downloadFileInfo = getDownloadFilePath(mediaServerItem, filePath);
-                inviteInfo.getStreamInfo().setDownLoadFilePath(downloadFileInfo);
-                inviteStreamService.updateInviteInfo(inviteInfo);
-                callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), downloadFileInfo);
-            };
-            HookSubscribeForRecordMp4 hookSubscribe = HookSubscribeFactory.on_record_mp4(mediaServerId, "rtp", stream);
-            subscribe.addSubscribe(hookSubscribe, hookEvent);
-
-            // 璁剧疆瓒呮椂锛岃秴鏃剁粨鏉熺洃鍚�
-            dynamicTask.startDelay(streamAuthorityInfo.getCallId(), ()->{
-                logger.info("[褰曞儚涓嬭浇] 鎺ユ敹hook瓒呮椂锛� {}/{}-{}", deviceId, channelId, stream);
-                subscribe.removeSubscribe(hookSubscribe);
-                callback.run(ErrorCode.ERROR100.getCode(), "鎺ユ敹hook瓒呮椂", null);
-            }, 10000);
-        }
-    }
-
-    private DownloadFileInfo getDownloadFilePath(MediaServerItem mediaServerItem, String filePath) {
-        DownloadFileInfo downloadFileInfo = new DownloadFileInfo();
-
-        String pathTemplate = "%s://%s:%s/index/api/downloadFile?file_path=" + filePath;
-
-        downloadFileInfo.setHttpPath(String.format(pathTemplate, "http", mediaServerItem.getStreamIp(),
-                mediaServerItem.getHttpPort()));
-
-        if (mediaServerItem.getHttpSSlPort() > 0) {
-            downloadFileInfo.setHttpsPath(String.format(pathTemplate, "https", mediaServerItem.getStreamIp(),
-                    mediaServerItem.getHttpSSlPort()));
-        }
-        return downloadFileInfo;
     }
 
     private StreamInfo onPublishHandlerForDownload(MediaServerItem mediaServerItemInuse, HookParam hookParam, String deviceId, String channelId, String startTime, String endTime) {

--
Gitblit v1.8.0