flv项目地址

bilibili / flv.js

flv优化

flv.js解决直播流延迟、断流重连以及画面卡死

如何使用

安装依赖

npm install --save flv.js

vue页面

<template>
 <div class="video">
      <video
       id="vPull"
       controls
       autoplay
       muted
       width="100%"
       height="100%">
      </video>
 </div>
</template>

js部分

<script>
import flv from "flv.js";
export default {
  name: "",
  data() {
    return {
      player: null,
    };
  },
  methods: {
    play(urls) {
      let video = document.getElementById("vPull"); //定义播放路径
      if (flv.isSupported()) {
        this.player = flv.createPlayer(
          {
            type: "flv",
            isLive: true,
            url: urls,
          },
          {
            enableWorker: false, //不启用分离线程
            enableStashBuffer: false, //关闭IO隐藏缓冲区
            isLive: true,
            lazyLoad: false,
          }
        );
      } else {
        console.log("不支持的格式");
        return;
      }
      this.player.attachMediaElement(video);
      this.player.load();
      this.player.play();
    },
    destruction() {
      //销毁对象
      if (this.player) {
        this.player.pause();
        this.player.destroy();
        this.player = null;
      }
    },
  },
  created() {
    this.play('http://1011.hlsplay.aodianyun.com/demo/game.flv');
  }
};
</script>

API

原文件(api.md)

import flv from "flv.js";

功能类

创建flv播放器

let player = flv.createPlayer(mediaDataSource: MediaDataSource, config?: Config);

createPlayer()方法有两个参数,MediaDataSourceconfig两个参数,MediaDataSource必传,config可传可不传,返回值为player;

MediaDataSource

属性类型描述
typestring指示媒体类型,'flv''mp4'
isLive?boolean指示数据源是否为实时流
cors?boolean指示是否启用CORS进行http提取
withCredentials?boolean指示是否对Cookie进行http提取
hasAudio?boolean指示流是否有音轨
hasVideo?boolean指示流中是否有视频轨道
duration?number指示总媒体持续时间(以毫秒为单位)
filesize?number指示媒体文件的总文件大小,以字节为单位
url?string表示媒体URL,可以以'https(s)''ws(s)'(WebSocket)开头
segments?Array多段播放的可选字段,请参见MediaSegment

如果segments存在字段,则transmuxer会将其MediaDataSource视为多部分源。

在多部分模式下,结构中的duration filesize url字段MediaDataSource将被忽略。

MediaSegment

属性类型描述
durationnumber必填字段,表示段持续时间(以毫秒为单位)
filesize?number可选字段,以字节为单位指示段文件大小
urlstring必填字段,指示段文件URL

Config

属性类型默认值描述
enableWorker?booleanfalse启用分离的线程进行转换(暂时不稳定)
enableStashBuffer?booleantrue启用IO隐藏缓冲区。如果您需要实时(最小延迟)进行实时流播放,则设置为false,但是如果网络抖动,则可能会停顿。
stashInitialSize?number384KB表示IO暂存缓冲区的初始大小。默认值为384KB。指出合适的尺寸可以改善视频负载/搜索时间。
isLive?booleanfalse同样要isLiveMediaDataSource,如果忽略已经在MediaDataSource结构集合。
lazyLoad?booleantrue如果有足够的数据可播放,则中止http连接。
lazyLoadMaxDuration?number3 * 60指示要保留多少秒的数据lazyLoad
lazyLoadRecoverDuration?number30指示lazyLoad恢复时间边界,以秒为单位。
deferLoadAfterSourceOpen?booleantrue在MediaSourcesourceopen事件触发后加载。在Chrome上,在后台打开的标签页可能不会触发sourceopen事件,除非切换到该标签页。
autoCleanupSourceBufferbooleanfalse对SourceBuffer进行自动清理
autoCleanupMaxBackwardDurationnumber3 * 60当向后缓冲区持续时间超过此值(以秒为单位)时,请对SourceBuffer进行自动清理
autoCleanupMinBackwardDurationnumber2 * 60指示进行自动清除时为反向缓冲区保留的持续时间(以秒为单位)。
fixAudioTimestampGapbooleantrue当检测到较大的音频时间戳间隙时,请填充无声音频帧,以避免A / V不同步。
accurateSeek?booleanfalse精确查找任何帧,不限于视频IDR帧,但可能会慢一些。可用的Chrome > 50FireFoxSafari
seekType?string'range''range'使用范围请求进行查找,或'param'在url中添加参数以指示请求范围。
seekParamStart?string'bstart'指示的搜索起始参数名称 seekType = 'param'
seekParamEnd?string'bend'指示的搜索结束参数名称 seekType = 'param'
rangeLoadZeroStart?booleanfalseRange: bytes=0-如果使用范围查找,则发送首次负载
customSeekHandler?objectundefined指示自定义搜索处理程序
reuseRedirectedURL?booleanfalse重复使用301/302重定向的url进行子序列请求,例如搜索,重新连接等。
referrerPolicy?stringno-referrer-when-downgrade指示使用FetchStreamLoader时的推荐人策略
headers?objectundefined指示将添加到请求的其他标头

flv.isSupported()

function isSupported(): boolean;

player实例存在返回true,否则返回fasle

flv.getFeatureList()

function getFeatureList(): FeatureList;

返回 FeatureList 对象

FeatureList

属性类型描述
mseFlvPlaybackboolean等同于flv.isSupported()
mseLiveFlvPlaybackboolean指示HTTP FLV实时流是否可以在您的浏览器上工作。
networkStreamIOboolean指示网络加载程序是否正在流式传输。
networkLoaderNamestring指示网络加载程序类型名称。
nativeMP4H264Playbackboolean指示您的浏览器是否本身支持H.264 MP4视频文件。
nativeWebmVP8Playbackboolean指示您的浏览器是否本机支持WebM VP8视频文件。
nativeWebmVP9Playbackboolean指示您的浏览器是否本机支持WebM VP9视频文件。

Player对象

interface Player {
    constructor(mediaDataSource: MediaDataSource, config?: Config): Player;
    destroy(): void;
    on(event: string, listener: Function): void;
    off(event: string, listener: Function): void;
    attachMediaElement(mediaElement: HTMLMediaElement): void;
    detachMediaElement(): void;
    load(): void;//加载
    unload(): void;//卸载
    play(): Promise<void>;//播放
    pause(): void;//暂停
    type: string;
    buffered: TimeRanges;
    duration: number;
    volume: number;
    muted: boolean;
    currentTime: number;
    mediaInfo: Object;
    statisticsInfo: Object;
}

其余API参见官方文档

注:本文仅供学习交流使用,若有侵权,请联系作者删除

posted on 2022-09-01 18:13  //HelloWorld  阅读(1560)  评论(0编辑  收藏  举报