前端vue播放m3u8、flv、mp4視頻的方法示例
1、播放m3u8格式視頻
安裝依賴
npm install video.js --save // 視頻播放器插件 npm install videojs-contrib-hls --save // 播放hls流插件
頁(yè)面引入插件
import videojs from "video.js"; import "video.js/dist/video-js.css";
頁(yè)面中的使用
<template>
<div class="myVideo">
<video id="videoPlayer" class="video-js vjs-default-skin" controls playsinline autoplay="autoplay" width="500px">
<source :src="attachmentLink" type="application/x-mpegURL" />
</video>
</div>
</template>
<script>
import videojs from "video.js";
import "video.js/dist/video-js.css";
export default {
data() {
return {
dp: null,
options: {
playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度
aspectRatio:'16:9',
notSupportedMessage: '此視頻暫無(wú)法播放,請(qǐng)稍后再試', //允許覆蓋Video.js無(wú)法播放媒體源時(shí)顯示的默認(rèn)信息。
autoplay: false, // 設(shè)置自動(dòng)播放
muted: true, // 設(shè)置了它為true,才可實(shí)現(xiàn)自動(dòng)播放,同時(shí)視頻也被靜音(Chrome66及以上版本,禁止音視頻的自動(dòng)播放)
preload: "auto", // 預(yù)加載
controls: true, // 顯示播放的控件
},
attachmentLink: "https://e-sign.dms.t.cn-np.com/files/m3u8_file/c4b94118-3c8d-4410-9987-985c2b44c278/c4b94118-3c8d-4410-9987-985c2b44c278.m3u8",
};
},
mounted() {
// 使用 $nextTick 解決vedio報(bào)錯(cuò) The element or ID supplied is not valid. (videojs)
this.$nextTick(() => {
this.loadVideo();
});
},
methods: {
loadVideo() {
this.dp = videojs("videoPlayer", this.options);
// 也可以使用以下方式給vedio設(shè)置 src
// this.db.src([
// {
// src: "https://e-sign.dms.t.cn-np.com/files/m3u8_file/c4b94118-3c8d-4410-9987-985c2b44c278/c4b94118-3c8d-4410-9987-985c2b44c278.m3u8", // 地址
// type: "application/x-mpegURL", // 告訴videojs,這是一個(gè)hls流
// },
// ]);
},
// 銷(xiāo)毀
beforeDestroy() {
if (this.dp) {
this.dp.dispose(); // dispose()會(huì)直接刪除Dom元素
}
},
},
};
</script>
<style lang="less" scoped>
.video-box {
width: 100%;
max-width: 500px;
max-height: 500px;
}
// 暫停播放按鈕居中
::v-deep .video-js .vjs-big-play-button {
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
</style>2、flv格式的方案來(lái)播放視頻
簡(jiǎn)介:flv.js是 HTML5 Flash 視頻(FLV)播放器,純?cè)?JavaScript 開(kāi)發(fā),沒(méi)有用到 Flash。由 bilibili 網(wǎng)站開(kāi)源。
開(kāi)源地址: https://github.com/Bilibili/flv.js/
安裝依賴
npm install --save flv.js頁(yè)面引入插件
import flvjs from 'flv.js'
頁(yè)面中的使用
<template>
<div class="preview">
<div class="videoArea">
<video id="videoElement" crossOrigin="anonymous" controls autoplay muted width="100%" height="800px"></video>
</div>
</div>
</template>
<script>
import flvjs from 'flv.js'
export default {
data() {
return {
isPlay: false,
player: null,
};
},
methods: {
// 設(shè)置視頻配置(注意:createVideo應(yīng)放在異步函數(shù)里或mounted之后,不可在created里直接加載,否則不生效)
createVideo() {
if (flvjs.isSupported()) {
var videoElement = document.getElementById('videoElement');
this.player= flvjs.createPlayer({
type: 'flv',
isLive: true,
hasAudio: false,
url: 'https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv' // 自己的flv視頻流
},{
cors: true, // 是否跨域
// enableWorker: true, // 是否多線程工作
enableStashBuffer: false, // 是否啟用緩存
stashInitialSize: 128, // 緩存大小(kb) 默認(rèn)384kb
autoCleanupSourceBuffer: true // 是否自動(dòng)清理緩存
});
this.player.attachMediaElement(videoElement);//掛載元素
this.player.load();//加載流
this.player.play();//播放流
}
// 報(bào)錯(cuò)重連
this.player.on(flvjs.Events.ERROR, (err, errdet) => {
// 參數(shù) err 是一級(jí)異常,errdet 是二級(jí)異常
if (err == flvjs.ErrorTypes.MEDIA_ERROR) {
console.log('媒體錯(cuò)誤')
if(errdet == flvjs.ErrorDetails.MEDIA_FORMAT_UNSUPPORTED) {
console.log('媒體格式不支持')
}
}
if (err == flvjs.ErrorTypes.NETWORK_ERROR) {
console.log('網(wǎng)絡(luò)錯(cuò)誤')
if(errdet == flvjs.ErrorDetails.NETWORK_STATUS_CODE_INVALID) {
console.log('http狀態(tài)碼異常')
}
}
if(err == flvjs.ErrorTypes.OTHER_ERROR) {
console.log('其他異常:', errdet)
}
if (this.player) {
this.destoryVideo()
this.createVideo()
}
})
},
destoryVideo(){
if (this.player) {
this.player.pause();// 暫停播放數(shù)據(jù)流
this.player.unload();// 取消數(shù)據(jù)流加載
this.player.detachMediaElement();// 將播放實(shí)例從節(jié)點(diǎn)中取出
this.player.destroy(); // 銷(xiāo)毀播放實(shí)例
this.player= null;
}
}
},
mounted() {
this.$nextTick(() => {
this.createVideo()
})
},
beforeDestroy() {
this.destoryVideo()
},
};
</script>
<style lang="scss" scoped>
</style>3、mp4格式的方案來(lái)播放視頻
<html>
<head>
<title>camera</title>
<script type="text/javascript">
function play() {
var video = document.getElementById("video");
video.play();
}
</script>
</head>
<body>
<video
id="video"
width="640"
height="360"
poster="/video/cover.png"http:// 視頻封面
controls //顯示標(biāo)準(zhǔn)的 HTML5 視頻/音頻播放器控制條、控制按鈕。
autoplay //讓文件自動(dòng)播放。
loop //讓文件循環(huán)播放。
preload="auto" //屬性是用來(lái)緩存大體積文件的。它有三個(gè)可選值:"none" 不緩存、"auto" 緩存、"metadata" 只緩存文件元信息
playsinline="true" // IOS微信瀏覽器支持小窗內(nèi)播放
webkit-playsinline="true" // 這個(gè)屬性是ios 10中設(shè)置可以讓視頻在小窗內(nèi)播放,也就是不是全屏播放*/
x5-video-player-type="h5" // 啟用H5播放器,是wechat安卓版特性
x5-video-player-fullscreen="true" // 全屏設(shè)置,設(shè)置為 true 是防止橫屏
x5-video-orientation="portraint" // 播放器屏幕的方向,landscape橫屏,portraint豎屏,默認(rèn)值為豎屏。、、
οnclick="play()" >
<!-- 標(biāo)簽是為了能夠兼容各種瀏覽器對(duì)不同媒體類(lèi)型的支持,我們可以用多個(gè)<source></source>元素來(lái)提供多個(gè)不同的媒體類(lèi)型。支持mp4格式視頻流的瀏覽器可以播放mp4文件,如果不支持,可以播放Ogg文件。 -->
<!-- codecs=dirac, speex - 是用來(lái)指定播放使用的解碼器(codecs); 這樣就可以更精確的讓瀏覽器如何播放提供的視頻。 -->
<source src="/video/text.mp4" type="video/mp4">
<source src="/video/text.ogg" type="video/ogg; codecs=dirac, speex">
<div class="fallback"> <p>You must have an HTML5 capable browser.</p> </div>
</video>
</body>
</html>總結(jié)
到此這篇關(guān)于前端vue播放m3u8、flv、mp4視頻的文章就介紹到這了,更多相關(guān)vue播放m3u8、flv、mp4視頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入探究Vue中$nextTick的實(shí)現(xiàn)原理
這篇文章主要為大家詳細(xì)介紹Vue中$nextTick的實(shí)現(xiàn)原理,文中的示例代碼講解詳細(xì),對(duì)我們深入了解Vue有一定的幫助,需要的小伙伴可以參考一下2023-06-06
vue與bootstrap實(shí)現(xiàn)時(shí)間選擇器的示例代碼
本篇文章主要介紹了vue與bootstrap實(shí)現(xiàn)時(shí)間選擇器的示例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-08-08
vue router 跳轉(zhuǎn)后回到頂部的實(shí)例
今天小編就為大家分享一篇vue router 跳轉(zhuǎn)后回到頂部的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
詳解Vue基于vue-quill-editor富文本編輯器使用心得
這篇文章主要介紹了Vue基于vue-quill-editor富文本編輯器使用心得,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
vue2.x,vue3.x使用provide/inject注入的區(qū)別說(shuō)明
這篇文章主要介紹了vue2.x,vue3.x使用provide/inject注入的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
Vue?elementui如何實(shí)現(xiàn)表格selection的默認(rèn)勾選
這篇文章主要介紹了Vue?elementui如何實(shí)現(xiàn)表格selection的默認(rèn)勾選問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
vue基于兩個(gè)計(jì)算屬性實(shí)現(xiàn)選中和全選功能示例
這篇文章主要介紹了vue基于兩個(gè)計(jì)算屬性實(shí)現(xiàn)選中和全選功能,結(jié)合實(shí)例形式分析了vue計(jì)算屬性get及set操作頁(yè)面元素實(shí)現(xiàn)選中與全選功能相關(guān)操作技巧,需要的朋友可以參考下2019-02-02
iview table render集成switch開(kāi)關(guān)的實(shí)例
下面小編就為大家分享一篇iview table render集成switch開(kāi)關(guān)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03

