648540858
2022-07-03 7609d7836c52a7619a51fa8b707502f027c2e1f0
优化对讲逻辑
4个文件已修改
26 ■■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_src/src/components/dialog/devicePlayer.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
@@ -830,7 +830,7 @@
            subscribeKey.put("app", app);
            subscribeKey.put("stream", stream);
            subscribeKey.put("regist", true);
            subscribeKey.put("schema", "rtmp");
            subscribeKey.put("schema", "rtsp");
            subscribeKey.put("mediaServerId", mediaServerItem.getId());
            String finalSsrc = ssrc;
            // 流已经存在时直接推流
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -339,9 +339,7 @@
    @PostMapping(value = "/on_stream_changed", produces = "application/json;charset=UTF-8")
    public ResponseEntity<String> onStreamChanged(@RequestBody MediaItem item){
        if (logger.isDebugEnabled()) {
            logger.debug("[ ZLM HOOK ]on_stream_changed API调用,参数:" + JSONObject.toJSONString(item));
        }
        logger.info("[ ZLM HOOK ]on_stream_changed API调用,参数:" + JSONObject.toJSONString(item));
        String mediaServerId = item.getMediaServerId();
        JSONObject json = (JSONObject) JSON.toJSON(item);
        ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, json);
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -689,6 +689,9 @@
                    logger.warn("语音广播已经开启: {}", channelId);
                    event.call("语音广播已经开启");
                    return;
                }else {
                    audioBroadcastManager.del(deviceChannel.getDeviceId(),channelId);
                    redisCatchStorage.deleteSendRTPServer(device.getDeviceId(), channelId, sendRtpItem.getCallId(), sendRtpItem.getStreamId());
                }
            }
        }
@@ -710,7 +713,7 @@
    public void stopAudioBroadcast(String deviceId, String channelId){
        AudioBroadcastCatch audioBroadcastCatch = audioBroadcastManager.get(deviceId, channelId);
        if (audioBroadcastCatch != null) {
            audioBroadcastManager.del(deviceId, audioBroadcastCatch.getChannelId());
            try {
                SendRtpItem sendRtpItem =  redisCatchStorage.querySendRTPServer(deviceId, audioBroadcastCatch.getChannelId(), null, null);
                if (sendRtpItem != null) {
@@ -722,11 +725,12 @@
                    param.put("stream", sendRtpItem.getStreamId());
                    zlmresTfulUtils.stopSendRtp(mediaInfo, param);
                    // 立刻结束设备的推流,等待自行结束太慢
//                    zlmresTfulUtils.closeStreams(mediaInfo, sendRtpItem.getApp(), sendRtpItem.getStreamId());
                    zlmresTfulUtils.closeStreams(mediaInfo, sendRtpItem.getApp(), sendRtpItem.getStreamId());
                }
                if (audioBroadcastCatch.getStatus() == AudioBroadcastCatchStatus.Ok) {
                    cmder.streamByeCmd(audioBroadcastCatch.getDialog(), audioBroadcastCatch.getRequest(), null);
                }
                audioBroadcastManager.del(deviceId, channelId);
            } catch (SipException e) {
                throw new RuntimeException(e);
web_src/src/components/dialog/devicePlayer.vue
@@ -278,8 +278,9 @@
                </el-tab-pane>
              <el-tab-pane label="语音对讲" name="broadcast" >
                <div class="trank" style="text-align: center;">
                  <el-button @click="broadcastStatusClick()" :type="getBroadcastStatus()" circle icon="el-icon-microphone"  style="font-size: 32px; padding: 24px;margin-top: 24px;"/>
                  <el-button @click="broadcastStatusClick()" :type="getBroadcastStatus()" :disabled="broadcastStatus === -2" circle icon="el-icon-microphone"  style="font-size: 32px; padding: 24px;margin-top: 24px;"/>
                  <p>
                    <span v-if="broadcastStatus === -2">正在释放资源</span>
                    <span v-if="broadcastStatus === -1">点击开始对讲</span>
                    <span v-if="broadcastStatus === 0">等待接通中...</span>
                    <span v-if="broadcastStatus === 1">请说话</span>
@@ -371,7 +372,7 @@
            showTimeText: "00:00:00",
            streamInfo: null,
            broadcastRtc: null,
            broadcastStatus: -1, // -1 默认状态 0 等待接通 1 接通成功
            broadcastStatus: -1, // -2 正在释放资源 -1 默认状态 0 等待接通 1 接通成功
        };
    },
    methods: {
@@ -821,6 +822,9 @@
          });
        },
        getBroadcastStatus() {
            if (this.broadcastStatus == -2) {
              return "primary"
            }
            if (this.broadcastStatus == -1) {
              return "primary"
            }
@@ -835,6 +839,7 @@
        broadcastStatusClick() {
            if (this.broadcastStatus == -1) {
              // 默认状态, 开始
              this.broadcastStatus = 0
              // 发起语音对讲
              this.$axios({
                method: 'get',
@@ -924,7 +929,7 @@
          });
        },
        stopBroadcast(){
          this.broadcastRtc.close()
          this.broadcastStatus = -2;
          this.broadcastRtc = null;
          this.$axios({
            method: 'get',
@@ -932,7 +937,6 @@
          }).then( (res)=> {
            if (res.data.code == 0) {
              // this.broadcastStatus = -1;
            }else {
              this.$message({
                showClose: true,