vue直播播放器mpegts.js使用方法詳解
前言
要播放flv格式的視頻流,最先想到的是flv.js,但是flv.js已經(jīng)停止維護(hù)幾年了,不過(guò)在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è)方法我這里沒(méi)用,就不過(guò)多介紹了,有需要的可以查看官方文檔) getFeatureList(): Mpegts.FeatureList;
2、實(shí)例
mediaDataSource:
名稱 | 類型 | 說(shuō)明 |
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:
名稱 | 類型 | 說(shuō)明 |
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)文章
element-ui中el-cascader動(dòng)態(tài)加載和默認(rèn)值詳解
vue+elementUI項(xiàng)目中el-cascader級(jí)聯(lián)選擇器使用頻率非常高,下面這篇文章主要給大家介紹了關(guān)于element-ui中el-cascader動(dòng)態(tài)加載和默認(rèn)值的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05vue中beforeRouteLeave實(shí)現(xiàn)頁(yè)面回退不刷新的示例代碼
這篇文章主要介紹了vue中beforeRouteLeave實(shí)現(xiàn)頁(yè)面回退不刷新的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Vue3中的defineExpose函數(shù)用法深入解析
這篇文章主要介紹了Vue3中的defineExpose函數(shù)用法的相關(guān)資料,defineExpose是Vue3中用于在模式下暴露組件內(nèi)部屬性和方法的輔助函數(shù),它允許父組件通過(guò)ref訪問(wèn)子組件的暴露內(nèi)容,提高組件間的交互能力并保持封裝性,需要的朋友可以參考下2025-01-01vue3 攜帶參數(shù)跳轉(zhuǎn)|router傳參方式
這篇文章主要介紹了vue3 攜帶參數(shù)跳轉(zhuǎn)|router傳參方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06vue中數(shù)據(jù)不響應(yīng)的問(wèn)題及解決
這篇文章主要介紹了vue中數(shù)據(jù)不響應(yīng)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09用Vue.js開發(fā)網(wǎng)頁(yè)時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了用Vue.js開發(fā)一個(gè)網(wǎng)頁(yè)時(shí)鐘,分為白天模式和夜晚模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08