old mode 100644
new mode 100755
|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <div id="devicePlayer" v-loading="isLoging"> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <el-dialog title="视频播放" top="0" :close-on-click-modal="false" :visible.sync="showVideoDialog" @close="close()"> | 
|---|
|  |  |  | <el-dialog title="视频播放" top="0" :close-on-click-modal="false" :visible.sync="showVideoDialog" @close="close()" v-if="showVideoDialog"> | 
|---|
|  |  |  | <div style="width: 100%; height: 100%"> | 
|---|
|  |  |  | <el-tabs type="card" :stretch="true" v-model="activePlayer" @tab-click="changePlayer" | 
|---|
|  |  |  | v-if="Object.keys(this.player).length > 1"> | 
|---|
|  |  |  | <el-tab-pane label="Jessibuca" name="jessibuca"> | 
|---|
|  |  |  | <jessibucaPlayer v-if="activePlayer === 'jessibuca'" ref="jessibuca" :visible.sync="showVideoDialog" | 
|---|
|  |  |  | :videoUrl="videoUrl" :error="videoError" :message="videoError" height="100px" | 
|---|
|  |  |  | :videoUrl="videoUrl" :error="videoError" :message="videoError" style="height: 515px" | 
|---|
|  |  |  | :hasAudio="hasAudio" fluent autoplay live></jessibucaPlayer> | 
|---|
|  |  |  | </el-tab-pane> | 
|---|
|  |  |  | <el-tab-pane label="WebRTC" name="webRTC"> | 
|---|
|  |  |  | 
|---|
|  |  |  | :hasAudio="hasAudio" fluent autoplay live></rtc-player> | 
|---|
|  |  |  | </el-tab-pane> | 
|---|
|  |  |  | <el-tab-pane label="h265web">h265web敬请期待</el-tab-pane> | 
|---|
|  |  |  | <el-tab-pane label="wsPlayer">wsPlayer 敬请期待</el-tab-pane> | 
|---|
|  |  |  | </el-tabs> | 
|---|
|  |  |  | <jessibucaPlayer v-if="Object.keys(this.player).length == 1 && this.player.jessibuca" ref="jessibuca" | 
|---|
|  |  |  | :visible.sync="showVideoDialog" :videoUrl="videoUrl" :error="videoError" :message="videoError" | 
|---|
|  |  |  | 
|---|
|  |  |  | style="font-size: 1.875rem;"></i></div> | 
|---|
|  |  |  | <div style="position: absolute; left: 7.25rem; top: 3.25rem; font-size: 1.875rem;" | 
|---|
|  |  |  | @mousedown="ptzCamera('zoomout')" @mouseup="ptzCamera('stop')"><i | 
|---|
|  |  |  | class="el-icon-zoom-out control-zoom-btn"></i></div> | 
|---|
|  |  |  | class="el-icon-zoom-out control-zoom-btn"></i></div> | 
|---|
|  |  |  | <div class="contro-speed" style="position: absolute; left: 4px; top: 7rem; width: 9rem;"> | 
|---|
|  |  |  | <el-slider v-model="controSpeed" :max="255"></el-slider> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | </el-tab-pane> | 
|---|
|  |  |  | <el-tab-pane label="语音对讲" name="broadcast"> | 
|---|
|  |  |  | <div style="padding: 0 10px"> | 
|---|
|  |  |  | <el-switch v-model="broadcastMode" :disabled="broadcastStatus !== -1" active-color="#409EFF" | 
|---|
|  |  |  | active-text="喊话(Broadcast)" | 
|---|
|  |  |  | inactive-text="对讲(Talk)"></el-switch> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div class="trank" style="text-align: center;"> | 
|---|
|  |  |  | <el-button @click="broadcastStatusClick()" :type="getBroadcastStatus()" :disabled="broadcastStatus === -2" | 
|---|
|  |  |  | circle icon="el-icon-microphone" style="font-size: 32px; padding: 24px;margin-top: 24px;"/> | 
|---|
|  |  |  | 
|---|
|  |  |  | recordStartTime: 0, | 
|---|
|  |  |  | showTimeText: "00:00:00", | 
|---|
|  |  |  | streamInfo: null, | 
|---|
|  |  |  | broadcastMode: true, | 
|---|
|  |  |  | broadcastRtc: null, | 
|---|
|  |  |  | broadcastStatus: -1, // -2 正在释放资源 -1 默认状态 0 等待接通 1 接通成功 | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | 
|---|
|  |  |  | // if (callback )callback(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | playFromStreamInfo: function (realHasAudio, streamInfo) { | 
|---|
|  |  |  | this.showVideoDialog = true; | 
|---|
|  |  |  | this.hasaudio = realHasAudio && this.hasaudio; | 
|---|
|  |  |  | this.$refs[this.activePlayer].play(this.getUrlByStreamInfo(streamInfo)) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | close: function () { | 
|---|
|  |  |  | console.log('关闭视频'); | 
|---|
|  |  |  | if (!!this.$refs[this.activePlayer]) { | 
|---|
|  |  |  | this.$refs[this.activePlayer].pause(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.videoUrl = ''; | 
|---|
|  |  |  | this.coverPlaying = false; | 
|---|
|  |  |  | this.showVideoDialog = false; | 
|---|
|  |  |  | if (this.convertKey != '') { | 
|---|
|  |  |  | this.convertStop(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.convertKey = '' | 
|---|
|  |  |  | this.stopBroadcast() | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | playFromStreamInfo: function (realHasAudio, streamInfo) { | 
|---|
|  |  |  | this.showVideoDialog = true; | 
|---|
|  |  |  | this.hasaudio = realHasAudio && this.hasaudio; | 
|---|
|  |  |  | if (this.$refs[this.activePlayer]) { | 
|---|
|  |  |  | this.$refs[this.activePlayer].play(this.getUrlByStreamInfo(streamInfo)) | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | this.$nextTick(() => { | 
|---|
|  |  |  | this.$refs[this.activePlayer].play(this.getUrlByStreamInfo(streamInfo)) | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | close: function () { | 
|---|
|  |  |  | console.log('关闭视频'); | 
|---|
|  |  |  | if (!!this.$refs[this.activePlayer]){ | 
|---|
|  |  |  | this.$refs[this.activePlayer].pause(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.videoUrl = ''; | 
|---|
|  |  |  | this.coverPlaying = false; | 
|---|
|  |  |  | this.showVideoDialog = false; | 
|---|
|  |  |  | if (this.convertKey != '') { | 
|---|
|  |  |  | this.convertStop(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.convertKey = '' | 
|---|
|  |  |  | this.stopBroadcast() | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | copySharedInfo: function (data) { | 
|---|
|  |  |  | console.log('复制内容:' + data); | 
|---|
|  |  |  | 
|---|
|  |  |  | this.tracks = [] | 
|---|
|  |  |  | let _this = this; | 
|---|
|  |  |  | this.$copyText(data).then( | 
|---|
|  |  |  | function (e) { | 
|---|
|  |  |  | _this.$message({ | 
|---|
|  |  |  | showClose: true, | 
|---|
|  |  |  | message: '复制成功', | 
|---|
|  |  |  | type: 'success' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | function (e) { | 
|---|
|  |  |  | _this.$message({ | 
|---|
|  |  |  | showClose: true, | 
|---|
|  |  |  | message: '复制失败,请手动复制', | 
|---|
|  |  |  | type: 'error' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | function (e) { | 
|---|
|  |  |  | _this.$message({ | 
|---|
|  |  |  | showClose: true, | 
|---|
|  |  |  | message: '复制成功', | 
|---|
|  |  |  | type: 'success' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | function (e) { | 
|---|
|  |  |  | _this.$message({ | 
|---|
|  |  |  | showClose: true, | 
|---|
|  |  |  | message: '复制失败,请手动复制', | 
|---|
|  |  |  | type: 'error' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | ptzCamera: function (command) { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | getBroadcastStatus() { | 
|---|
|  |  |  | if (this.broadcastStatus == -2) { | 
|---|
|  |  |  | return "primary" | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (this.broadcastStatus == -1) { | 
|---|
|  |  |  | return "primary" | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (this.broadcastStatus == 0) { | 
|---|
|  |  |  | return "warning" | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (this.broadcastStatus == 1) { | 
|---|
|  |  |  | return "danger" | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | broadcastStatusClick() { | 
|---|
|  |  |  | if (this.broadcastStatus == -1) { | 
|---|
|  |  |  | // 默认状态, 开始 | 
|---|
|  |  |  | this.broadcastStatus = 0 | 
|---|
|  |  |  | // 发起语音对讲 | 
|---|
|  |  |  | this.$axios({ | 
|---|
|  |  |  | method: 'get', | 
|---|
|  |  |  | url: '/api/play/broadcast/' + this.deviceId + '/' + this.channelId + "?timeout=30&broadcastMode=" + this.broadcastMode | 
|---|
|  |  |  | }).then((res) => { | 
|---|
|  |  |  | if (res.data.code === 0) { | 
|---|
|  |  |  | let streamInfo = res.data.data.streamInfo; | 
|---|
|  |  |  | if (document.location.protocol.includes("https")) { | 
|---|
|  |  |  | this.startBroadcast(streamInfo.rtcs) | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.startBroadcast(streamInfo.rtc) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.$message({ | 
|---|
|  |  |  | showClose: true, | 
|---|
|  |  |  | message: res.data.msg, | 
|---|
|  |  |  | type: "error", | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } else if (this.broadcastStatus === 1) { | 
|---|
|  |  |  | this.broadcastStatus = -1; | 
|---|
|  |  |  | this.broadcastRtc.close() | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | startBroadcast(url) { | 
|---|
|  |  |  | // 获取推流鉴权Key | 
|---|
|  |  |  | this.$axios({ | 
|---|
|  |  |  | 
|---|
|  |  |  | let pushKey = res.data.data.pushKey; | 
|---|
|  |  |  | // 获取推流鉴权KEY | 
|---|
|  |  |  | url += "&sign=" + crypto.createHash('md5').update(pushKey, "utf8").digest('hex') | 
|---|
|  |  |  | console.log("开始语音对讲: " + url) | 
|---|
|  |  |  | console.log("开始语音喊话: " + url) | 
|---|
|  |  |  | this.broadcastRtc = new ZLMRTCClient.Endpoint({ | 
|---|
|  |  |  | debug: true, // 是否打印日志 | 
|---|
|  |  |  | zlmsdpUrl: url, //流地址 | 
|---|
|  |  |  | 
|---|
|  |  |  | console.error('不支持webrtc', e) | 
|---|
|  |  |  | this.$message({ | 
|---|
|  |  |  | showClose: true, | 
|---|
|  |  |  | message: '不支持webrtc, 无法进行语音对讲', | 
|---|
|  |  |  | message: '不支持webrtc, 无法进行语音喊话', | 
|---|
|  |  |  | type: 'error' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | this.broadcastStatus = -1; | 
|---|