648540858
2022-03-14 1171cf1ea9a2c69916bfb49181ecb5bf66055b33
使用zlm新特性支持对与国标流关闭音频以加快拉流速度
1个文件已修改
40 ■■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -9,9 +9,12 @@
import com.genersoft.iot.vmp.conf.MediaConfig;
import com.genersoft.iot.vmp.conf.UserSetup;
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
import com.genersoft.iot.vmp.media.zlm.dto.*;
import com.genersoft.iot.vmp.service.*;
import com.genersoft.iot.vmp.service.bean.SSRCInfo;
@@ -81,7 +84,7 @@
    private UserSetup userSetup;
    @Autowired
    private MediaConfig mediaConfig;
    private VideoStreamSessionManager sessionManager;
    /**
     * 服务器定时上报时间,上报间隔可配置,默认10s上报一次
@@ -204,15 +207,15 @@
        }else {
            ret.put("enableMP4", userSetup.isRecordPushLive());
        }
        StreamInfo streamInfo = redisCatchStorage.queryPlaybackByStreamId(stream);
        // 录像回放时不进行录像下载
        if (streamInfo != null) {
            ret.put("enableMP4", false);
        }else {
            ret.put("enableMP4", userSetup.isRecordPushLive());
        List<SsrcTransaction> ssrcTransactionForAll = sessionManager.getSsrcTransactionForAll(null, null, null, stream);
        if (ssrcTransactionForAll != null && ssrcTransactionForAll.size() == 1) {
            String deviceId = ssrcTransactionForAll.get(0).getDeviceId();
            String channelId = ssrcTransactionForAll.get(0).getChannelId();
            DeviceChannel deviceChannel = storager.queryChannel(deviceId, channelId);
            if (deviceChannel != null) {
                ret.put("enable_audio", deviceChannel.isHasAudio());
            }
        }
        return new ResponseEntity<String>(ret.toString(), HttpStatus.OK);
    }
    
@@ -347,8 +350,12 @@
                    redisCatchStorage.stopPlay(streamInfo);
                    storager.stopPlay(streamInfo.getDeviceID(), streamInfo.getChannelId());
                }else{
                    streamInfo = redisCatchStorage.queryPlaybackByStreamId(streamId);
                    redisCatchStorage.stopPlayback(streamInfo);
                    streamInfo = redisCatchStorage.queryPlayback(null, null, streamId, null);
                    if (streamInfo != null) {
                        redisCatchStorage.stopPlayback(streamInfo.getDeviceID(), streamInfo.getChannelId(),
                                streamInfo.getStream(), null);
                    }
                }
            }else {
                if (!"rtp".equals(app)){
@@ -440,18 +447,19 @@
                    ret.put("close", false);
                } else {
                    cmder.streamByeCmd(streamInfoForPlayCatch.getDeviceID(), streamInfoForPlayCatch.getChannelId(),
                            streamInfoForPlayCatch.getStream());
                            streamInfoForPlayCatch.getStream(), null);
                    redisCatchStorage.stopPlay(streamInfoForPlayCatch);
                    storager.stopPlay(streamInfoForPlayCatch.getDeviceID(), streamInfoForPlayCatch.getChannelId());
                }
            }else{
                StreamInfo streamInfoForPlayBackCatch = redisCatchStorage.queryPlaybackByStreamId(streamId);
                StreamInfo streamInfoForPlayBackCatch = redisCatchStorage.queryPlayback(null, null, streamId, null);
                if (streamInfoForPlayBackCatch != null) {
                    cmder.streamByeCmd(streamInfoForPlayBackCatch.getDeviceID(),
                            streamInfoForPlayBackCatch.getChannelId(), streamInfoForPlayBackCatch.getStream());
                    redisCatchStorage.stopPlayback(streamInfoForPlayBackCatch);
                            streamInfoForPlayBackCatch.getChannelId(), streamInfoForPlayBackCatch.getStream(), null);
                    redisCatchStorage.stopPlayback(streamInfoForPlayBackCatch.getDeviceID(),
                            streamInfoForPlayBackCatch.getChannelId(), streamInfoForPlayBackCatch.getStream(), null);
                }else {
                    StreamInfo streamInfoForDownload = redisCatchStorage.queryDownloadByStreamId(streamId);
                    StreamInfo streamInfoForDownload = redisCatchStorage.queryDownload(null, null, streamId, null);
                    // 进行录像下载时无人观看不断流
                    if (streamInfoForDownload != null) {
                        ret.put("close", false);