当前位置:首页 > 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 播放器组件

<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
分享给朋友:

相关文章

vue实现发送值接受值

vue实现发送值接受值

Vue 实现父子组件传值 父组件向子组件传值(props) 父组件通过 v-bind 或简写 : 向子组件传递数据。子组件通过 props 接收数据。 父组件代码: <templat…

vue实现打印二维码

vue实现打印二维码

安装二维码生成库 使用 qrcode 或 vue-qrcode 库生成二维码。通过 npm 安装: npm install qrcode vue-qrcode 生成二维码 在 Vue 组…

vue 实现菜单

vue 实现菜单

Vue 实现菜单的方法 使用 Vue 实现菜单可以通过多种方式,以下是几种常见的方法: 使用 Vue Router 实现动态路由菜单 通过 Vue Router 可以动态生成菜单,根据路由配置自动…

vue observer实现

vue observer实现

Vue Observer 实现原理 Vue 的响应式系统核心是通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现的 Observer 模式。以下是关键实现细…

vue实现水印

vue实现水印

Vue 实现水印的方法 使用 CSS 背景图 通过 CSS 的 background-image 和 background-repeat 属性实现水印效果。创建一个包含水印文本的 Canvas,将其转…

vue底层实现

vue底层实现

Vue.js 的底层实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现细节: 响应式系统 Vue…