vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue直播播放器mpegts.js

vue直播播放器mpegts.js使用方法详解

作者:travel_wsy

mpegts.js是在HTML5上直接播放MPEG-TS/FLV流的播放器,针对低延迟直播优化,这篇文章主要介绍了vue直播播放器mpegts.js使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

要播放flv格式的视频流,最先想到的是flv.js,但是flv.js已经停止维护几年了,不过在flv.js官网提到用mpegts.js代替flv.js,本章主要记录一下mpegts.js的使用:mpegts.js Api

一、介绍mpegts.js

1、方法:

//创建播放器 
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

媒体持续时间(单位毫秒)

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;//添加监听
        off(event: string, listener: (...args: any[]) => void): void;//取消监听
        attachMediaElement(mediaElement: HTMLMediaElement): void;//绑定dom
        detachMediaElement(): void;//移除dom
        load(): void;//加载播放器
        unload(): void;//取消播放器加载
        play(): Promise<void> | void;//开始播放
        pause(): void;//暂停播放
    }

枚举

interface Events {
        ERROR: string;//播放中发生错误
        LOADING_COMPLETE: string;//缓冲完成
        RECOVERED_EARLY_EOF: string;//缓冲期间发生意外的网络EOF,但已自动恢复
        MEDIA_INFO: string;//提供媒体的技术信息,如视频/音频编解码器、比特率等。
        METADATA_ARRIVED: string;//提供FLV文件(流)可以包含的元数据
        SCRIPTDATA_ARRIVED: string;//提供FLV文件(流)可以包含的脚本数据
        STATISTICS_INFO: string;//提供播放统计信息,如丢帧、当前速度等
    }

二、使用

1、安装

npm install mpegts.js

yarn add mpegts.js

2、引用

import mpegtsjs from 'mpegts.js'

3、创建播放器

import mpegtsjs from 'mpegts.js'
export default {
  data() {
    return {
      isPlaying: false, // 判断是否正在播放直播
      notSpeedCount: 0,//记录播放速度为0的次数
      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
      //监听播放器发生错误
      flvPlayer.on(
        mpegtsjs.Events.ERROR,
        (errorType, errorDetail, errorInfo) => {
          console.log(
            '类型:' + errorType,
            '报错内容' + errorDetail,
            '报错信息' + JSON.stringify(errorInfo)
          )
        }
      )
      //监听播放信息,该方法会持续调用
      flvPlayer.on(mpegtsjs.Events.STATISTICS_INFO, (e) => {
        //当播放速度为0时,记录一下为0的次数,达到一定次数时,刷新播放器,重新拉取视频流;偶尔卡顿一下不用处理,这里要处理的是长时间拉取不到流,防止链接断开
        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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文