vue項(xiàng)目中使用hls.js播放m3u8視頻踩過(guò)的坑小結(jié)
video.js 是一個(gè)功能強(qiáng)大的 HTML5 視頻播放器,結(jié)合 videojs-contrib-hls 插件可以輕松實(shí)現(xiàn) .m3u8 格式視頻的播放。
下面展示一些 代碼片。
安裝依賴
npm install video.js videojs-contrib-hls
一、vue項(xiàng)目中代碼片段 ,作為組件使用
<!-- 視頻 -->
<template>
<div class="video-box">
<!-- 視頻播放器 -->
<video id="video" controls autoplay width="100%" height="100%"></video>
</div>
</template>
<script>
import Hls from "hls.js";
import popWrapper from "@/components/popWrapper";
export default {
name: "videoPop",
data() {
return {
};
},
created() {},
mounted() {
// 攝像頭視頻彈窗傳值
this.bus.$on("videoOpen", (row) => {
this.showWtck(row);
});
},
methods: {
videoClose() {
this.showOceanVideo = false;
},
// 攝像頭視頻彈窗傳值 sxtbh
async showWtck() {
this.videoPlay();
this.showOceanVideo = true;
},
videoPlay(index) {
// 獲取 video 元素
const video = document.getElementById("video");
// HLS 流地址
const videoSrc = 'https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8';//測(cè)試開(kāi)源地址 注:視頻格式需要時(shí)164的,web端此方法不支持165
// 檢查是否支持 HLS.js
if (Hls.isSupported()) {
// 創(chuàng)建 HLS 實(shí)例
const hls = new Hls();
// 加載 .m3u8 文件
hls.loadSource(videoSrc);
// 將 HLS 實(shí)例綁定到 video 元素
hls.attachMedia(video);
// 監(jiān)聽(tīng)事件:當(dāng) HLS 清單文件解析完成后自動(dòng)播放
hls.on(Hls.Events.MANIFEST_PARSED, () => {
console.log("HLS stream loaded successfully");
video.play();
});
// 監(jiān)聽(tīng)錯(cuò)誤事件
hls.on(Hls.Events.ERROR, (event, data) => {
this.videoPlay()
console.error("HLS error:", data);
});
} else if (video.canPlayType("application/vnd.apple.mpegurl")) {
// 如果瀏覽器原生支持 HLS(如 Safari)
video.src = videoSrc;
video.addEventListener("loadedmetadata", () => {
console.log("Native HLS playback supported");
video.play();
});
} else {
alert('您的瀏覽器不支持播放此視頻。')
console.error("Your browser does not support HLS playback.");
}
},
},
beforeDestroy() {
},
};
</script>
<style lang='scss' scoped>
.video-box {
height: 700px;
margin-bottom: 30px;
overflow: auto;
}
</style>
二、以下是H5的Demo可以直接運(yùn)行
直接復(fù)制代碼,驗(yàn)證一下提供方的視頻地址是否有誤
此處踩過(guò)坑 265格式web端不能播放,資源格式264可以正常播放
測(cè)試監(jiān)控地址是否可以正常播放 我使用的是工具 VLC media player,我是圖方便在電腦管家下載的
(H265)

h264

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HLS.js 播放監(jiān)控視頻</title>
<!-- 引入 hls.js -->
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background-color: #f4f4f4;
}
video {
max-width: 100%;
max-height: 100%;
border: 1px solid #ccc;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
}
</style>
</head>
<body>
<div>
<h1 style="text-align: center;">HLS.js 播放監(jiān)控視頻</h1>
<!-- 視頻播放器 -->
<video id="video" controls autoplay width="640" height="360"></video>
</div>
<script>
// 獲取 video 元素
const video = document.getElementById('video');
// HLS 流地址
// const videoSrc = 'https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8';//測(cè)試開(kāi)源地址
// const videoSrc = 'http://cmgw-vpc.lechange.com:8888/LCO/9C07128PAG4B9E2/0/1/20250324T021313/openhz0735a494162c4ba6bb287d7b6a5f4bb7.m3u8?source=open';//大華提供地址165
const videoSrc = 'http://cmgw-vpc.lechange.com:8888/LCO/9C07128PAGC1657/0/0/20250324T015744/openhz136dd7fbc6484a5095579ba383b035bb.m3u8?source=open';//大華提供地址164
// 檢查是否支持 HLS.js
if (Hls.isSupported()) {
// 創(chuàng)建 HLS 實(shí)例
const hls = new Hls();
// 加載 .m3u8 文件
hls.loadSource(videoSrc);
// 將 HLS 實(shí)例綁定到 video 元素
hls.attachMedia(video);
// 監(jiān)聽(tīng)事件:當(dāng) HLS 清單文件解析完成后自動(dòng)播放
hls.on(Hls.Events.MANIFEST_PARSED, () => {
console.log('HLS stream loaded successfully');
video.play();
});
// 監(jiān)聽(tīng)錯(cuò)誤事件
hls.on(Hls.Events.ERROR, (event, data) => {
console.error('HLS error:', data);
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
// 如果瀏覽器原生支持 HLS(如 Safari)
video.src = videoSrc;
video.addEventListener('loadedmetadata', () => {
console.log('Native HLS playback supported');
video.play();
});
} else {
console.error('Your browser does not support HLS playback.');
}
</script>
</body>
</html>
總結(jié)
到此這篇關(guān)于vue項(xiàng)目中使用hls.js播放m3u8視頻踩過(guò)坑的文章就介紹到這了,更多相關(guān)vue hls.js播放m3u8視頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue.js+Echarts開(kāi)發(fā)圖表放大縮小功能實(shí)例
本篇文章主要介紹了vue.js+Echarts開(kāi)發(fā)圖表放大縮小功能實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
vue3 中使用vue?img?cutter?圖片裁剪插件的方法
這篇文章主要介紹了vue3 中使用vue?img?cutter?圖片裁剪插件的方法,首先安裝依賴,構(gòu)建 components/ImgCutter.vue 組件,需要的朋友可以參考下2024-05-05
Element-UI清空表單及驗(yàn)證不生效的問(wèn)題解決
本文主要介紹了Element-UI清空表單及驗(yàn)證不生效的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
vue中遇到的坑之變化檢測(cè)問(wèn)題(數(shù)組相關(guān))
這篇文章主要介紹了vue中遇到的坑之變化檢測(cè)問(wèn)題(數(shù)組相關(guān)) ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
詳解element-ui日期時(shí)間選擇器的日期格式化問(wèn)題
這篇文章主要介紹了詳解element-ui日期時(shí)間選擇器的日期格式化問(wèn)題,本文用到了DateTimePicker來(lái)選擇日期時(shí)間,但是在將數(shù)據(jù)傳回后臺(tái)的過(guò)程中遇到了一些令人頭疼的問(wèn)題,有興趣的一起來(lái)了解一下2019-04-04
解決Vue在Tomcat8下部署頁(yè)面不加載的問(wèn)題
今天小編就為大家分享一篇解決Vue在Tomcat8下部署頁(yè)面不加載的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
Vue3使用TypeIt實(shí)現(xiàn)文字打字機(jī)效果的代碼示例
在現(xiàn)代網(wǎng)頁(yè)設(shè)計(jì)中,文字打字機(jī)效果是一種非常流行的動(dòng)畫(huà)效果,能夠吸引用戶的注意力并提升用戶體驗(yàn),本文將介紹如何在 Vue 3 中使用 TypeIt 庫(kù)實(shí)現(xiàn)文字打字機(jī)效果,并分享一些實(shí)用的技巧和示例,需要的朋友可以參考下2025-01-01
vue如何使用vant組件的field組件disabled修改默認(rèn)樣式
這篇文章主要介紹了vue如何使用vant組件的field組件disabled修改默認(rèn)樣式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05

