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

vue項(xiàng)目實(shí)現(xiàn)m3u8流媒體播放詳細(xì)圖文教程

 更新時(shí)間:2024年09月05日 10:44:02   作者:SimmerLee.  
m3u8是一種常用的視頻流媒體格式,通常用于在Web上播放視頻,這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目實(shí)現(xiàn)m3u8流媒體播放的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

1.背景

由于項(xiàng)目中視頻文件數(shù)量多,使用原始的mp4格式耗費(fèi)資源,所以采用媒體轉(zhuǎn)換技術(shù)來查看媒體資源,普通的video播放并不適用m3u8以及其他格式的流媒體,本文實(shí)現(xiàn)如何在vue項(xiàng)目中實(shí)現(xiàn)播放流媒體的技術(shù)。

2.插件

原本是想采用Hls.js第三方庫(kù)來手動(dòng)寫一下代碼,但是查到了使用Hls.js封裝的更好看的第三方插件vue3-video-play,我直接就是拿來主義??!

vue3-video-play官網(wǎng):Vue3-video-play | Vue3VideoPlay

3. 安裝

npm安裝:

npm install vue3-video-play --save

yarn安裝:

yarn add vue3-video-play --save

這個(gè)插件本身的包,存在一些引入問題,所以在頁(yè)面中會(huì)直接報(bào)錯(cuò),我們需要在node_modules包下面找到vue3-video-play這個(gè)文件夾,點(diǎn)擊package.json文件,將module引入的文件修改為index.mjs,不明白的話直接查看上一層dist文件夾就知道為何要改了。

4. 在vue組件中使用

因?yàn)槲抑挥袀€(gè)別組件使用,所以按需引入

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

主要核心代碼就是這些,因?yàn)槲业膙ue組件代碼過多所以提供主要代碼,大致邏輯是這些 :

  • 監(jiān)聽器 (watch):

    • watch 是 Vue 的響應(yīng)式系統(tǒng)的一部分,用于監(jiān)控一個(gè)或多個(gè)響應(yīng)式數(shù)據(jù)的變化。
    • 在這里,它監(jiān)聽的是 showModal,即一個(gè)響應(yīng)式引用或狀態(tài)變量。
  • 條件判斷 (newVal && videoUrl.value):

    • 只有當(dāng) showModal 為 true 且 videoUrl 有值時(shí),才會(huì)執(zhí)行下面的邏輯。這意味著,只有當(dāng)模態(tài)框顯示并且有視頻 URL 的時(shí)候,才會(huì)去處理視頻播放。
  • 判斷視頻類型 (videoUrl.value.endsWith('.m3u8')):

    • endsWith('.m3u8') 檢查 videoUrl 的值是否以 .m3u8 結(jié)尾。這通常用于判斷視頻文件格式是否是 HLS(HTTP Live Streaming),一種流媒體協(xié)議。
    • 如果是 .m3u8,設(shè)置 isM3u8 為 true,并配置 options 對(duì)象以支持 HLS 播放。
    • HLS 需要特殊的播放器支持,因此我們?cè)O(shè)置 options.src 和 options.type 為 'm3u8'
  • 處理非 .m3u8 視頻:

    • 如果不是 .m3u8,意味著視頻是普通格式(如 .mp4)。
    • 將 isM3u8 設(shè)置為 false。
    • 使用 nextTick 保證 DOM 更新完成后執(zhí)行以下操作:
      • 設(shè)置視頻元素的高度為 100%。
      • 更新視頻元素的 src 屬性以指向視頻 URL。
      • 添加事件監(jiān)聽器 loadedmetadata
      • 事件觸發(fā)后自動(dòng)調(diào)用 videoRef.value.play() 播放視頻。
 <n-modal v-model:show="showModal" title="視頻預(yù)覽" positive-text="確認(rèn)" @positive-click="showModal = false">
      <div class="w-[600px] rounded-md">
        <vue3videoPlay
          v-if="isM3u8"
          width="600px"
          title="視頻預(yù)覽"
          :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()
        })
      })
    }
  }
})

總結(jié) 

到此這篇關(guān)于vue項(xiàng)目實(shí)現(xiàn)m3u8流媒體播放的文章就介紹到這了,更多相關(guān)vue實(shí)現(xiàn)m3u8流媒體播放內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于vue實(shí)現(xiàn)簡(jiǎn)易打地鼠游戲

    基于vue實(shí)現(xiàn)簡(jiǎn)易打地鼠游戲

    這篇文章主要為大家詳細(xì)介紹了基于vue實(shí)現(xiàn)簡(jiǎn)易打地鼠游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Vue中props用法介紹

    Vue中props用法介紹

    這篇文章主要給大家分享的是 Vue中props用法介紹,? 在Vue中通過props,可以將原本孤立的組件串聯(lián)起來,也就是可以子組件可以接收父組件傳遞過來的data,下面我們一起進(jìn)入文章看看內(nèi)容的詳細(xì)介紹吧,需要的朋友也可以參考一下
    2021-11-11
  • 第一個(gè)Vue插件從封裝到發(fā)布

    第一個(gè)Vue插件從封裝到發(fā)布

    這篇文章主要為大家詳細(xì)介紹了第一個(gè)Vue插件從封裝到發(fā)布的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 詳解在不使用ssr的情況下解決Vue單頁(yè)面SEO問題

    詳解在不使用ssr的情況下解決Vue單頁(yè)面SEO問題

    這篇文章主要介紹了在不使用ssr的情況下解決Vue單頁(yè)面SEO問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • Vue 自定義標(biāo)簽的src屬性不能使用相對(duì)路徑的解決

    Vue 自定義標(biāo)簽的src屬性不能使用相對(duì)路徑的解決

    這篇文章主要介紹了Vue 自定義標(biāo)簽的src屬性不能使用相對(duì)路徑的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Vue3中reactive丟失響應(yīng)式問題詳解

    Vue3中reactive丟失響應(yīng)式問題詳解

    在vue3中,如果你用reactive聲明了一個(gè)對(duì)象,用另一個(gè)對(duì)象直接給它賦值,那么它就會(huì)失去響應(yīng)式,下面這篇文章主要給大家介紹了關(guān)于Vue3中reactive丟失響應(yīng)式問題的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • vue中eventbus被多次觸發(fā)以及踩過的坑

    vue中eventbus被多次觸發(fā)以及踩過的坑

    這篇文章主要介紹了vue中eventbus被多次觸發(fā)以及踩過的坑,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • vue中this.$refs.name.offsetHeight獲取不到值問題

    vue中this.$refs.name.offsetHeight獲取不到值問題

    這篇文章主要介紹了vue中this.$refs.name.offsetHeight獲取不到值問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • vue3 setup中defineEmits與defineProps的使用案例詳解

    vue3 setup中defineEmits與defineProps的使用案例詳解

    在父組件中定義String、Number、Boolean、Array、Object、Date、Function、Symbol這些類型的數(shù)據(jù),使用defineEmits會(huì)返回一個(gè)方法,使用一個(gè)變量emits(變量名隨意)去接收,本文給大家介紹vue3 setup中defineEmits與defineProps的使用案例,感興趣的朋友一起看看吧
    2023-10-10
  • 深入理解Vue官方文檔梳理之全局API

    深入理解Vue官方文檔梳理之全局API

    本篇文章主要介紹了深入理解Vue官方文檔梳理之全局API,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11

最新評(píng)論