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; //獲取播放器特征列表(這個方法我這里沒用,就不過多介紹了,有需要的可以查看官方文檔) getFeatureList(): Mpegts.FeatureList;
2、實(shí)例
mediaDataSource:
| 名稱 | 類型 | 說明 |
type | string | 支持媒體類型:'mse', 'mpegts', 'm2ts', 'flv' or 'mp4' |
isLive | boolean | 是否直播 |
cors | boolean | 是否啟用cors對http進(jìn)行提前 |
withCredentials | boolean | 是否啟用cookie對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 |
這個就寫這幾個用到的,其他的可以到文檔中查看
播放器
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ā)生錯誤
LOADING_COMPLETE: string;//緩沖完成
RECOVERED_EARLY_EOF: string;//緩沖期間發(fā)生意外的網(wǎng)絡(luò)EOF,但已自動恢復(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ā)生錯誤
flvPlayer.on(
mpegtsjs.Events.ERROR,
(errorType, errorDetail, errorInfo) => {
console.log(
'類型:' + errorType,
'報(bào)錯內(nèi)容' + errorDetail,
'報(bào)錯信息' + JSON.stringify(errorInfo)
)
}
)
//監(jiān)聽播放信息,該方法會持續(xù)調(diào)用
flvPlayer.on(mpegtsjs.Events.STATISTICS_INFO, (e) => {
//當(dāng)播放速度為0時(shí),記錄一下為0的次數(shù),達(dá)到一定次數(shù)時(shí),刷新播放器,重新拉取視頻流;偶爾卡頓一下不用處理,這里要處理的是長時(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
element-ui中el-cascader動態(tài)加載和默認(rèn)值詳解
vue+elementUI項(xiàng)目中el-cascader級聯(lián)選擇器使用頻率非常高,下面這篇文章主要給大家介紹了關(guān)于element-ui中el-cascader動態(tài)加載和默認(rèn)值的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
vue中beforeRouteLeave實(shí)現(xiàn)頁面回退不刷新的示例代碼
這篇文章主要介紹了vue中beforeRouteLeave實(shí)現(xiàn)頁面回退不刷新的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Vue3中的defineExpose函數(shù)用法深入解析
這篇文章主要介紹了Vue3中的defineExpose函數(shù)用法的相關(guān)資料,defineExpose是Vue3中用于在模式下暴露組件內(nèi)部屬性和方法的輔助函數(shù),它允許父組件通過ref訪問子組件的暴露內(nèi)容,提高組件間的交互能力并保持封裝性,需要的朋友可以參考下2025-01-01
vue3 攜帶參數(shù)跳轉(zhuǎn)|router傳參方式
這篇文章主要介紹了vue3 攜帶參數(shù)跳轉(zhuǎn)|router傳參方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
vue中數(shù)據(jù)不響應(yīng)的問題及解決
這篇文章主要介紹了vue中數(shù)據(jù)不響應(yīng)的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09

