当前位置: 首页 > news >正文

学习flv.js

前言

flv.js一款使用纯 JavaScript 编写的 HTML5 Flash 视频 (FLV) 播放器,无需 Flash!!!flv.js 的工作原理是将 FLV 文件流转换为 ISO BMFF(碎片 MP4)片段,然后通过Media Source Extensions<video>API 将 mp4 片段输入 HTML5元素。

特点

  • 具有 H.264 + AAC / MP3 编解码器播放功能的 FLV 容器
  • 多部分分段视频播放
  • HTTP FLV低延迟直播流播放
  • 通过 WebSocket 播放 FLV 直播流
  • 兼容 Chrome、FireFox、Safari 10、IE11 和 Edge
  • 极低的开销,并由您的浏览器硬件加速!

安装

npm install --save flv.js

上手

<script src="flv.min.js"></script>
<video id="videoElement"></video>
<script>if (flvjs.isSupported()) {var videoElement = document.getElementById('videoElement');var flvPlayer = flvjs.createPlayer({type: 'flv',url: 'http://example.com/flv/video.flv'});flvPlayer.attachMediaElement(videoElement);flvPlayer.load();flvPlayer.play();}
</script>

创建播放器

function createPlayer(mediaDataSource: MediaDataSource, config?: Config): Player;

根据mediaDataSource中指示的类型字段创建播放器实例,配置可选.

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>多部分播放的可选字段,请参阅MediaSegment

*如果分段字段存在,transmuxer将把此MediaDataSource视为多部分源。
在多部分模式下,MediaDataSource结构中的持续时间文件大小url字段将被忽略。

MediaSegment配置

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

Config配置

字段类型默认描述
enableWorker?booleanfalse启用分离线程进行转路(目前不稳定)
enableStashBuffer?booleantrue启用 IO 存储缓冲区。如果您需要实时(最小延迟)直播流播放,请设置为 false,但如果网络抖动,可能会停滞。
stashInitialSize?number384KB指示 IO 存储缓冲区的初始大小。默认值为384KB。指示合适的大小可以改善视频加载/寻道时间。
isLive?booleanfalse与MediaDataSourceisLive中的相同,如果已在 MediaDataSource 结构中设置,则忽略。
lazyLoad?booleantrue如果有足够的数据可供播放,则中止 http 连接。
lazyLoadMaxDuration?number3 * 60指示要保留数据多少秒lazyLoad
lazyLoadRecoverDuration?number30指示lazyLoad恢复时间边界(以秒为单位)。
deferLoadAfterSourceOpen?booleantrue在 MediaSource 事件触发后进行加载sourceopen。在 Chrome 上,在后台打开的标签页可能不会触发sourceopen事件,直到切换到该标签页。
autoCleanupSourceBufferbooleanfalse自动清理 SourceBuffer
autoCleanupMaxBackwardDurationnumber3 * 60当后向缓冲区持续时间超过此值(以秒为单位)时,自动清理 SourceBuffer
autoCleanupMinBackwardDurationnumber2 * 60指示进行自动清理时为后向缓冲区保留的持续时间(以秒为单位)。
fixAudioTimestampGapbooleantrue当检测到较大的音频时间戳间隙时,填充静音音频帧以避免 a/v 不同步。
accurateSeek?booleanfalse精确搜索任意帧,不限于视频 IDR 帧,但速度可能稍慢。可在Chrome > 50FireFox和上使用Safari
seekType?string'range''range'使用范围请求来查找,或者'param'在url中添加params来指明请求范围。
seekParamStart?string'bstart'表示搜索开始参数名称seekType = 'param'
seekParamEnd?string'bend'表示搜索结束参数名称seekType = 'param'
rangeLoadZeroStart?booleanfalse如果使用范围搜索则发送Range: bytes=0-首次加载
customSeekHandler?objectundefined表示自定义搜索处理程序
reuseRedirectedURL?booleanfalse重复使用 301/302 重定向 URL 进行后续请求,如搜索、重新连接等。
referrerPolicy?stringno-referrer-when-downgrade指示使用 FetchStreamLoader 时的Referrer Policy
headers?objectundefined表示将添加到请求中的附加标头
function isSupported(): boolean;
// 如果基本播放可以在浏览器上运行,则返回true。
function getFeatureList(): FeatureList;
// 返回一个FeatureList对象,该对象具有以下详细信息:
字段类型描述
mseFlvPlaybackboolean与 相同flvjs.isSupported(),表示您的浏览器是否支持基本播放。
mseLiveFlvPlaybackboolean指示 HTTP FLV 直播流是否可以在您的浏览器上运行。
networkStreamIOboolean指示网络加载器是否正在流式传输。
networkLoaderNamestring表示网络加载器类型名称。
nativeMP4H264Playbackboolean指示您的浏览器是否原生支持 H.264 MP4 视频文件。
nativeWebmVP8Playbackboolean指示您的浏览器是否原生支持 WebM VP8 视频文件。
nativeWebmVP9Playbackboolean指示您的浏览器是否原生支持 WebM VP9 视频文件。
interface FlvPlayer extends Player {}
// 实现该Player接口的FLV播放器,可由操作人员直接创建new。
interface NativePlayer extends Player {}
// 不带 MediaSource src 的浏览器原生播放器 (HTMLVideoElement) 的播放器包装器,可实现接口Player。适用于单部分MP4文件播放。
// 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;
}

flv事件

事件描述
ERROR播放过程中因任何原因发生错误
LOADING_COMPLETE输入的 MediaDataSource 已完全缓冲至结束
RECOVERED_EARLY_EOF缓冲期间发生意外的网络 EOF,但已自动恢复
MEDIA_INFO提供媒体的技术信息,如视频/音频编解码器、比特率等。
METADATA_ARRIVED使用“onMetaData”标记提供 FLV 文件(流)可以包含的元数据。
SCRIPTDATA_ARRIVED提供 FLV 文件(流)可包含的脚本数据(OnCuePoint / OnTextData)。
STATISTICS_INFO提供播放统计信息,例如丢帧、当前速度等。

flvjs.错误类型

播放期间可能出现的错误。它们需要前缀flvjs.ErrorTypes

错误描述
NETWORK_ERROR与网络相关的错误
MEDIA_ERROR与媒体相关的错误(格式错误、解码问题等)
OTHER_ERROR任何其他未指定的错误

flvjs.错误详细信息

为网络和媒体错误提供更详细的解释。它们需要前缀flvjs.ErrorDetails。

错误描述
NETWORK_EXCEPTION与网络的任何其他问题相关;包含message
NETWORK_STATUS_CODE_INVALID与无效的 HTTP 状态代码相关,例如 403、404 等。
NETWORK_TIMEOUT与超时请求问题相关
NETWORK_UNRECOVERABLE_EARLY_EOF与无法恢复的意外网络 EOF 相关
MEDIA_MSE_ERROR与 MediaSource 的错误(如解码问题)相关
MEDIA_FORMAT_ERROR与媒体流中的任何无效参数相关
MEDIA_FORMAT_UNSUPPORTEDflv.js 不支持输入的 MediaDataSource 格式
MEDIA_CODEC_UNSUPPORTED媒体流包含不受支持的视频/音频编解码器

相关文章:

学习flv.js

前言 flv.js一款使用纯 JavaScript 编写的 HTML5 Flash 视频 (FLV) 播放器&#xff0c;无需 Flash&#xff01;&#xff01;&#xff01;flv.js 的工作原理是将 FLV 文件流转换为 ISO BMFF&#xff08;碎片 MP4&#xff09;片段&#xff0c;然后通过Media Source Extensions&l…...

FreePBX 17 on ubuntu24 with Asterisk 20

版本配置&#xff1a; FreePBX 17&#xff08;最新&#xff09; Asterisk 20&#xff08;最新Asterisk 22&#xff0c;但是FreePBX 17最新只支持Asterisk 21&#xff0c;但是21非LTS版本&#xff0c;所以选择Asterisk 20&#xff09; PHP 8.2 Maria DB (v10.11) Node J…...

【算法】算法大纲

这篇文章介绍计算机算法的各个思维模式。 包括 计数原理、数组、树型结构、链表递归栈、查找排序、管窥算法、图论、贪心法和动态规划、以及概率论:概率分治和机器学习。没有办法逐个说明,算法本身错综复杂,不同的算法对应着不同的实用场景,也需要根据具体情况设计与调整。…...

【MySQL】SQL菜鸟教程(一)

1.常见命令 1.1 总览 命令作用SELECT从数据库中提取数据UPDATE更新数据库中的数据DELETE从数据库中删除数据INSERT INTO向数据库中插入新数据CREATE DATABASE创建新数据库ALTER DATABASE修改数据库CREATE TABLE创建新表ALTER TABLE变更数据表DROP TABLE删除表CREATE INDEX创建…...

安装本地测试安装apache-doris

一、安装前规划 我的服务器是三台麒麟服务器,2台跑不起来,这是我本地的,内存分配的也不多。 fe192.168.1.13 主数据库端口9030访问 8Gbe192.168.1.13内存4G 硬盘50be192.168.1.14内存4G 硬盘50be192.168.1.12内存4G 硬盘5013同时安装的fe和be 。 原理:192.168.1.13 服…...

【Apache Paimon】-- 13 -- 利用 paimon-flink-action 同步 mysql 表数据

利用 Paimon Schema Evolution 核心特性同步变更的 mysql 表结构和数据 1、背景信息 在Paimon 诞生以前,若 mysql/pg 等数据源的表结构发生变化时,我们有几种处理方式 (1)人工通知(比如常规的使用邮件),然后运维人员手动同步到数据仓库中 (2)使用 flink 消费 DDL bi…...

IOS HTTPS代理抓包工具使用教程

打开抓包软件 在设备列表中选择要抓包的 设备&#xff0c;然后选择功能区域中的 HTTPS代理抓包。根据弹出的提示按照配置文件和设置手机代理。如果是本机则会自动配置&#xff0c;只需要按照提醒操作即可。 iOS 抓包准备 通过 USB 将 iOS 设备连接到电脑&#xff0c;设备需解…...

在 Ubuntu 22.04 上从 Wayland 切换到 X11的详细步骤

在 Ubuntu 22.04 上从 Wayland 切换到 X11&#xff0c;步骤其实很简单&#xff0c;主要是在登录界面进行选择。以下是详细的步骤&#xff1a; 步骤 1&#xff1a;退出当前会话 首先&#xff0c;点击屏幕右上角的用户菜单&#xff0c;选择 注销 或 退出&#xff0c;以退出当前…...

【Linux】4.Linux常见指令以及权限理解(2)

文章目录 3. Linux指令3.1 ls指令和rm指令补充3.2 man指令&#xff08;重要&#xff09;3.3cp指令&#xff08;重要&#xff09;输出重定向3.3.1ubuntu20.04如何安装tree 3.4 mv指令&#xff08;重要&#xff09;mv指令更改文件名mv指令更改目录名 如何看待指令指令的重命名3.5…...

ffmpeg aac s16 encode_audio.c

用ffmpeg库时&#xff0c;用代码对pcm内容采用aac编码进行压缩&#xff0c;出现如下错误。 [aac 000002bc5edc6e40] Format aac detected only with low score of 1, misdetection possible! [aac 000002bc5edc8140] Error decoding AAC frame header. [aac 000002bc5edc81…...

vue3监听器

1.侦听数据源类型 watch 的第一个参数可以是不同形式的“数据源”&#xff1a;它可以是一个 ref (包括计算属性)、一个响应式对象、一个 getter 函数、或多个数据源组成的数组 const x ref(0) const y ref(0)// 单个 ref watch(x, (newX) > {console.log(x is ${newX}) …...

03-51单片机定时器和串口通信

一、51单片机定时器 1.定时器介绍 1.1为什么要使用定时器 在前面的学习中&#xff0c;用到了 Delay 函数延时&#xff0c;这里学习定时器以后&#xff0c;就可以通过定时器来完成&#xff0c;当然定时器的功能远不止这些&#xff1a; 51 单片机的定时器既可以定时&#xff…...

系统架构设计师考点—项目管理

一、备考指南 项目管理主要考查的是进度管理、软件配置管理、质量管理、风险管理等相关知识&#xff0c;近几年都没有考查过&#xff0c;但是有可能在案例分析中考查关键路径的技术问题&#xff0c;考生了解为主。 二、重点考点 1、项目的十大管理&#xff08;速记&#xff1…...

代码随想录算法训练营第三十二天|509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

目录 509.斐波那契数 动态规划五部曲&#xff1a; 1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义 2.确定递推公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp数组 70.爬楼梯 动态规划五部曲&#xff1a; 1.确定dp数组&#xff08;dp table&#xff09;…...

【2024年华为OD机试】 (A卷,100分)- 总最快检测效率(Java JS PythonC/C++)

一、问题描述 题目描述 在系统、网络均正常的情况下组织核酸采样员和志愿者对人群进行核酸检测筛查。 每名采样员的效率不同&#xff0c;采样效率为 N 人/小时。由于外界变化&#xff0c;采样员的效率会以 M 人/小时为粒度发生变化&#xff0c;M 为采样效率浮动粒度&#xf…...

【大数据】Apache Superset:可视化开源架构

Apache Superset是什么 Apache Superset 是一个开源的现代化数据可视化和数据探索平台&#xff0c;主要用于帮助用户以交互式的方式分析和展示数据。有不少丰富的可视化组件&#xff0c;可以将数据从多种数据源&#xff08;如 SQL 数据库、数据仓库、NoSQL 数据库等&#xff0…...

LabVIEW调用不定长数组 DLL数组

在使用 LabVIEW 调用 DLL 库函数时&#xff0c;如果函数中的结构体包含不定长数组&#xff0c;直接通过 调用库函数节点&#xff08;Call Library Function Node&#xff09; 调用通常会遇到问题。这是因为 LabVIEW 需要与 DLL 中的数据结构完全匹配&#xff0c;而包含不定长数…...

MySQL 17 章——触发器

在实际开发中&#xff0c;我们经常会遇到这样的情况&#xff1a;有2个或者多个相关联的表&#xff0c;比如商品信息表和库存信息表&#xff0c;分别存放在两个不同的数据表中&#xff0c;我们在添加一条新商品记录的时候&#xff0c;为了保证数据的完整性&#xff0c;必须同时在…...

面向对象分析与设计Python版 面向对象设计方法

文章目录 前言一、职责驱动设计二、职责驱动设计-案例 前言 面向对象设计目标&#xff1a;在面向对象分析建立的领域模型的基础上&#xff0c;定义对象操作&#xff08;职责&#xff09;。为对象分配职责的方法有&#xff1a; 职责驱动设计遵循GRASP设计原则&#xff08;Gene…...

GB/T 19582.1-2008主要内容

标准背景与概述 GB/T 19582.1-2008是由中国国家标准化管理委员会发布的国家标准&#xff0c;旨在指导和规范基于Modbus协议的工业自动化网络的设计和实施。该标准由全国工业过程测量控制和自动化标准化技术委员会&#xff08;TC124&#xff09;归口&#xff0c;并由中国机械工…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇

根据 QYResearch 发布的市场报告显示&#xff0c;全球市场规模预计在 2031 年达到 9848 万美元&#xff0c;2025 - 2031 年期间年复合增长率&#xff08;CAGR&#xff09;为 3.7%。在竞争格局上&#xff0c;市场集中度较高&#xff0c;2024 年全球前十强厂商占据约 74.0% 的市场…...

Easy Excel

Easy Excel 一、依赖引入二、基本使用1. 定义实体类&#xff08;导入/导出共用&#xff09;2. 写 Excel3. 读 Excel 三、常用注解说明&#xff08;完整列表&#xff09;四、进阶&#xff1a;自定义转换器&#xff08;Converter&#xff09; 其它自定义转换器没生效 Easy Excel在…...

Springboot 高校报修与互助平台小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;高校报修与互助平台小程序被用户普遍使用&#xff0c;为…...