vue+videojs动态切换flv视频流

vue+videojs播放flv格式监控视频流,及动态切换视频源地址

需求是要对接视频,往常使用的事海康视频插件,这次对接的视频流格式是flv也是海康和大华的视频 但是是在**管理的视频

下面展示一些 内联代码片。使用vue3.x+videojs+flv.js
依赖下载

"video.js": "^7.14.3",
"videojs-flvjs-es6": "^1.0.1",
"flv.js": "^1.6.2",
<script setup>
import { onMounted, onUnmounted, ref, watch } from 'vue'
import videojs from 'video.js'
import 'videojs-flvjs-es6'
import 'video.js/dist/video-js.css'

let myPlayer = null
const props = defineProps({
  videoUrl: {
    default: ''
  }
})

watch(
  () => props.videoUrl,
  url => {
    if (myPlayer) {
      myPlayer.dispose()
      myPlayer = null
      createDom()
      setTimeout(() => {
        url && init()
      }, 100)
    } else {
      url && init()
    }
  }
)

onMounted(() => {
  props.videoUrl && init()
})

function init() {
  myPlayer = videojs(
    document.getElementById('videoPlayer'),
    {
      autoplay: true, //自动播放,由于谷歌浏览器限制需设置静音muted: true,自动播放才会生效
      controls: true, //用户可以与之交互的控件
      loop: true, //视频一结束就重新开始
      muted: true, //默认情况下将使所有音频静音
      techOrder: ['html5', 'flvjs'], // 兼容顺序
      flvjs: {
        mediaDataSource: {
          isLive: false,
          cors: true,
          withCredentials: false
        }
      },
      sources: [
        {
          // type: 'video/rtsp'
          // type: 'rtmp/flv'
          src: props.videoUrl,
          type: 'video/x-flv'
        }
      ]
    },
    () => {
      myPlayer.log('play.....')
    }
  )
}

function createDom() {
  const newVideoElement = document.createElement('video')
  newVideoElement.id = 'videoPlayer'
  newVideoElement.style.width = '100%'
  newVideoElement.style.height = '100%'
  newVideoElement.className = 'video-js vjs-default-skin vjs-big-play-centered'
  newVideoElement.preload = 'auto'
  const oldVideoElement = document.getElementById('videoDom')
  oldVideoElement.appendChild(newVideoElement)
}

onUnmounted(() => {
  if (myPlayer) {
    myPlayer.dispose()
  }
})
</script>

<template>
  <div class="videoContainer" id="videoDom">
    <video id="videoPlayer" class="video-js vjs-default-skin vjs-big-play-centered" preload="auto"></video>
  </div>
</template>

<style lang="scss" scoped>
.videoContainer {
  width: 100%;
  height: 100%;
  .video-js {
    width: 100%;
    height: 100% !important;
    &.vjs-fluid {
      padding-top: 0 !important;
    }
  }
}
</style>

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值