使用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()
   }
 }
}
相关推荐
Csvn几秒前
🎯 原生 `<dialog>` 元素:终于可以扔掉一半的自定义弹窗组件了?
前端
Csvn2 分钟前
🎨 CSS @layer:用「层叠优先级」终结样式打架的世纪难题
前端
小罗水43 分钟前
第17章 后台管理端与演示支持
javascript·vue.js·ecmascript
濮水大叔1 小时前
不必把 Vue3 写成“麻花”:从状态碎片到对象协作,重新理解 Zova 的前端心智模型
前端·typescript·vue3·ioc·tsx·zova
Vuji2 小时前
MCP: 一条 tool 调用链路的旅程
前端·人工智能
万少2 小时前
DeepSeek-V4-Flash 正式版上线了,但这 3 个坑我帮你提前踩了
前端·javascript·后端
明月_清风2 小时前
🚀 Palantir Foundry 本体论实战:当 Ontology 从"知识图谱"进化为"企业操作系统"
前端·后端
驳是2 小时前
入坑 Nginx,看这一篇就够了
前端
宁风NF3 小时前
JavaScript:网络请求与前端通信
开发语言·前端·javascript·网络·学习·ecmascript
明月_清风3 小时前
从概念到代码:用 Ontology 构建你的第一个知识图谱
前端·后端