Newer
Older
safe_production_front / src / views / bigScreen / flvExtend.vue
dutingting on 14 Mar 2 KB 分组授权80%
<!-- flvExtend 是一个基于 flv.js 的功能扩展插件,旨在解决直播流媒体播放中的常见问题,如追帧、断流重连和实时更新。该项目通过封装 flv.js 和 mpegts.js,提供了更流畅的追帧、断流重连和实时更新视频的功能。
主要特性
  更流畅的追帧:优化了视频追帧的流畅性。
  断流重连:自动处理断流情况,实现重连功能。
  实时更新视频:确保视频内容实时更新。
  解决 stuck 问题:视频卡住时自动重建。
-->
<script setup>
import { onUnmounted, ref } from 'vue'
// 引入 flv-extend 库
import FlvExtend from 'flv-extend'
const videoRef = ref(null) // 引用 video 元素
let flvPlayer = null // flv 播放器实例
const videoUrl = '' // FLV 视频地址

// 播放视频的方法
const playVideo = () => {
  if (FlvExtend.isSupported()) {
    // 创建 flv 播放器实例
    flvPlayer = FlvExtend.createPlayer({
      type: 'flv',
      url: videoUrl,
    })
    // 将播放器实例绑定到 video 元素上
    flvPlayer.attachMediaElement(videoRef.value)
    // 加载视频
    flvPlayer.load()
    // 开始播放视频
    flvPlayer.play()
  }
}

// 停止视频的方法
const stopVideo = () => {
  if (flvPlayer) {
    // 暂停播放
    flvPlayer.pause()
    // 卸载视频资源
    flvPlayer.unload()
    // 解除与 video 元素的绑定
    flvPlayer.detachMediaElement()
    // 销毁播放器实例
    flvPlayer.destroy()
    flvPlayer = null
  }
}

// 组件卸载时停止视频播放并释放资源
onUnmounted(() => {
  stopVideo()
})

onMounted(() => {

})
</script>

<template>
  <div class="player" style="position: relative;">
    <video v-show="url" ref="videoRef" class="centeredVideo" controls autoplay muted />
  </div>
</template>

<style scoped lang="scss">
.player {
  background-color: black;
  height: 100%;
  width: 100%;
  // border: 1px solid white;
  color: white;
  text-align: center;
  display: flex;
  align-items: center;
}

.centeredVideo {
  width: 100%;
  height: 98%;
}
</style>