| | |
| | | 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; |
| | | // 流已经存在时直接推流 |
| | |
| | | @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);
|
| | |
| | | logger.warn("语音广播已经开启: {}", channelId); |
| | | event.call("语音广播已经开启"); |
| | | return; |
| | | }else { |
| | | audioBroadcastManager.del(deviceChannel.getDeviceId(),channelId); |
| | | redisCatchStorage.deleteSendRTPServer(device.getDeviceId(), channelId, sendRtpItem.getCallId(), sendRtpItem.getStreamId()); |
| | | } |
| | | } |
| | | } |
| | |
| | | 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) { |
| | |
| | | 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); |
| | |
| | | </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> |
| | |
| | | showTimeText: "00:00:00", |
| | | streamInfo: null, |
| | | broadcastRtc: null, |
| | | broadcastStatus: -1, // -1 默认状态 0 等待接通 1 接通成功 |
| | | broadcastStatus: -1, // -2 正在释放资源 -1 默认状态 0 等待接通 1 接通成功 |
| | | }; |
| | | }, |
| | | methods: { |
| | |
| | | }); |
| | | }, |
| | | getBroadcastStatus() { |
| | | if (this.broadcastStatus == -2) { |
| | | return "primary" |
| | | } |
| | | if (this.broadcastStatus == -1) { |
| | | return "primary" |
| | | } |
| | |
| | | broadcastStatusClick() { |
| | | if (this.broadcastStatus == -1) { |
| | | // 默认状态, 开始 |
| | | this.broadcastStatus = 0 |
| | | // 发起语音对讲 |
| | | this.$axios({ |
| | | method: 'get', |
| | |
| | | }); |
| | | }, |
| | | stopBroadcast(){ |
| | | this.broadcastRtc.close() |
| | | this.broadcastStatus = -2; |
| | | this.broadcastRtc = null; |
| | | this.$axios({ |
| | | method: 'get', |
| | |
| | | }).then( (res)=> { |
| | | if (res.data.code == 0) { |
| | | // this.broadcastStatus = -1; |
| | | |
| | | }else { |
| | | this.$message({ |
| | | showClose: true, |