Commit 3eef73ecb6e8fa36466cd8921a6129c886911138

Authored by 648540858
1 parent c3b47fa7

修复实时监控无法播放问题 #427

web_src/src/components/dialog/devicePlayer.vue
@@ -3,7 +3,9 @@ @@ -3,7 +3,9 @@
3 3
4 <el-dialog title="视频播放" top="0" :close-on-click-modal="false" :visible.sync="showVideoDialog" @close="close()"> 4 <el-dialog title="视频播放" top="0" :close-on-click-modal="false" :visible.sync="showVideoDialog" @close="close()">
5 <!-- <LivePlayer v-if="showVideoDialog" ref="videoPlayer" :videoUrl="videoUrl" :error="videoError" :message="videoError" :hasaudio="hasaudio" fluent autoplay live></LivePlayer> --> 5 <!-- <LivePlayer v-if="showVideoDialog" ref="videoPlayer" :videoUrl="videoUrl" :error="videoError" :message="videoError" :hasaudio="hasaudio" fluent autoplay live></LivePlayer> -->
6 - <player ref="videoPlayer" :visible.sync="showVideoDialog" :videoUrl="videoUrl" :error="videoError" :message="videoError" :height="false" :hasAudio="hasAudio" fluent autoplay live ></player> 6 + <div style="width: 100%; height: 100%">
  7 + <player containerId="container" ref="videoPlayer" :visible.sync="showVideoDialog" :videoUrl="videoUrl" :error="videoError" :message="videoError" height="100px" :hasAudio="hasAudio" fluent autoplay live ></player>
  8 + </div>
7 <div id="shared" style="text-align: right; margin-top: 1rem;"> 9 <div id="shared" style="text-align: right; margin-top: 1rem;">
8 <el-tabs v-model="tabActiveName" @tab-click="tabHandleClick"> 10 <el-tabs v-model="tabActiveName" @tab-click="tabHandleClick">
9 <el-tab-pane label="实时视频" name="media"> 11 <el-tab-pane label="实时视频" name="media">
web_src/src/components/dialog/jessibuca.vue
1 <template> 1 <template>
2 - <div id="jessibuca" style="width: auto; height: auto">  
3 - <div id="container" ref="container" style="width: 100%; height: 10rem; background-color: #000" @dblclick="fullscreenSwich">  
4 - <div class="buttons-box" id="buttonsBox">  
5 - <div class="buttons-box-left">  
6 - <i v-if="!playing" class="iconfont icon-play jessibuca-btn" @click="playBtnClick"></i>  
7 - <i v-if="playing" class="iconfont icon-pause jessibuca-btn" @click="pause"></i>  
8 - <i class="iconfont icon-stop jessibuca-btn" @click="destroy"></i>  
9 - <i v-if="isNotMute" class="iconfont icon-audio-high jessibuca-btn" @click="jessibuca.mute()"></i>  
10 - <i v-if="!isNotMute" class="iconfont icon-audio-mute jessibuca-btn" @click="jessibuca.cancelMute()"></i>  
11 - </div>  
12 - <div class="buttons-box-right">  
13 - <span class="jessibuca-btn">{{kBps}} kb/s</span>  
14 -<!-- <i class="iconfont icon-file-record1 jessibuca-btn"></i>-->  
15 -<!-- <i class="iconfont icon-xiangqing2 jessibuca-btn" ></i>-->  
16 - <i class="iconfont icon-camera1196054easyiconnet jessibuca-btn" @click="jessibuca.screenshot('截图','png',0.5)" style="font-size: 1rem !important"></i>  
17 - <i class="iconfont icon-shuaxin11 jessibuca-btn" @click="playBtnClick"></i>  
18 - <i v-if="!fullscreen" class="iconfont icon-weibiaoti10 jessibuca-btn" @click="fullscreenSwich"></i>  
19 - <i v-if="fullscreen" class="iconfont icon-weibiaoti11 jessibuca-btn" @click="fullscreenSwich"></i>  
20 - </div>  
21 - </div>  
22 - 2 + <div :id="containerId" :ref="containerId" style="width: 100%;height: auto; background-color: #000" @dblclick="fullscreenSwich">
  3 + <div class="buttons-box" id="buttonsBox">
  4 + <div class="buttons-box-left">
  5 + <i v-if="!playing" class="iconfont icon-play jessibuca-btn" @click="playBtnClick"></i>
  6 + <i v-if="playing" class="iconfont icon-pause jessibuca-btn" @click="pause"></i>
  7 + <i class="iconfont icon-stop jessibuca-btn" @click="destroy"></i>
  8 + <i v-if="isNotMute" class="iconfont icon-audio-high jessibuca-btn" @click="jessibuca.mute()"></i>
  9 + <i v-if="!isNotMute" class="iconfont icon-audio-mute jessibuca-btn" @click="jessibuca.cancelMute()"></i>
  10 + </div>
  11 + <div class="buttons-box-right">
  12 + <span class="jessibuca-btn">{{kBps}} kb/s</span>
  13 + <!-- <i class="iconfont icon-file-record1 jessibuca-btn"></i>-->
  14 + <!-- <i class="iconfont icon-xiangqing2 jessibuca-btn" ></i>-->
  15 + <i class="iconfont icon-camera1196054easyiconnet jessibuca-btn" @click="jessibuca.screenshot('截图','png',0.5)" style="font-size: 1rem !important"></i>
  16 + <i class="iconfont icon-shuaxin11 jessibuca-btn" @click="playBtnClick"></i>
  17 + <i v-if="!fullscreen" class="iconfont icon-weibiaoti10 jessibuca-btn" @click="fullscreenSwich"></i>
  18 + <i v-if="fullscreen" class="iconfont icon-weibiaoti11 jessibuca-btn" @click="fullscreenSwich"></i>
  19 + </div>
23 </div> 20 </div>
24 </div> 21 </div>
25 </template> 22 </template>
@@ -46,15 +43,20 @@ export default { @@ -46,15 +43,20 @@ export default {
46 forceNoOffscreen: false, 43 forceNoOffscreen: false,
47 }; 44 };
48 }, 45 },
49 - props: ['videoUrl', 'error', 'hasAudio', 'height'], 46 + props: ['containerId','videoUrl', 'error', 'hasAudio', 'height'],
50 mounted () { 47 mounted () {
51 window.onerror = (msg) => { 48 window.onerror = (msg) => {
52 // console.error(msg) 49 // console.error(msg)
53 }; 50 };
54 let paramUrl = decodeURIComponent(this.$route.params.url) 51 let paramUrl = decodeURIComponent(this.$route.params.url)
55 this.$nextTick(() =>{ 52 this.$nextTick(() =>{
56 - let dom = document.getElementById("container");  
57 - dom.style.height = (9/16 ) * dom.clientWidth + "px" 53 + let dom = document.getElementById(this.containerId);
  54 + if (dom.parentNode.clientHeight == 0) {
  55 + dom.style.height = (9/16 ) * dom.clientWidth + "px"
  56 + }
  57 + dom.style.height = dom.parentNode.clientHeight + "px";
  58 + dom.style.width = dom.parentNode.clientWidth + "px";
  59 +
58 if (typeof (this.videoUrl) == "undefined") { 60 if (typeof (this.videoUrl) == "undefined") {
59 this.videoUrl = paramUrl; 61 this.videoUrl = paramUrl;
60 } 62 }
@@ -72,12 +74,12 @@ export default { @@ -72,12 +74,12 @@ export default {
72 methods: { 74 methods: {
73 create(){ 75 create(){
74 let options = {}; 76 let options = {};
75 - console.log(this.$refs.container) 77 + console.log(this.$refs[this.containerId])
76 console.log("hasAudio " + this.hasAudio) 78 console.log("hasAudio " + this.hasAudio)
77 79
78 this.jessibuca = new window.Jessibuca(Object.assign( 80 this.jessibuca = new window.Jessibuca(Object.assign(
79 { 81 {
80 - container: this.$refs.container, 82 + container: this.$refs[this.containerId],
81 videoBuffer: 0.2, // 最大缓冲时长,单位秒 83 videoBuffer: 0.2, // 最大缓冲时长,单位秒
82 isResize: true, 84 isResize: true,
83 decoder:"static/js/jessibuca/decoder.js", 85 decoder:"static/js/jessibuca/decoder.js",
@@ -198,6 +200,19 @@ export default { @@ -198,6 +200,19 @@ export default {
198 200
199 }); 201 });
200 }, 202 },
  203 + resize(){
  204 + if (this.jessibuca){
  205 + this.jessibuca.resize()
  206 + this.$nextTick(() =>{
  207 + let dom = document.getElementById(this.containerId);
  208 + if (dom.parentNode.clientHeight == 0) {
  209 + dom.style.height = (9/16 ) * dom.clientWidth + "px"
  210 + }
  211 + dom.style.height = dom.parentNode.clientHeight + "px";
  212 + dom.style.width = dom.parentNode.clientWidth + "px";
  213 + })
  214 + }
  215 + },
201 playBtnClick: function (event){ 216 playBtnClick: function (event){
202 this.play(this.videoUrl) 217 this.play(this.videoUrl)
203 }, 218 },
web_src/src/components/live.vue
@@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
33 > 33 >
34 <div v-if="!videoUrl[i-1]" style="color: #ffffff;font-size: 30px;font-weight: bold;">{{i}}</div> 34 <div v-if="!videoUrl[i-1]" style="color: #ffffff;font-size: 30px;font-weight: bold;">{{i}}</div>
35 <player v-else :ref="'player'+i" :videoUrl="videoUrl[i-1]" fluent autoplay :height="true" 35 <player v-else :ref="'player'+i" :videoUrl="videoUrl[i-1]" fluent autoplay :height="true"
36 - :idx="'player'+i" @screenshot="shot" @destroy="destroy"></player> 36 + :containerId="'player'+i" @screenshot="shot" @destroy="destroy"></player>
37 <!-- <player v-else ref="'player'+i" :idx="'player'+i" :visible.sync="showVideoDialog" :videoUrl="videoUrl[i-1]" :height="true" :hasAudio="hasAudio" fluent autoplay live ></player> --> 37 <!-- <player v-else ref="'player'+i" :idx="'player'+i" :visible.sync="showVideoDialog" :videoUrl="videoUrl[i-1]" :height="true" :hasAudio="hasAudio" fluent autoplay live ></player> -->
38 </div> 38 </div>
39 </div> 39 </div>