vue直播播放器mpegts.js使用方法詳解
前言
要播放flv格式的視頻流,最先想到的是flv.js,但是flv.js已經(jīng)停止維護幾年了,不過在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、實例
mediaDataSource:
名稱 | 類型 | 說明 |
type | string | 支持媒體類型:'mse' , 'mpegts' , 'm2ts' , 'flv' or 'mp4' |
isLive | boolean | 是否直播 |
cors | boolean | 是否啟用cors對http進行提前 |
withCredentials | boolean | 是否啟用cookie對http進行提前 |
hasAudio | boolean | 是否有音頻軌道 |
hasVideo | boolean | 是否有視頻軌道 |
duration | number | 媒體持續(xù)時間(單位毫秒) |
filesize | number | 媒體大小 |
url | string | 播放地址:支持http(s)或者ws(s) |
config:
名稱 | 類型 | 說明 |
isLive | boolean | 是否開啟直播,和mediaDataSource中的 isLive一樣 |
liveBufferLatencyChasing | boolean | 開啟追幀,減小延遲 |
liveBufferLatencyMaxLatency | number | 最大緩沖延遲,默認1.5s |
liveBufferLatencyMinRemain | number | 最小緩沖延遲,默認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)絡EOF,但已自動恢復 MEDIA_INFO: string;//提供媒體的技術信息,如視頻/音頻編解碼器、比特率等。 METADATA_ARRIVED: string;//提供FLV文件(流)可以包含的元數(shù)據(jù) SCRIPTDATA_ARRIVED: string;//提供FLV文件(流)可以包含的腳本數(shù)據(jù) STATISTICS_INFO: string;//提供播放統(tǒ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, '報錯內(nèi)容' + errorDetail, '報錯信息' + JSON.stringify(errorInfo) ) } ) //監(jiān)聽播放信息,該方法會持續(xù)調用 flvPlayer.on(mpegtsjs.Events.STATISTICS_INFO, (e) => { //當播放速度為0時,記錄一下為0的次數(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); } }, }
總結
到此這篇關于vue直播播放器mpegts.js使用方法的文章就介紹到這了,更多相關vue直播播放器mpegts.js內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
element-ui中el-cascader動態(tài)加載和默認值詳解
vue+elementUI項目中el-cascader級聯(lián)選擇器使用頻率非常高,下面這篇文章主要給大家介紹了關于element-ui中el-cascader動態(tài)加載和默認值的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-05-05vue中beforeRouteLeave實現(xiàn)頁面回退不刷新的示例代碼
這篇文章主要介紹了vue中beforeRouteLeave實現(xiàn)頁面回退不刷新的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11Vue3中的defineExpose函數(shù)用法深入解析
這篇文章主要介紹了Vue3中的defineExpose函數(shù)用法的相關資料,defineExpose是Vue3中用于在模式下暴露組件內(nèi)部屬性和方法的輔助函數(shù),它允許父組件通過ref訪問子組件的暴露內(nèi)容,提高組件間的交互能力并保持封裝性,需要的朋友可以參考下2025-01-01