vue3使用video.js播放m3u8格式視頻的完整代碼
為什么要將.mp4變成.m3u8
簡(jiǎn)單來說,將.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: '此視頻暫無法播放,請(qǐng)稍后再試', // 無法播放媒體源時(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue中的$emit 與$on父子組件與兄弟組件的之間通信方式
本文主要對(duì)vue 用$emit 與 $on 來進(jìn)行組件之間的數(shù)據(jù)傳輸。重點(diǎn)給大家介紹vue中的$emit 與$on父子組件與兄弟組件的之間通信方式,感興趣的朋友一起看看2018-05-05
vue elementui select標(biāo)簽監(jiān)聽change事件失效問題
這篇文章主要介紹了vue elementui select標(biāo)簽監(jiān)聽change事件失效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
vue自適應(yīng)布局postcss-px2rem詳解
這篇文章主要介紹了vue自適應(yīng)布局(postcss-px2rem)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2022-05-05
Element中select多數(shù)據(jù)加載優(yōu)化的實(shí)現(xiàn)
本文主要介紹了Element中select多數(shù)據(jù)加載優(yōu)化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
vue3.0實(shí)現(xiàn)點(diǎn)擊切換驗(yàn)證碼(組件)及校驗(yàn)
這篇文章主要為大家詳細(xì)介紹了vue3.0實(shí)現(xiàn)點(diǎn)擊切換驗(yàn)證碼(組件)及校驗(yàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
Vue 中使用lodash對(duì)事件進(jìn)行防抖和節(jié)流操作
這篇文章主要介紹了Vue 中使用lodash對(duì)事件進(jìn)行防抖和節(jié)流操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07
如何使用yarn創(chuàng)建vite+vue3&&electron多端運(yùn)行
這篇文章主要介紹了如何使用yarn創(chuàng)建vite+vue3&&electron多端運(yùn)行,本文分步驟給大家介紹的非常詳細(xì),包括使用yarn創(chuàng)建vite+vue3項(xiàng)目會(huì)遇到哪些問題,感興趣的朋友跟隨小編一起看看吧2024-03-03
vue3.0 CLI - 2.6 - 組件的復(fù)用入門教程
這篇文章主要介紹了 vue3.0 CLI - 2.6 - 組件的復(fù)用,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2018-09-09

