欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3使用video.js播放m3u8格式視頻的完整代碼

 更新時(shí)間:2025年08月19日 10:57:27   作者:yzhSWJ  
M3U8是一種基于HTTP?Live?Streaming?(HLS)的視頻格式,它支持視頻的分段傳輸,非常適合用于網(wǎng)絡(luò)直播和點(diǎn)播服務(wù),這篇文章主要介紹了vue3使用video.js播放m3u8格式視頻的相關(guān)資料,需要的朋友可以參考下面

為什么要將.mp4變成.m3u8

簡單來說,將.mp4格式的視頻轉(zhuǎn)換為.m3u8格式主要有以下三個(gè)原因:

1. **視頻切片**:.m3u8文件是HLS(HTTP Live Streaming)協(xié)議的播放列表文件,它將視頻分割成多個(gè)小的TS片段。這種切片方式使得視頻可以邊下載邊播放,提高了播放效率,尤其適用于網(wǎng)絡(luò)流媒體傳輸。

2. **防盜保護(hù)**:通過將視頻文件分割成多個(gè)片段,并結(jié)合加密技術(shù),可以更好地保護(hù)視頻內(nèi)容,防止視頻被盜用或非法傳播。

3. **更流暢的播放體驗(yàn)**:HLS協(xié)議可以根據(jù)網(wǎng)絡(luò)狀況動(dòng)態(tài)調(diào)整視頻質(zhì)量,切換不同碼率的視頻流,從而保證播放的流暢性,減少卡頓現(xiàn)象。

此外,.m3u8格式在各種播放器和設(shè)備上具有良好的兼容性,尤其是在蘋果設(shè)備上,HLS是推薦的流媒體格式。同時(shí),它還支持多語言音軌和多字幕軌的切換,提供更靈活的內(nèi)容呈現(xiàn)方式。

videojs官網(wǎng):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

封裝一個(gè)視頻播放組件

<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更多選項(xiàng)配置可以參考中文文檔:
// 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,瀏覽器準(zhǔn)備好時(shí)開始播放。
        muted: false, // 默認(rèn)情況下將會(huì)消除音頻。
        loop: false, // 導(dǎo)致視頻一結(jié)束就重新開始。
        controls: true,
        preload: 'auto', // auto瀏覽器選擇最佳行為,立即開始加載視頻(如果瀏覽器支持)
        fluid: true, // 當(dāng)true時(shí),將按比例縮放以適應(yīng)其容器。
        type: 'application/x-mpegURl',
        notSupportedMessage: '此視頻暫無法播放,請稍后再試', // 無法播放媒體源時(shí)顯示的默認(rèn)信息。
        textTrackDisplay: false
    }
}

let player: any

onMounted(() => {
    try {
        player = videojs(props.id, options(), () => {
            videojs.log('播放器已經(jīng)準(zhǔn)備好了!')
            player.pause()
            player.on('canplaythrough', function (event: any) {
                emit('videoCanplaythrough', event.target.player.cache_?.duration)
            })
            player.on('play', function () {
                videojs.log('視頻準(zhǔn)備播放')
                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 = "地址";

總結(jié)

到此這篇關(guān)于vue3使用video.js播放m3u8格式視頻的文章就介紹到這了,更多相關(guān)vue3播放m3u8格式視頻內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何在JS文件中獲取Vue組件

    如何在JS文件中獲取Vue組件

    這篇文章主要介紹了如何在JS文件中獲取Vue組件,幫助大家更好的理解和學(xué)習(xí)前端知識(shí),感興趣的朋友可以了解下
    2020-09-09
  • 深入淺析Vue 中 ref 的使用

    深入淺析Vue 中 ref 的使用

    在之前的前端開發(fā)中,為了實(shí)現(xiàn)我們的需求,通常采用的方案是通過 JS/Jquery 直接操縱頁面的 DOM 元素,得益于 Jquery 對于 DOM 元素優(yōu)異的操作能力,我們可以很輕易的對獲取到的 DOM 元素進(jìn)行操作。這篇文章主要介紹了Vue 中 ref 的使用 ,需要的朋友可以參考下
    2019-04-04
  • vue+iview使用樹形控件的具體使用

    vue+iview使用樹形控件的具體使用

    這篇文章主要介紹了vue+iview使用樹形控件的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • vue3中頁面跳轉(zhuǎn)兩種實(shí)現(xiàn)方式

    vue3中頁面跳轉(zhuǎn)兩種實(shí)現(xiàn)方式

    在Vue3中Vue?Router是一個(gè)常用的路由管理庫,它提供了一種簡單而強(qiáng)大的方式來實(shí)現(xiàn)路由跳轉(zhuǎn)和導(dǎo)航,這篇文章主要給大家介紹了關(guān)于vue3中頁面跳轉(zhuǎn)的兩種實(shí)現(xiàn)方式,需要的朋友可以參考下
    2024-09-09
  • JS 實(shí)現(xiàn)獲取對象屬性個(gè)數(shù)的方法小結(jié)

    JS 實(shí)現(xiàn)獲取對象屬性個(gè)數(shù)的方法小結(jié)

    這篇文章主要介紹了JS 實(shí)現(xiàn)獲取對象屬性個(gè)數(shù)的方法,結(jié)合實(shí)例形式總結(jié)分析了JS 獲取對象屬性個(gè)數(shù)的三種常用方法,需要的朋友可以參考下
    2023-05-05
  • Vue動(dòng)態(tài)引用json數(shù)據(jù)的兩種方式

    Vue動(dòng)態(tài)引用json數(shù)據(jù)的兩種方式

    在 Vue 項(xiàng)目中引用 JSON 文件非常簡單,尤其是當(dāng)文件內(nèi)容是一個(gè)數(shù)組時(shí),本文給大家介紹了Vue動(dòng)態(tài)引用json數(shù)據(jù)的兩種方式,并有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2025-04-04
  • vue.js實(shí)現(xiàn)左邊導(dǎo)航切換右邊內(nèi)容

    vue.js實(shí)現(xiàn)左邊導(dǎo)航切換右邊內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了vue.js實(shí)現(xiàn)左邊導(dǎo)航切換右邊內(nèi)容,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 為Vue3?組件標(biāo)注?TS?類型實(shí)例詳解

    為Vue3?組件標(biāo)注?TS?類型實(shí)例詳解

    這篇文章主要為大家介紹了為Vue3?組件標(biāo)注?TS?類型實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • vue data對象重新賦值無效(未更改)的解決方式

    vue data對象重新賦值無效(未更改)的解決方式

    這篇文章主要介紹了vue data對象重新賦值無效(未更改)的解決方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Vue實(shí)現(xiàn)右鍵菜單組件的超詳細(xì)教程(支持快捷鍵)

    Vue實(shí)現(xiàn)右鍵菜單組件的超詳細(xì)教程(支持快捷鍵)

    右鍵菜單組件非常常見,所有的前端開發(fā)工程師都會(huì)遇到類似的功能組件開發(fā)需求,這篇文章主要給大家介紹了關(guān)于Vue實(shí)現(xiàn)右鍵菜單組件的超詳細(xì)教程,文中介紹的方法支持快捷鍵,需要的朋友可以參考下
    2024-02-02

最新評論