From 7e136c9ac7265bedfdb79b4bca465965486e0541 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期三, 06 十二月 2023 15:11:21 +0800 Subject: [PATCH] 完成下载文件的前后调试 --- src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java | 91 +++++++++++++-------------------------------- 1 files changed, 27 insertions(+), 64 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..7ca07ee 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 @@ -49,9 +49,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 +720,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 = 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,74 +815,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) { -- Gitblit v1.8.0