vue项目实现m3u8流媒体播放详细图文教程

 更新时间:2024年09月05日 10:44:02   作者:SimmerLee.  
m3u8是一种常用的视频流媒体格式,通常用于在Web上播放视频,这篇文章主要给大家介绍了关于vue项目实现m3u8流媒体播放的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

1.背景

由于项目中视频文件数量多,使用原始的mp4格式耗费资源,所以采用媒体转换技术来查看媒体资源,普通的video播放并不适用m3u8以及其他格式的流媒体,本文实现如何在vue项目中实现播放流媒体的技术。

2.插件

原本是想采用Hls.js第三方库来手动写一下代码,但是查到了使用Hls.js封装的更好看的第三方插件vue3-video-play,我直接就是拿来主义!!

vue3-video-play官网:Vue3-video-play | Vue3VideoPlay

3. 安装

npm安装:

npm install vue3-video-play --save

yarn安装:

yarn add vue3-video-play --save

这个插件本身的包,存在一些引入问题,所以在页面中会直接报错,我们需要在node_modules包下面找到vue3-video-play这个文件夹,点击package.json文件,将module引入的文件修改为index.mjs,不明白的话直接查看上一层dist文件夹就知道为何要改了。

4. 在vue组件中使用

因为我只有个别组件使用,所以按需引入

import vue3videoPlay from 'vue3-video-play' // 引入组件
import 'vue3-video-play/dist/style.css' // 引入css

主要核心代码就是这些,因为我的vue组件代码过多所以提供主要代码,大致逻辑是这些 :

  • 监听器 (watch):

    • watch 是 Vue 的响应式系统的一部分,用于监控一个或多个响应式数据的变化。
    • 在这里,它监听的是 showModal,即一个响应式引用或状态变量。
  • 条件判断 (newVal && videoUrl.value):

    • 只有当 showModal 为 true 且 videoUrl 有值时,才会执行下面的逻辑。这意味着,只有当模态框显示并且有视频 URL 的时候,才会去处理视频播放。
  • 判断视频类型 (videoUrl.value.endsWith('.m3u8')):

    • endsWith('.m3u8') 检查 videoUrl 的值是否以 .m3u8 结尾。这通常用于判断视频文件格式是否是 HLS(HTTP Live Streaming),一种流媒体协议。
    • 如果是 .m3u8,设置 isM3u8 为 true,并配置 options 对象以支持 HLS 播放。
    • HLS 需要特殊的播放器支持,因此我们设置 options.src 和 options.type 为 'm3u8'
  • 处理非 .m3u8 视频:

    • 如果不是 .m3u8,意味着视频是普通格式(如 .mp4)。
    • 将 isM3u8 设置为 false
    • 使用 nextTick 保证 DOM 更新完成后执行以下操作:
      • 设置视频元素的高度为 100%。
      • 更新视频元素的 src 属性以指向视频 URL。
      • 添加事件监听器 loadedmetadata
      • 事件触发后自动调用 videoRef.value.play() 播放视频。
 <n-modal v-model:show="showModal" title="视频预览" positive-text="确认" @positive-click="showModal = false">
      <div class="w-[600px] rounded-md">
        <vue3videoPlay
          v-if="isM3u8"
          width="600px"
          title="视频预览"
          :src="options.src"
          :type="options.type"
          :auto-play="false"
        />
        <div v-else class="h-[550px] object-fill">
          <video ref="videoRef" class="w-full bg-black" controls autoplay>
            <source src="" type="application/x-mpegURL">
          </video>
        </div>
      </div>
    </n-modal>


const videoUrl = ref(null)
const showModal = ref(false)
const videoRef = ref(null)
const isM3u8 = ref(false)
const options = reactive({
  src: '', // 视频源
  type: '', // 视频类型
})

watch(showModal, (newVal) => {
  if (newVal && videoUrl.value) {
    if (videoUrl.value.endsWith('.m3u8')) {
      isM3u8.value = true
      options.src = videoUrl.value
      options.type = 'm3u8'
    }
    else {
      isM3u8.value = false
      nextTick(() => {
        videoRef.value.style.height = '100%'
        videoRef.value.src = videoUrl.value
        videoRef.value.addEventListener('loadedmetadata', () => {
          videoRef.value.play()
        })
      })
    }
  }
})

总结 

到此这篇关于vue项目实现m3u8流媒体播放的文章就介绍到这了,更多相关vue实现m3u8流媒体播放内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue中的baseurl如何配置

    Vue中的baseurl如何配置

    这篇文章主要介绍了Vue中的baseurl如何配置问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • vue多功能渲染函数h()的使用和多种应用场景

    vue多功能渲染函数h()的使用和多种应用场景

    我们在vue项目里面用HTML标签构建页面时最终会被转化成vnode,而h()是直接创建vnode,因此h()能以一种更灵活的方式在各种各样情景下构建组件的渲染逻辑,并且能带来性能方式的提升,本文介绍如何使用和列出具体的应用场景,需要的朋友可以参考下
    2024-08-08
  • element表格翻页第2页从1开始编号(后端从0开始分页)

    element表格翻页第2页从1开始编号(后端从0开始分页)

    这篇文章主要介绍了element表格翻页第2页从1开始编号(后端从0开始分页),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • avue实现自定义搜索栏及清空搜索事件的实践

    avue实现自定义搜索栏及清空搜索事件的实践

    本文主要介绍了avue实现自定义搜索栏及清空搜索事件的实践,主要包括对搜索栏进行自定义,并通过按钮实现折叠搜索栏效果,具有一定的参考价值,感兴趣的可以了解一下
    2021-12-12
  • vue中实现一个项目里兼容移动端和pc端

    vue中实现一个项目里兼容移动端和pc端

    这篇文章主要介绍了vue中实现一个项目里兼容移动端和pc端问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Vue Element 分组+多选+可搜索Select选择器实现示例

    Vue Element 分组+多选+可搜索Select选择器实现示例

    这篇文章主要介绍了Vue Element 分组+多选+可搜索Select选择器实现示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • vue的异步数据更新机制与$nextTick用法解读

    vue的异步数据更新机制与$nextTick用法解读

    这篇文章主要介绍了vue的异步数据更新机制与$nextTick用法解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 一文详解如何在Vue3+Vite中使用JSX

    一文详解如何在Vue3+Vite中使用JSX

    vite是一个由vue作者尤雨溪专门为vue打造的开发利器,其目的是使 vue项目的开发更加简单和快速,下面这篇文章主要给大家介绍了关于如何在Vue3+Vite中使用JSX的相关资料,需要的朋友可以参考下
    2023-02-02
  • Vue获取路由信息的8种方法详解

    Vue获取路由信息的8种方法详解

    本文详细介绍了在Vue应用中获取路由信息的8种方法,包括$route对象、useRouteHook、路由守卫等,并提供了不同场景下的推荐方案和实战案例,需要的朋友可以参考下
    2026-01-01
  • 详解vue中使用微信jssdk

    详解vue中使用微信jssdk

    这篇文章主要介绍了vue中使用微信jssdk,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论