648540858
2024-04-11 5c0183a422b83fe1fed69564201f583cb72d8276
修复无法下载较长时间时间录像的BUG
4个文件已修改
33 ■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEventListener.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/event/hook/Hook.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/event/hook/HookSubscribe.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEventListener.java
@@ -37,15 +37,14 @@
                event.getRecordInfo().getChannelId(), count,sumNum);
        if (!handlerMap.isEmpty()) {
            RecordEndEventHandler handler = handlerMap.get(deviceId + channelId);
            logger.info("录像查询完成事件触发, 发送订阅,deviceId:{}, channelId: {}",
                    event.getRecordInfo().getDeviceId(), event.getRecordInfo().getChannelId());
            if (handler !=null){
                handler.handler(event.getRecordInfo());
                if (count ==sumNum){
                    handlerMap.remove(deviceId + channelId);
                }
            }
        }else {
            logger.info("录像查询完成事件触发, 但是订阅为空,取消发送,deviceId:{}, channelId: {}",
                    event.getRecordInfo().getDeviceId(), event.getRecordInfo().getChannelId());
        }
    }
src/main/java/com/genersoft/iot/vmp/media/event/hook/Hook.java
@@ -14,7 +14,8 @@
    private String mediaServerId;
    private Long createTime;
    private Long expireTime;
    public static Hook getInstance(HookType hookType, String app, String stream, String mediaServerId) {
        Hook hookSubscribe = new Hook();
@@ -22,7 +23,7 @@
        hookSubscribe.setStream(stream);
        hookSubscribe.setHookType(hookType);
        hookSubscribe.setMediaServerId(mediaServerId);
        hookSubscribe.setCreateTime(System.currentTimeMillis());
        hookSubscribe.setExpireTime(System.currentTimeMillis() + 5 * 60 * 1000);
        return hookSubscribe;
    }
@@ -50,12 +51,13 @@
        this.stream = stream;
    }
    public Long getCreateTime() {
        return createTime;
    public Long getExpireTime() {
        return expireTime;
    }
    public void setCreateTime(Long createTime) {
        this.createTime = createTime;
    public void setExpireTime(Long expireTime) {
        this.expireTime = expireTime;
    }
    public String getMediaServerId() {
src/main/java/com/genersoft/iot/vmp/media/event/hook/HookSubscribe.java
@@ -58,7 +58,7 @@
        sendNotify(HookType.on_publish, event);
    }
    /**
     * 推流鉴权事件
     * 生成录像文件事件
     */
    @Async("taskExecutor")
    @EventListener
@@ -79,8 +79,8 @@
    }
    public void addSubscribe(Hook hook, HookSubscribe.Event event) {
        if (hook.getCreateTime() == null) {
            hook.setCreateTime(System.currentTimeMillis());
        if (hook.getExpireTime() == null) {
            hook.setExpireTime(System.currentTimeMillis() + subscribeExpire);
        }
        allSubscribes.put(hook.toString(), event);
        allHook.put(hook.toString(), hook);
@@ -96,9 +96,9 @@
     */
    @Scheduled(fixedRate=subscribeExpire)   //每5分钟执行一次
    public void execute(){
        long expireTime = System.currentTimeMillis() - subscribeExpire;
        long expireTime = System.currentTimeMillis();
        for (Hook hook : allHook.values()) {
            if (hook.getCreateTime() < expireTime) {
            if (hook.getExpireTime() < expireTime) {
                allSubscribes.remove(hook.toString());
                allHook.remove(hook.toString());
            }
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -1044,9 +1044,7 @@
                        };
                        Hook hook = Hook.getInstance(HookType.on_record_mp4, "rtp", ssrcInfo.getStream(), mediaServerItem.getId());
                        // 设置过期时间,下载失败时自动处理订阅数据
//                        long difference = DateUtil.getDifference(startTime, endTime)/1000;
//                        Instant expiresInstant = Instant.now().plusSeconds(TimeUnit.MINUTES.toSeconds(difference * 2));
//                        hookSubscribe.setExpires(expiresInstant);
                        hook.setExpireTime(System.currentTimeMillis() + 24 * 60 * 60 * 1000);
                        subscribe.addSubscribe(hook, hookEventForRecord);
                    });
        } catch (InvalidArgumentException | SipException | ParseException e) {