最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

1.背景

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

2.插件

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

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è)插件本身的包,存在一些引入問(wèn)題,所以在頁(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組件代碼過(guò)多所以提供主要代碼,大致邏輯是這些 :

  • 監(jiān)聽(tīng)器 (watch):

    • watch 是 Vue 的響應(yīng)式系統(tǒng)的一部分,用于監(jiān)控一個(gè)或多個(gè)響應(yīng)式數(shù)據(jù)的變化。
    • 在這里,它監(jiān)聽(tīng)的是 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)聽(tīng)器 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中的baseurl如何配置

    Vue中的baseurl如何配置

    這篇文章主要介紹了Vue中的baseurl如何配置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue多功能渲染函數(shù)h()的使用和多種應(yīng)用場(chǎng)景

    vue多功能渲染函數(shù)h()的使用和多種應(yīng)用場(chǎng)景

    我們?cè)趘ue項(xiàng)目里面用HTML標(biāo)簽構(gòu)建頁(yè)面時(shí)最終會(huì)被轉(zhuǎn)化成vnode,而h()是直接創(chuàng)建vnode,因此h()能以一種更靈活的方式在各種各樣情景下構(gòu)建組件的渲染邏輯,并且能帶來(lái)性能方式的提升,本文介紹如何使用和列出具體的應(yīng)用場(chǎng)景,需要的朋友可以參考下
    2024-08-08
  • element表格翻頁(yè)第2頁(yè)從1開(kāi)始編號(hào)(后端從0開(kāi)始分頁(yè))

    element表格翻頁(yè)第2頁(yè)從1開(kāi)始編號(hào)(后端從0開(kāi)始分頁(yè))

    這篇文章主要介紹了element表格翻頁(yè)第2頁(yè)從1開(kāi)始編號(hào)(后端從0開(kāi)始分頁(yè)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • avue實(shí)現(xiàn)自定義搜索欄及清空搜索事件的實(shí)踐

    avue實(shí)現(xiàn)自定義搜索欄及清空搜索事件的實(shí)踐

    本文主要介紹了avue實(shí)現(xiàn)自定義搜索欄及清空搜索事件的實(shí)踐,主要包括對(duì)搜索欄進(jìn)行自定義,并通過(guò)按鈕實(shí)現(xiàn)折疊搜索欄效果,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-12-12
  • vue中實(shí)現(xiàn)一個(gè)項(xiàng)目里兼容移動(dòng)端和pc端

    vue中實(shí)現(xiàn)一個(gè)項(xiàng)目里兼容移動(dòng)端和pc端

    這篇文章主要介紹了vue中實(shí)現(xiàn)一個(gè)項(xiàng)目里兼容移動(dòng)端和pc端問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Vue Element 分組+多選+可搜索Select選擇器實(shí)現(xiàn)示例

    Vue Element 分組+多選+可搜索Select選擇器實(shí)現(xiàn)示例

    這篇文章主要介紹了Vue Element 分組+多選+可搜索Select選擇器實(shí)現(xiàn)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • vue的異步數(shù)據(jù)更新機(jī)制與$nextTick用法解讀

    vue的異步數(shù)據(jù)更新機(jī)制與$nextTick用法解讀

    這篇文章主要介紹了vue的異步數(shù)據(jù)更新機(jī)制與$nextTick用法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 一文詳解如何在Vue3+Vite中使用JSX

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

    vite是一個(gè)由vue作者尤雨溪專門為vue打造的開(kāi)發(fā)利器,其目的是使 vue項(xiàng)目的開(kāi)發(fā)更加簡(jiǎn)單和快速,下面這篇文章主要給大家介紹了關(guān)于如何在Vue3+Vite中使用JSX的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • Vue獲取路由信息的8種方法詳解

    Vue獲取路由信息的8種方法詳解

    本文詳細(xì)介紹了在Vue應(yīng)用中獲取路由信息的8種方法,包括$route對(duì)象、useRouteHook、路由守衛(wèi)等,并提供了不同場(chǎng)景下的推薦方案和實(shí)戰(zhàn)案例,需要的朋友可以參考下
    2026-01-01
  • 詳解vue中使用微信jssdk

    詳解vue中使用微信jssdk

    這篇文章主要介紹了vue中使用微信jssdk,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論

刚察县| 澎湖县| 莱阳市| 赤城县| 梅河口市| 桃江县| 增城市| 金昌市| 奈曼旗| 大化| 上杭县| 兰考县| 惠州市| 山阳县| 永平县| 临湘市| 神农架林区| 台湾省| 辰溪县| 卫辉市| 嘉义市| 桂林市| 房产| 永登县| 玉环县| 得荣县| 邻水| 青岛市| 工布江达县| 乐都县| 建昌县| 双流县| 河曲县| 上蔡县| 永胜县| 彰武县| 莱芜市| 冕宁县| 时尚| 桃源县| 达州市|