648540858
2022-05-13 98e6cf5bae84ec7860c3da3a6e3228353ae9b385
优化海康录像下载
5个文件已修改
27 ■■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/MediaStatusNotifyMessageHandler.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_src/src/components/dialog/recordDownload.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java
@@ -66,7 +66,6 @@
        dynamicTask.stop(taskOverdueKey);
        // 添加任务处理订阅过期
        dynamicTask.startDelay(taskOverdueKey, () -> {
                    System.out.println("订阅过期");
                    removeMobilePositionSubscribe(subscribeInfo.getId());
                },
                subscribeInfo.getExpires() * 1000);
src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java
@@ -76,8 +76,8 @@
    }
    
    public ClientTransaction getTransactionByStream(String deviceId, String channelId, String stream){
        SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, null, stream);
    public ClientTransaction getTransaction(String deviceId, String channelId, String stream, String callId){
        SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, callId, stream);
        if (ssrcTransaction == null) {
            return null;
        }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -652,6 +652,14 @@
                    (MediaServerItem mediaServerItemInUse, JSONObject json)->{
                        hookEvent.call(new InviteStreamInfo(mediaServerItem, json, callIdHeader.getCallId(), "rtp", ssrcInfo.getStream()));
                        subscribe.removeSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey);
                        subscribeKey.put("regist", false);
                        subscribeKey.put("schema", "rtmp");
                        // 添加流注销的订阅,注销了后向设备发送bye
                        subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey,
                                (MediaServerItem mediaServerItemForEnd, JSONObject jsonForEnd)->{
                                    logger.info("[录像]下载结束, 发送BYE");
                                    streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), callIdHeader.getCallId());
                                });
                    });
            Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null, callIdHeader, ssrcInfo.getSsrc());
@@ -684,10 +692,10 @@
    @Override
    public void streamByeCmd(String deviceId, String channelId, String stream, String callId, SipSubscribe.Event okEvent) {
        try {
            SsrcTransaction ssrcTransaction = streamSession.getSsrcTransaction(deviceId, channelId, null, stream);
            ClientTransaction transaction = streamSession.getTransactionByStream(deviceId, channelId, stream);
            SsrcTransaction ssrcTransaction = streamSession.getSsrcTransaction(deviceId, channelId, callId, stream);
            ClientTransaction transaction = streamSession.getTransaction(deviceId, channelId, stream, callId);
            if (transaction == null) {
            if (transaction == null ) {
                logger.warn("[ {} -> {}]停止视频流的时候发现事务已丢失", deviceId, channelId);
                SipSubscribe.EventResult<Object> eventResult = new SipSubscribe.EventResult<>();
                if (okEvent != null) {
@@ -1664,6 +1672,7 @@
            sipSubscribe.addErrorSubscribe(callIdHeader.getCallId(), (eventResult -> {
                errorEvent.response(eventResult);
                sipSubscribe.removeErrorSubscribe(eventResult.callId);
                sipSubscribe.removeOkSubscribe(eventResult.callId);
            }));
        }
        // 添加订阅
@@ -1671,6 +1680,7 @@
            sipSubscribe.addOkSubscribe(callIdHeader.getCallId(), eventResult ->{
                okEvent.response(eventResult);
                sipSubscribe.removeOkSubscribe(eventResult.callId);
                sipSubscribe.removeErrorSubscribe(eventResult.callId);
            });
        }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/MediaStatusNotifyMessageHandler.java
@@ -60,10 +60,9 @@
        CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME);
        String NotifyType =getText(rootElement, "NotifyType");
        if (NotifyType.equals("121")){
            logger.info("媒体播放完毕,通知关流");
            logger.info("[录像流]推送完毕,收到关流通知");
            String channelId =getText(rootElement, "DeviceID");
//            redisCatchStorage.stopPlayback(device.getDeviceId(), channelId, null, callIdHeader.getCallId());
//            redisCatchStorage.stopDownload(device.getDeviceId(), channelId, null, callIdHeader.getCallId());
            // 查询是设备
            StreamInfo streamInfo = redisCatchStorage.queryDownload(device.getDeviceId(), channelId, null, callIdHeader.getCallId());
            // 设置进度100%
            streamInfo.setProgress(1);
web_src/src/components/dialog/recordDownload.vue
@@ -172,6 +172,7 @@
              isEnd: true,
            }
          }).then((res) => {
            console.log(res)
            if (res.data.code == 0) {
                this.percentage = parseFloat(res.data.data.percentage)*100
                 if (res.data.data[0].percentage === '1') {