vue3使用video.js播放m3u8格式视频的完整代码

 更新时间:2025年08月19日 10:57:27   作者:yzhSWJ  
M3U8是一种基于HTTP Live Streaming (HLS)的视频格式,它支持视频的分段传输,非常适合用于网络直播和点播服务,这篇文章主要介绍了vue3使用video.js播放m3u8格式视频的相关资料,需要的朋友可以参考下面

为什么要将.mp4变成.m3u8

简单来说,将.mp4格式的视频转换为.m3u8格式主要有以下三个原因:

1. **视频切片**:.m3u8文件是HLS(HTTP Live Streaming)协议的播放列表文件,它将视频分割成多个小的TS片段。这种切片方式使得视频可以边下载边播放,提高了播放效率,尤其适用于网络流媒体传输。

2. **防盗保护**:通过将视频文件分割成多个片段,并结合加密技术,可以更好地保护视频内容,防止视频被盗用或非法传播。

3. **更流畅的播放体验**:HLS协议可以根据网络状况动态调整视频质量,切换不同码率的视频流,从而保证播放的流畅性,减少卡顿现象。

此外,.m3u8格式在各种播放器和设备上具有良好的兼容性,尤其是在苹果设备上,HLS是推荐的流媒体格式。同时,它还支持多语言音轨和多字幕轨的切换,提供更灵活的内容呈现方式。

videojs官网:videojs.com/guides/

videojs 中文文档:https://gitcode.gitcode.host/docs-cn/video.js-docs-cn/index.html

安装依赖

npm i video.js
npm i videojs-contrib-hls

封装一个视频播放组件

<template>
    <div v-bind="$attrs" class="videoPlayer">
        <video
            class="video-js"
            :id="id"
            style="width: 100%; height: 100%"
            :poster="poster"
        >
            <source v-if="src" :src="src" />
        </video>
    </div>
</template>

<script setup lang="ts">
import { onMounted, onBeforeUnmount, watch, ref } from 'vue'
import 'video.js/dist/video-js.css'
import videojs from 'video.js'

const overrideNative = ref(false)
const props = defineProps({
    id: { type: String, default: 'vd' },
    src: { type: String, default: '' },
    poster: { type: String, default: '' }
})

const emit = defineEmits([
    'videoCanplaythrough',
    'videoPlay',
    'videoPlaying',
    'videoPause'
])

// VideoJs更多选项配置可以参考中文文档:
// https://gitcode.gitcode.host/docs-cn/video.js-docs-cn/docs/guides/options.html
function options() {
    return {
        html5: {
            hls: {
                overrideNative: overrideNative
            },
            nativeVideoTracks: !overrideNative,
            nativeAudioTracks: !overrideNative,
            nativeTextTracks: !overrideNative
        },
        autoplay: true, // true,浏览器准备好时开始播放。
        muted: false, // 默认情况下将会消除音频。
        loop: false, // 导致视频一结束就重新开始。
        controls: true,
        preload: 'auto', // auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
        fluid: true, // 当true时,将按比例缩放以适应其容器。
        type: 'application/x-mpegURl',
        notSupportedMessage: '此视频暂无法播放,请稍后再试', // 无法播放媒体源时显示的默认信息。
        textTrackDisplay: false
    }
}

let player: any

onMounted(() => {
    try {
        player = videojs(props.id, options(), () => {
            videojs.log('播放器已经准备好了!')
            player.pause()
            player.on('canplaythrough', function (event: any) {
                emit('videoCanplaythrough', event.target.player.cache_?.duration)
            })
            player.on('play', function () {
                videojs.log('视频准备播放')
                emit('videoPlay')
            })
            player.on('playing', function () {
                videojs.log('视频已开始播放')
                emit('videoPlaying')
            })
            player.on('pause', function (event: any) {
                emit('videoPause', event.target.player.cache_?.currentTime)
            })
        })
    } catch (error) {
        console.log('catch--->', error)
    }
})

onBeforeUnmount(() => {
    if (player) {
        player.dispose()
    }
})
</script>

<style scoped>
.videoPlayer {
    width: 100%;
    max-width: 800px;
    height: 450px;
    position: relative;
    overflow: hidden;
}

.video-js {
    padding-top: 0 !important;
}
</style>

使用组件

 <!-- 视频弹窗 -->
        <n-modal v-model:show="showVideoModal" :style="{ width: '800px' }">
            <div class="video-container" style="padding: 0;">
                <VideoPlayer
                    :src="currentVideoSrc"
                    id="videoPlayer"
                    :poster="jboltai"
                />
            </div>
        </n-modal>
import jboltai from '@/assets/jboltai.png';
import VideoPlayer from "./VideoPlayer.vue"

const currentVideoSrc = ref('');

currentVideoSrc.value = "地址";

总结

到此这篇关于vue3使用video.js播放m3u8格式视频的文章就介绍到这了,更多相关vue3播放m3u8格式视频内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何在JS文件中获取Vue组件

    如何在JS文件中获取Vue组件

    这篇文章主要介绍了如何在JS文件中获取Vue组件,帮助大家更好的理解和学习前端知识,感兴趣的朋友可以了解下
    2020-09-09
  • 深入浅析Vue 中 ref 的使用

    深入浅析Vue 中 ref 的使用

    在之前的前端开发中,为了实现我们的需求,通常采用的方案是通过 JS/Jquery 直接操纵页面的 DOM 元素,得益于 Jquery 对于 DOM 元素优异的操作能力,我们可以很轻易的对获取到的 DOM 元素进行操作。这篇文章主要介绍了Vue 中 ref 的使用 ,需要的朋友可以参考下
    2019-04-04
  • vue+iview使用树形控件的具体使用

    vue+iview使用树形控件的具体使用

    这篇文章主要介绍了vue+iview使用树形控件的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • vue3中页面跳转两种实现方式

    vue3中页面跳转两种实现方式

    在Vue3中Vue Router是一个常用的路由管理库,它提供了一种简单而强大的方式来实现路由跳转和导航,这篇文章主要给大家介绍了关于vue3中页面跳转的两种实现方式,需要的朋友可以参考下
    2024-09-09
  • JS 实现获取对象属性个数的方法小结

    JS 实现获取对象属性个数的方法小结

    这篇文章主要介绍了JS 实现获取对象属性个数的方法,结合实例形式总结分析了JS 获取对象属性个数的三种常用方法,需要的朋友可以参考下
    2023-05-05
  • Vue动态引用json数据的两种方式

    Vue动态引用json数据的两种方式

    在 Vue 项目中引用 JSON 文件非常简单,尤其是当文件内容是一个数组时,本文给大家介绍了Vue动态引用json数据的两种方式,并有相关的代码示例供大家参考,需要的朋友可以参考下
    2025-04-04
  • vue.js实现左边导航切换右边内容

    vue.js实现左边导航切换右边内容

    这篇文章主要为大家详细介绍了vue.js实现左边导航切换右边内容,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • 为Vue3 组件标注 TS 类型实例详解

    为Vue3 组件标注 TS 类型实例详解

    这篇文章主要为大家介绍了为Vue3 组件标注 TS 类型实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • vue data对象重新赋值无效(未更改)的解决方式

    vue data对象重新赋值无效(未更改)的解决方式

    这篇文章主要介绍了vue data对象重新赋值无效(未更改)的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Vue实现右键菜单组件的超详细教程(支持快捷键)

    Vue实现右键菜单组件的超详细教程(支持快捷键)

    右键菜单组件非常常见,所有的前端开发工程师都会遇到类似的功能组件开发需求,这篇文章主要给大家介绍了关于Vue实现右键菜单组件的超详细教程,文中介绍的方法支持快捷键,需要的朋友可以参考下
    2024-02-02

最新评论