From 07956b48df476002e3cfd9b01be9e9fb92590ca9 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期五, 01 七月 2022 18:26:35 +0800 Subject: [PATCH] 添加界面优化接口 --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java | 6 + src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java | 3 - src/main/resources/8042900_www.wvp-pro.cn.jks | 0 web_src/src/components/dialog/devicePlayer.vue | 116 ++++++++++++++++++++++++++++++++++++++ src/main/java/com/genersoft/iot/vmp/vmanager/bean/AudioBroadcastResult.java | 13 ++-- src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java | 8 ++ src/main/java/com/genersoft/iot/vmp/service/IMediaService.java | 1 7 files changed, 135 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java index 6c04c20..04982c3 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java @@ -28,6 +28,7 @@ import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItemLite; import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; import com.genersoft.iot.vmp.service.IMediaServerService; +import com.genersoft.iot.vmp.service.IMediaService; import com.genersoft.iot.vmp.service.IPlayService; import com.genersoft.iot.vmp.service.IStreamPushService; import com.genersoft.iot.vmp.service.bean.MessageForPushChannel; @@ -102,6 +103,9 @@ @Autowired private IMediaServerService mediaServerService; + + @Autowired + private IMediaService mediaService; @Autowired private ZLMRESTfulUtils zlmresTfulUtils; @@ -1016,7 +1020,7 @@ AudioBroadcastResult audioBroadcastResult = new AudioBroadcastResult(); audioBroadcastResult.setApp(app); audioBroadcastResult.setStream(stream); - audioBroadcastResult.setMediaServerItem(new MediaServerItemLite(mediaServerItem)); + audioBroadcastResult.setStreamInfo(mediaService.getStreamInfoByAppAndStream(mediaServerItem, app, stream, null, null, false)); audioBroadcastResult.setCodec("G.711"); wvpResult.setData(audioBroadcastResult); RequestMessage requestMessage = new RequestMessage(); diff --git a/src/main/java/com/genersoft/iot/vmp/service/IMediaService.java b/src/main/java/com/genersoft/iot/vmp/service/IMediaService.java index 8c05b85..3eee6c7 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IMediaService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IMediaService.java @@ -41,4 +41,5 @@ * @return */ StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Object tracks, String addr); + StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Object tracks, String addr, boolean isPlay); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java index 2c084a5..a3d2a38 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java @@ -74,6 +74,11 @@ @Override public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Object tracks, String addr) { + return getStreamInfoByAppAndStream(mediaInfo, app, stream, tracks, addr, true); + } + + @Override + public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Object tracks, String addr, boolean isPlay) { StreamInfo streamInfoResult = new StreamInfo(); streamInfoResult.setStream(stream); streamInfoResult.setApp(app); @@ -107,11 +112,10 @@ streamInfoResult.setHttps_ts(String.format("https://%s:%s/%s/%s.live.ts", addr, mediaInfo.getHttpSSlPort(), app, stream)); streamInfoResult.setWss_ts(String.format("wss://%s:%s/%s/%s.live.ts", addr, mediaInfo.getHttpSSlPort(), app, stream)); streamInfoResult.setWss_ts(String.format("wss://%s:%s/%s/%s.live.ts", addr, mediaInfo.getHttpSSlPort(), app, stream)); - streamInfoResult.setRtc(String.format("https://%s:%s/index/api/webrtc?app=%s&stream=%s&type=play", mediaInfo.getStreamIp(), mediaInfo.getHttpSSlPort(), app, stream)); + streamInfoResult.setRtc(String.format("https://%s:%s/index/api/webrtc?app=%s&stream=%s&type=%s", mediaInfo.getStreamIp(), mediaInfo.getHttpSSlPort(), app, stream, isPlay?"play":"push")); } streamInfoResult.setTracks(tracks); return streamInfoResult; } - } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java index 6422cfc..d945bfc 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java @@ -190,10 +190,7 @@ redisCatchStorage.stopPlay(streamInfo); storager.stopPlay(streamInfo.getDeviceID(), streamInfo.getChannelId()); streamInfo = null; - } - - } if (streamInfo == null) { String streamId = null; diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/AudioBroadcastResult.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/AudioBroadcastResult.java index a722ae8..64bc243 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/AudioBroadcastResult.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/AudioBroadcastResult.java @@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.vmanager.bean; +import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItemLite; @@ -8,9 +9,9 @@ */ public class AudioBroadcastResult { /** - * 鎺ㄦ祦鐨勫獟浣撹妭鐐逛俊鎭� + * 鎺ㄦ祦鐨勫悇涓柟寮忔祦鍦板潃 */ - private MediaServerItemLite mediaServerItem; + private StreamInfo streamInfo; /** * 缂栫爜鏍煎紡 @@ -28,12 +29,12 @@ private String stream; - public MediaServerItemLite getMediaServerItem() { - return mediaServerItem; + public StreamInfo getStreamInfo() { + return streamInfo; } - public void setMediaServerItem(MediaServerItemLite mediaServerItem) { - this.mediaServerItem = mediaServerItem; + public void setStreamInfo(StreamInfo streamInfo) { + this.streamInfo = streamInfo; } public String getCodec() { diff --git a/src/main/resources/8042900_www.wvp-pro.cn.jks b/src/main/resources/8042900_www.wvp-pro.cn.jks new file mode 100644 index 0000000..3e51206 --- /dev/null +++ b/src/main/resources/8042900_www.wvp-pro.cn.jks Binary files differ diff --git a/web_src/src/components/dialog/devicePlayer.vue b/web_src/src/components/dialog/devicePlayer.vue index 9c254c9..5c40c31 100644 --- a/web_src/src/components/dialog/devicePlayer.vue +++ b/web_src/src/components/dialog/devicePlayer.vue @@ -276,6 +276,17 @@ </div> </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;"/> + <p> + <span v-if="broadcastStatus === -1">鐐瑰嚮寮�濮嬪璁�</span> + <span v-if="broadcastStatus === 0">绛夊緟鎺ラ�氫腑...</span> + <span v-if="broadcastStatus === 1">璇疯璇�</span> + </p> + + </div> + </el-tab-pane> </el-tabs> </div> @@ -359,6 +370,8 @@ recordStartTime: 0, showTimeText: "00:00:00", streamInfo: null, + broadcastRtc: null, + broadcastStatus: -1, // -1 榛樿鐘舵�� 0 绛夊緟鎺ラ�� 1 鎺ラ�氭垚鍔� }; }, methods: { @@ -804,8 +817,111 @@ }, 600) }); }, + getBroadcastStatus() { + if (this.broadcastStatus == -1) { + return "primary" + } + if (this.broadcastStatus == 0) { + return "warning" + } + if (this.broadcastStatus == 1) { + return "danger" + } + }, + broadcastStatusClick() { + if (this.broadcastStatus == -1) { + // 榛樿鐘舵�侊紝 寮�濮� + // 鍙戣捣璇煶瀵硅 + this.$axios({ + method: 'get', + url: '/api/play/broadcast/' + this.deviceId + '/' + this.channelId + "?timeout=30" + }).then( (res)=> { + if (res.data.code == 0) { + let streamInfo = res.data.data.streamInfo; + this.startBroadcast(streamInfo.rtc) + }else { + this.$message({ + showClose: true, + message: res.data.msg, + type: "error", + }); + } + }); + }else if (this.broadcastStatus === 1) { + this.broadcastRtc.close() + this.broadcastRtc = null; + this.broadcastStatus = -1; + } + }, + startBroadcast(url){ + console.log("寮�濮嬭闊冲璁诧細 " + url) + this.broadcastRtc = new ZLMRTCClient.Endpoint({ + debug: true, // 鏄惁鎵撳嵃鏃ュ織 + zlmsdpUrl: url, //娴佸湴鍧� + simulecast: false, + useCamera: false, + audioEnable: true, + videoEnable: false, + recvOnly: false, + }) + // webrtcPlayer.on(ZLMRTCClient.Events.WEBRTC_ON_REMOTE_STREAMS,(e)=>{//鑾峰彇鍒颁簡杩滅娴侊紝鍙互鎾斁 + // console.error('鎾斁鎴愬姛',e.streams) + // this.broadcastStatus = 1; + // }); + // + // webrtcPlayer.on(ZLMRTCClient.Events.WEBRTC_ON_LOCAL_STREAM,(s)=>{// 鑾峰彇鍒颁簡鏈湴娴� + // this.broadcastStatus = 1; + // // document.getElementById('selfVideo').srcObject=s; + // // this.eventcallbacK("LOCAL STREAM", "鑾峰彇鍒颁簡鏈湴娴�") + // }); + + this.broadcastRtc.on(ZLMRTCClient.Events.WEBRTC_NOT_SUPPORT,(e)=>{// 鑾峰彇鍒颁簡鏈湴娴� + console.error('涓嶆敮鎸亀ebrtc',e) + this.$message({ + showClose: true, + message: '涓嶆敮鎸亀ebrtc, 鏃犳硶杩涜璇煶瀵硅', + type: 'error' + }); + }); + + this.broadcastRtc.on(ZLMRTCClient.Events.WEBRTC_ICE_CANDIDATE_ERROR,(e)=>{// ICE 鍗忓晢鍑洪敊 + console.error('ICE 鍗忓晢鍑洪敊') + this.$message({ + showClose: true, + message: 'ICE 鍗忓晢鍑洪敊', + type: 'error' + }); + }); + + this.broadcastRtc.on(ZLMRTCClient.Events.WEBRTC_OFFER_ANWSER_EXCHANGE_FAILED,(e)=>{// offer anwser 浜ゆ崲澶辫触 + console.error('offer anwser 浜ゆ崲澶辫触',e) + this.$message({ + showClose: true, + message: 'offer anwser 浜ゆ崲澶辫触' + e, + type: 'error' + }); + }); + this.broadcastRtc.on(ZLMRTCClient.Events.WEBRTC_ON_CONNECTION_STATE_CHANGE,(e)=>{// offer anwser 浜ゆ崲澶辫触 + console.log('鐘舵�佹敼鍙�',e) + if (e === "failed") { + this.broadcastStatus = -1; + }else if (e === "connecting") { + this.broadcastStatus = 0; + }else{ + this.broadcastStatus = 1; + } + }); + this.broadcastRtc.on(ZLMRTCClient.Events.CAPTURE_STREAM_FAILED,(e)=>{// offer anwser 浜ゆ崲澶辫触 + console.log('鎹曡幏娴佸け璐�',e) + this.$message({ + showClose: true, + message: '鎹曡幏娴佸け璐�' + e, + type: 'error' + }); + }); + } } }; </script> -- Gitblit v1.8.0