当前位置:首页 > VUE

vue实现直播回放功能

2026-02-23 03:23:44VUE

使用 video.js 实现直播回放

在 Vue 项目中安装 video.js 和 videojs-contrib-hls

npm install video.js videojs-contrib-hls

创建一个视频播放器组件

<template>
  <div>
    <video ref="videoPlayer" class="video-js"></video>
  </div>
</template>

<script>
import videojs from 'video.js'
import 'video.js/dist/video-js.css'
import 'videojs-contrib-hls'

export default {
  name: 'VideoPlayer',
  props: {
    options: {
      type: Object,
      default() {
        return {
          autoplay: true,
          controls: true,
          sources: [{
            src: 'your-stream-url.m3u8',
            type: 'application/x-mpegURL'
          }]
        }
      }
    }
  },
  data() {
    return {
      player: null
    }
  },
  mounted() {
    this.player = videojs(this.$refs.videoPlayer, this.options, function onPlayerReady() {
      console.log('Player is ready')
    })
  },
  beforeDestroy() {
    if (this.player) {
      this.player.dispose()
    }
  }
}
</script>

使用 flv.js 实现直播回放

安装 flv.js 依赖

npm install flv.js

创建 FLV 播放器组件

<template>
  <div>
    <video ref="videoElement" controls autoplay muted></video>
  </div>
</template>

<script>
import flvjs from 'flv.js'

export default {
  name: 'FlvPlayer',
  props: {
    url: {
      type: String,
      required: true
    }
  },
  data() {
    return {
      flvPlayer: null
    }
  },
  mounted() {
    if (flvjs.isSupported()) {
      const videoElement = this.$refs.videoElement
      this.flvPlayer = flvjs.createPlayer({
        type: 'flv',
        url: this.url
      })
      this.flvPlayer.attachMediaElement(videoElement)
      this.flvPlayer.load()
      this.flvPlayer.play()
    }
  },
  beforeDestroy() {
    if (this.flvPlayer) {
      this.flvPlayer.destroy()
    }
  }
}
</script>

使用阿里云播放器 SDK

在 public/index.html 中引入阿里云播放器 SDK

<script src="https://g.alicdn.com/de/prismplayer/2.9.0/aliplayer-min.js"></script>

创建阿里云播放器组件

<template>
  <div id="player-con"></div>
</template>

<script>
export default {
  name: 'AliPlayer',
  props: {
    source: {
      type: String,
      required: true
    }
  },
  mounted() {
    const player = new Aliplayer({
      id: 'player-con',
      width: '100%',
      height: '500px',
      autoplay: true,
      source: this.source,
      isLive: false // 设置为false表示播放回放
    }, function(player) {
      console.log('播放器创建完成')
    })
  }
}
</script>

实现直播回放列表功能

创建一个回放列表组件

<template>
  <div>
    <ul>
      <li v-for="item in recordings" :key="item.id" @click="playRecording(item.url)">
        {{ item.name }} - {{ item.date }}
      </li>
    </ul>
    <video-player v-if="currentUrl" :options="{sources: [{src: currentUrl, type: 'application/x-mpegURL'}]}"/>
  </div>
</template>

<script>
import VideoPlayer from './VideoPlayer.vue'

export default {
  components: {
    VideoPlayer
  },
  data() {
    return {
      recordings: [
        { id: 1, name: '直播回放1', date: '2023-01-01', url: 'recording1.m3u8' },
        { id: 2, name: '直播回放2', date: '2023-01-02', url: 'recording2.m3u8' }
      ],
      currentUrl: ''
    }
  },
  methods: {
    playRecording(url) {
      this.currentUrl = url
    }
  }
}
</script>

使用 WebRTC 实现直播回放

安装 webrtc 适配器

npm install webrtc-adapter

创建 WebRTC 播放器组件

vue实现直播回放功能

<template>
  <div>
    <video ref="videoElement" autoplay playsinline></video>
  </div>
</template>

<script>
import 'webrtc-adapter'

export default {
  name: 'WebRTCPlayer',
  props: {
    streamUrl: {
      type: String,
      required: true
    }
  },
  mounted() {
    const video = this.$refs.videoElement
    const pc = new RTCPeerConnection()

    pc.ontrack = function(event) {
      if (event.track.kind === 'video') {
        video.srcObject = event.streams[0]
      }
    }

    fetch(this.streamUrl)
      .then(response => response.json())
      .then(offer => {
        return pc.setRemoteDescription(offer)
      })
      .then(() => pc.createAnswer())
      .then(answer => pc.setLocalDescription(answer))
      .then(() => {
        // 发送answer到信令服务器
      })
  }
}
</script>

这些方法提供了不同技术栈实现直播回放功能的方案,可以根据项目需求和技术栈选择合适的实现方式。视频源格式可以是 HLS (.m3u8)、FLV、MP4 等常见流媒体格式,具体取决于后端提供的直播回放录制格式。

标签: 功能vue
分享给朋友:

相关文章

vue nexttick实现

vue nexttick实现

Vue 中 nextTick 的实现原理 Vue 的 nextTick 是一个用于在下次 DOM 更新循环结束之后执行延迟回调的方法。它的核心实现依赖于 JavaScript 的事件循环机制。 基本…

vue实现addclass

vue实现addclass

Vue 实现动态添加 class 的方法 在 Vue 中动态添加 class 可以通过多种方式实现,以下是常见的几种方法: 使用对象语法 通过绑定一个对象到 :class,可以动态切换 class…

vue实现验证

vue实现验证

Vue 表单验证实现方法 在Vue中实现表单验证可以通过多种方式完成,以下是常见的几种方法: 使用Vuelidate库 Vuelidate是一个轻量级的Vue表单验证库,安装后可以通过简单的配置实现…

vue 实现滑动

vue 实现滑动

Vue 实现滑动效果的方法 在Vue中实现滑动效果可以通过多种方式,以下是几种常见的方法: 使用CSS过渡和动画 通过Vue的<transition>组件结合CSS过渡或动画实现滑动效果…

vue实现 页面

vue实现 页面

Vue 实现页面的核心方法 创建 Vue 项目 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 是官方脚手架工具,适合传统项目;Vite 提供更快的现代构建体验。 npm cre…

vue实现音乐

vue实现音乐

Vue实现音乐播放功能 使用Vue实现音乐播放功能可以通过多种方式完成,以下是几种常见的实现方法: 使用HTML5 Audio API 在Vue组件中直接使用HTML5的Audio对象来控制音乐播放…