vue直播播放器mpegts.js使用方法詳解
前言
要播放flv格式的視頻流,最先想到的是flv.js,但是flv.js已經(jīng)停止維護(hù)幾年了,不過在flv.js官網(wǎng)提到用mpegts.js代替flv.js,本章主要記錄一下mpegts.js的使用:mpegts.js Api
一、介紹mpegts.js
1、方法:
//創(chuàng)建播放器 createPlayer(mediaDataSource: Mpegts.MediaDataSource, config?: Mpegts.Config): Mpegts.Player; //判斷瀏覽器是否支持播放 isSupported(): boolean; //獲取播放器特征列表(這個(gè)方法我這里沒用,就不過多介紹了,有需要的可以查看官方文檔) getFeatureList(): Mpegts.FeatureList;
2、實(shí)例
mediaDataSource:
| 名稱 | 類型 | 說明 |
type | string | 支持媒體類型:'mse', 'mpegts', 'm2ts', 'flv' or 'mp4' |
isLive | boolean | 是否直播 |
cors | boolean | 是否啟用cors對(duì)http進(jìn)行提前 |
withCredentials | boolean | 是否啟用cookie對(duì)http進(jìn)行提前 |
hasAudio | boolean | 是否有音頻軌道 |
hasVideo | boolean | 是否有視頻軌道 |
duration | number | 媒體持續(xù)時(shí)間(單位毫秒) |
filesize | number | 媒體大小 |
url | string | 播放地址:支持http(s)或者ws(s) |
config:
| 名稱 | 類型 | 說明 |
isLive | boolean | 是否開啟直播,和mediaDataSource中的 isLive一樣 |
liveBufferLatencyChasing | boolean | 開啟追幀,減小延遲 |
liveBufferLatencyMaxLatency | number | 最大緩沖延遲,默認(rèn)1.5s |
liveBufferLatencyMinRemain | number | 最小緩沖延遲,默認(rèn)0.5s |
這個(gè)就寫這幾個(gè)用到的,其他的可以到文檔中查看
播放器
interface Player {
destroy(): void;//銷毀播放器
on(event: string, listener: (...args: any[]) => void): void;//添加監(jiān)聽
off(event: string, listener: (...args: any[]) => void): void;//取消監(jiān)聽
attachMediaElement(mediaElement: HTMLMediaElement): void;//綁定dom
detachMediaElement(): void;//移除dom
load(): void;//加載播放器
unload(): void;//取消播放器加載
play(): Promise<void> | void;//開始播放
pause(): void;//暫停播放
}枚舉
interface Events {
ERROR: string;//播放中發(fā)生錯(cuò)誤
LOADING_COMPLETE: string;//緩沖完成
RECOVERED_EARLY_EOF: string;//緩沖期間發(fā)生意外的網(wǎng)絡(luò)EOF,但已自動(dòng)恢復(fù)
MEDIA_INFO: string;//提供媒體的技術(shù)信息,如視頻/音頻編解碼器、比特率等。
METADATA_ARRIVED: string;//提供FLV文件(流)可以包含的元數(shù)據(jù)
SCRIPTDATA_ARRIVED: string;//提供FLV文件(流)可以包含的腳本數(shù)據(jù)
STATISTICS_INFO: string;//提供播放統(tǒng)計(jì)信息,如丟幀、當(dāng)前速度等
}二、使用
1、安裝
npm install mpegts.js
或
yarn add mpegts.js
2、引用
import mpegtsjs from 'mpegts.js'
3、創(chuàng)建播放器
import mpegtsjs from 'mpegts.js'
export default {
data() {
return {
isPlaying: false, // 判斷是否正在播放直播
notSpeedCount: 0,//記錄播放速度為0的次數(shù)
flvVideo: null, //播放器
}
},
methods: {
//初始化播放器
async initVideo(url, videoId) {
if (!videoId || !url) return
let that = this;
const videoElement = document.getElementById(videoId)
let flvPlayer = mpegtsjs.createPlayer({
type: 'flv',
url: url,
isLive: true,
cors: true,
withCredentials: false,
hasVideo: true,
hasAudio: false,
nativeMP4H264Playback: true,
}, {
liveBufferLatencyChasing: true, //追幀
})
flvPlayer.attachMediaElement(videoElement)
flvPlayer.load()
await flvPlayer.play()
this.flvVideo = flvPlayer
//監(jiān)聽播放器發(fā)生錯(cuò)誤
flvPlayer.on(
mpegtsjs.Events.ERROR,
(errorType, errorDetail, errorInfo) => {
console.log(
'類型:' + errorType,
'報(bào)錯(cuò)內(nèi)容' + errorDetail,
'報(bào)錯(cuò)信息' + JSON.stringify(errorInfo)
)
}
)
//監(jiān)聽播放信息,該方法會(huì)持續(xù)調(diào)用
flvPlayer.on(mpegtsjs.Events.STATISTICS_INFO, (e) => {
//當(dāng)播放速度為0時(shí),記錄一下為0的次數(shù),達(dá)到一定次數(shù)時(shí),刷新播放器,重新拉取視頻流;偶爾卡頓一下不用處理,這里要處理的是長(zhǎng)時(shí)間拉取不到流,防止鏈接斷開
if (e.speed == 0) {
console.log('直播信息:' + JSON.stringify(e))
if (that.notSpeedCount > 10) {
that.notSpeedCount = 0
that.refreshVideo(url,videoId)
that.isPlaying = false
} else {
that.notSpeedCount += 1
}
} else {
if (!that.isPlaying) {
that.isPlaying = true
flvPlayer.play()
}
that.notSpeedCount = 0
}
})
},
//銷毀
destoryVideo() {
if (this.flvVideo) {
this.flvVideo.pause()
this.flvVideo.unload()
this.flvVideo.detachMediaElement()
this.flvVideo.destroy()
this.flvVideo = null
}
},
//刷新播放器
refreshVideo(url,videoId) {
if(!url || !videoId) return
this.destoryVideo()
setTimeout(() => {
this.initVideo(url,videoId)
}, 500);
}
},
}總結(jié)
到此這篇關(guān)于vue直播播放器mpegts.js使用方法的文章就介紹到這了,更多相關(guān)vue直播播放器mpegts.js內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用vue開發(fā)公眾號(hào)網(wǎng)頁(yè)
因?yàn)轫?xiàng)目需要,近期做了一個(gè)公眾號(hào)網(wǎng)頁(yè)開發(fā)。在此期間也踩了一些坑,解決這些坑之后,準(zhǔn)備對(duì)這個(gè)項(xiàng)目進(jìn)行復(fù)盤。記錄下項(xiàng)目從開發(fā)到上線所解決的問題,并對(duì)使用vue進(jìn)行公眾號(hào)開發(fā)的步驟進(jìn)行一個(gè)總結(jié)。方便以后有問題進(jìn)行查閱。希望對(duì)你有所幫助2021-05-05
Vue的computed屬性出現(xiàn)突然不更新的原因及解決方案
Vue的computed屬性為何突然不更新,本文深入解析其核心機(jī)制、常見不更新場(chǎng)景及解決方案,涵蓋依賴追蹤、緩存機(jī)制、調(diào)試技巧與Vue3差異,助你高效解決響應(yīng)式問題,需要的朋友可以參考下2026-05-05
這15個(gè)Vue指令,讓你的項(xiàng)目開發(fā)爽到爆
這篇文章主要介紹了這15個(gè)Vue指令,讓你的項(xiàng)目開發(fā)爽到爆,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-10-10
Vue實(shí)現(xiàn)一個(gè)無限加載列表功能
這篇文章主要介紹了Vue實(shí)現(xiàn)一個(gè)無限加載列表功能,需要的朋友可以參考下2018-11-11
Vue.js 3.x 中的響應(yīng)式數(shù)據(jù)ref 與 reactive詳解
ref 和 reactive 是 Vue.js 3 中用于創(chuàng)建響應(yīng)式數(shù)據(jù)的兩個(gè)關(guān)鍵函數(shù),它們分別適用于不同類型的數(shù)據(jù),幫助我們更好地組織和管理組件的狀態(tài),這篇文章主要介紹了Vue.js 3.x 中的響應(yīng)式數(shù)據(jù):ref 與 reactive,需要的朋友可以參考下2024-01-01
Springboot運(yùn)用vue+echarts前后端交互實(shí)現(xiàn)動(dòng)態(tài)圓環(huán)圖
我們做項(xiàng)目的時(shí)候,常常需要一些統(tǒng)計(jì)圖來展示我們的數(shù)據(jù),作為web開發(fā)人員,會(huì)實(shí)現(xiàn)統(tǒng)計(jì)圖是我們必會(huì)的技能。我將帶大家來實(shí)現(xiàn)動(dòng)態(tài)餅圖的實(shí)現(xiàn),感興趣的可以了解一下2021-06-06
封裝 axios+promise通用請(qǐng)求函數(shù)操作
這篇文章主要介紹了封裝 axios+promise通用請(qǐng)求函數(shù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08
基于vue2.0實(shí)現(xiàn)簡(jiǎn)單輪播圖
這篇文章主要為大家詳細(xì)介紹了基于vue2.0實(shí)現(xiàn)簡(jiǎn)單輪播圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11

