video的销毁和重构

单个video标签的销毁

 if (this.videoPlayer) {
        this.videoPlayer.dispose()
        this.videoPlayer = null
  }

多个video标签的销毁

// 比如:this.rtmpArr=[] 接受多个video的时候一定要给个长度 this.rtmpArr=new Array(num)  否则接受完获取不到this.rtmpArr的长度
if (this.rtmpArr.length > 1) {
        for (let i = 1; i < this.rtmpArr.length; i++) {
          this.rtmpArr[i].dispose()
        }
        this.rtmpArr = [] // 多个video销毁之后记得使this.rtmpArr为[],因为虽然销毁了但是内部还存在video的内置方法,重构再次赋值的时候会报错
      }

多个video标签的赋值

// 这里加this.$nextTick的原因是重构video之后不加会获取不到video标签导致下面videojs赋值后找不到元素报错
          this.$nextTick(() => {
            this.rtmpArr = new Array(this.multiScreen.length)
            for (let i = 1; i < this.multiScreen.length; i++) {
              this.rtmpArr[i] = videojs(this.multiScreen[i].id, {}, () => {
                this.rtmpArr[i].src({
                  type: 'rtmp/flv',
                  src: this.multiScreen[i]['live-address']
                })
              })
            }
         })

video标签的重构

 refactorVideo() {
        this.videoPlayer.dispose()
        this.$refs.videoArea.innerHTML = ``
        if (this.rtmpArr.length > 1) {
          for (let i = 1; i < this.rtmpArr.length; i++) {
            this.rtmpArr[i].dispose()
          }
          this.rtmpArr = []
        }
        if (this.multiScreen.length > 1) {
          this.$nextTick(() => {
            let lis = this.$refs.urlList.getElementsByClassName('videoPictureArea')
            for (let i = 0; i < lis.length; i++) {
              lis[i].getElementsByClassName('videoPicture')[0].innerHTML = `" muted="true" autoplay="true"
                       class="video-js vjs-default-skin vjs-big-play-centered hidden-controls">`
            }
          })
        }
      },

你可能感兴趣的:(前端)