使用Vue播放M3U8视频流的方法

使用Vue播放M3U8视频流的方法

安装依赖

需要安装video.js和videojs-contrib-hls插件,用于解析和播放M3U8格式的视频流。

css 复制代码
npm install video.js videojs-contrib-hls

引入并初始化Video.js

在Vue组件中引入Video.js及相关样式,初始化播放器并配置HLS支持。

javascript 复制代码
import videojs from 'video.js'
import 'video.js/dist/video-js.css'
import 'videojs-contrib-hls'

export default {
  mounted() {
    this.initVideoPlayer()
  },
  methods: {
    initVideoPlayer() {
      this.player = videojs(this.$refs.videoPlayer, {
        autoplay: true,
        controls: true,
        sources: [{
          src: 'your-m3u8-url.m3u8',
          type: 'application/x-mpegURL'
        }]
      })
    }
  },
  beforeDestroy() {
    if (this.player) {
      this.player.dispose()
    }
  }
}
 

模板部分

在模板中添加video标签作为播放器容器,需设置data-setup属性为空对象以启用Video.js初始化。

html 复制代码
<template>
  <div>
    <video 
      ref="videoPlayer" 
      class="video-js vjs-default-skin" 
      width="640" 
      height="360"
      data-setup="{}">
    </video>
  </div>
</template>
 

样式调整

css 复制代码
.video-js {
 width: 100%;
 max-width: 640px;
 margin: 0 auto;
}

通过CSS调整播放器尺寸和外观,确保适应页面布局。

注意事项

确保M3U8视频流地址可跨域访问,或配置服务器CORS策略。

移动端可能需要添加playsinline属性以实现内联播放。

若使用HTTPS环境,需确保视频流地址同为HTTPS。

完整组件示例

html 复制代码
<template>
  <div class="video-container">
    <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 {
  props: {
    src: {
      type: String,
      required: true
    }
  },
  mounted() {
    this.initPlayer()
  },
  methods: {
    initPlayer() {
      this.player = videojs(this.$refs.videoPlayer, {
        autoplay: false,
        controls: true,
        sources: [{
          src: this.src,
          type: 'application/x-mpegURL'
        }]
      })
    }
  },
  beforeDestroy() {
    if (this.player) {
      this.player.dispose()
    }
  }
}
</script>

<style scoped>
.video-container {
  margin: 20px auto;
  width: 80%;
}
</style>
 

替代方案(使用hls.js)

若需更轻量级方案,可使用hls.js库直接处理M3U8流。

安装hls.js

bash 复制代码
npm install hls.js
 

实现代码

javascript 复制代码
import Hls from 'hls.js'

export default {
 data() {
   return {
     hls: null
   }
 },
 mounted() {
   this.loadVideo()
 },
 methods: {
   loadVideo() {
     const videoSrc = 'your-m3u8-url.m3u8'
     const video = this.$refs.videoPlayer

     if (Hls.isSupported()) {
       this.hls = new Hls()
       this.hls.loadSource(videoSrc)
       this.hls.attachMedia(video)
     } else if (video.canPlayType('application/vnd.apple.mpegurl')) {
       video.src = videoSrc
     }
   }
 },
 beforeDestroy() {
   if (this.hls) {
     this.hls.destroy()
   }
 }
}
相关推荐
恋猫de小郭9 分钟前
Android CLI 支持 AI Agent 通过 Device Streaming 调试云真机
android·前端·flutter
Wang's Blog11 分钟前
Java 项目实战: 外卖平台优化-前端dist部署与Nginx反向代理rewrite
java·前端·nginx
专业程序开发源11 分钟前
springboot生命故事书制作小程序65290-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·小程序·课程设计
鬓戈14 分钟前
Claude Code frontend-design 插件调研 与 Vue 旧系统风格一致性方案
前端·vue.js·人工智能
开开心心就好20 分钟前
以图搜图找重复图片,本地工具离线就能用
javascript·智能手机·ffmpeg·c#·ocr·word·音视频
IT_陈寒25 分钟前
SpringBoot自动配置的坑我帮你踩过了
前端·人工智能·后端
vx_Biye_Design27 分钟前
springboot角色扮演服务平台65161-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·spring·课程设计
企业数字化笔记29 分钟前
视频局部合成怎么做得自然?掩膜修复、边缘羽化、时序稳定与背景替换
java·javascript·音视频
vx_Biye_Design39 分钟前
springboot咖啡厅顾客点单管理系统12080-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·课程设计·express
其实防守也摸鱼1 小时前
网安自测题:掌握核心知识点的实用练习
linux·运维·服务器·前端·数据库·sql·xss