Flv.js - FLV视频的HTML5播放器
yuyutoo 2025-01-06 16:12 2 浏览 0 评论
FLV(Flash Video)流媒体格式,是随着 Flash MX 的推出发展而来的视频格式。其文件体积小,一般1分钟只占1MB,是普通视频文件大小的1/3,且视频质量良好,广受视频网站欢迎。然而,FLV 格式往往利用 Flash Player 进行解码播放,但如今,主流浏览器都已经放弃支持 Flash Playe。同时,HTML5 原生的 video 标签并不支持 FLV 格式。如何在 HTML5 时代,还能发挥 FLV 视频格式的优势呢?作为一个蓬勃发展中的视频网站,bilibili 开源了 FLV 视频的 HTML5 播放器,使得 HTML5 与 FLV 得以结合。
简介
Flv.js,是 bilibili(哔哩哔哩)在 Github 上开源的 HTML5 的 FLV 视频播放器,项目位于 https://github.com/bilibili/flv.js,目前版本为 v1.5.0。Flv.js 支持 H.264 + AAC/MP3 编码的 FLV 视频,支持视频分片,支持低延迟的 HTTP/WebSocket 协议的 FLV 格式的直播视频流,兼容 Chrome、Firefox、Safari 10、IE 11 和 Edge,具有极低的消耗,支持浏览器硬件加速。原理上,Flv.js 把 FLV 视频流转码为 ISO BMFF(切片的MP4),然后把切片放到 HTML 的 video 元素中进行播放。
安装
Flv.js 可以使用 NPM 直接安装,加入到前端项目依赖中:
npm install --save flv.js
也可以使用国内镜像的 CNPM 进行安装:
cnpm install --save flv.js
还可以在本地进行构建:
npm install # 安装开发依赖
npm install -g gulp # 安装构建工具 gulp
gulp release # 构建发布
Flv.js 使用 ECMAScript 6 编写,使用 Babel Compiler 转译到 ECMAScript5,并使用 Browserify 进行打包。
示例
Flv.js 的架构设计如下:
核心部分为 FlvDemuxer 和 MP4Remuxer,分别对 FLV 视频进行分离,和封装为 MP4 视频。内部通过多个Controller控制器,发送指令,对数据流的操作进行控制。
Flv.js 使用简单,通过接口 createPlayer 实例化播放器,配置对应的视频源,然后,挂载到 DOM 容器上,并调用 load() 进行加载,调用 play() 进行播放:
<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>
注意到,flv.js 提供了 isSupported 接口,可以很方便地判断 Flv.js 是否支持当前的浏览器环境。Flv.js提供了一个测试用的 demo 页面,可以进行视频播放的测试:
Flv.js 主要提供了3个函数:
- flvjs.createPlayer():接受配置,实例化播放器
- flvjs.isSupported():是否支持当前浏览器
- flvjs.getFeatureList():支持的特性的列表
还有3个类:
- flvjs.FlvPlayer:FLV 播放器
- flvjs.NativePlayer:原生 HTML5 播放器,可以用户单 MP4 文件的播放
- flvjs.LoggingControl:日志控制
以及3个枚举:
- flvjs.Events:播放器事件
- flvjs.ErrorTypes:错误类型
- flvjs.ErrorDetails:错误具体信息
使用时的主要接口是 createPlayer,它的函数签名如下:
function createPlayer(mediaDataSource: MediaDataSource, config?: Config): Player;
其中 mediaDataSource 进行视频流配置,常用的参数包括:
- type:视频类型,flv 或 mp4
- isLive:是否为直播视频流
- cors:获取视频数据时是否启用 CORS
- url:视频流地址
- segments:视频切片配置
而 config 进行 flv.js 播放器内部配置,包括worker、缓存、加载策略等的配置。
对于体积较大的视频,往往在服务器中会进行切片处理。Flv.js 支持对于切片视频的加载播放,通过提供 segments 配置。segments 是一个切片配置的列表,每个配置包括了视频长度、文件大小和视频地址:
"segments": [
{
"duration": 1234, // in milliseconds
"filesize": 5678, // in bytes
"url": "http://cdn.flvplayback.com/segments-1.flv"
},
{
"duration": 2345,
"filesize": 6789,
"url": "http://cdn.flvplayback.com/segments-2.flv"
},
{
"duration": 4567,
"filesize": 7890,
"url": "http://cdn.flvplayback.com/segments-3.flv"
}
// more segments...
]
Flv.js 支持直播视频流的播放,通过 isLive 配置实现,支持 HTTP 协议的视频流:
{
// HTTP FLV
"type": "flv",
"isLive": true,
"url": "http://127.0.0.1:8080/live/livestream.flv"
}
以及 WebSocket 协议的视频流:
{
// FLV over WebSocket
"type": "flv",
"isLive": true,
"url": "ws://127.0.0.1:9090/live/livestream.flv"
}
总结
Flv.js 作为一个 HTML5 视频播放器,实现了通过原生 Javascript,在 HTML5 页面上进行 FLV 视频的播放,充分利用了 FLV 格式优秀的体积和质量,提供了更为优秀的播放体验,降低了视频服务器和负荷,同时支持切片、直播、懒加载等进阶特性,功能丰富。Flv.js 目前已被广泛应用到视频播放网站中,使用者众多,同时代码质量高,值得使用、研究和学习。
相关推荐
- springBoot使用Log4j
-
添加依赖<dependency><groupId>org.springframework.boot</groupId><ar...
- Log4j 严重漏洞修最新修复方案参考
-
CVE-2021-44228,原理上是log4j-core代码中的JNDI注入漏洞。这个漏洞可以直接导致服务器被入侵,而且由于“日志”场景的特性,攻击数据可以多层传导,甚至可以威胁到纯内网的服...
- 如何在Spring Boot中使用Log4j日志框架
-
SpringBoot是目前Java领域比较流行的一个应用程序开发框架,默认情况下使用的是SLF4J和Logback作为日志框架,但是在某些场景下,我们可能需要用到Log4j或Log4j2来满足一些特...
- log4j的使用
-
初识log4jlog4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIXSyslog...
- log4j的详细配置
-
###设置日志级别###log4j.rootLogger=error,stdout,D,E###输出到控制台###log4j.appender.stdout=org.apac...
- 深蹲时脚掌的打开弧度到底多少比较合适?
-
引子哈喽,大家晚上好,今天我还是给大家带来深蹲的小技巧。我们在之前的文章中,已经说过非常多关于深蹲的小技巧了,我想大家也已经知道了该如何去做一个正确的深蹲。今天我要给大家介绍一个经常被大家所忽略的技巧...
- 中杯vivo X90 对比超大杯X90 Pro+:京东方Q9和三星E6差距大吗?
-
X90标准版应该是大家目前最早能用到量产天玑9200处理器的一款手机了吧,根据蓝厂准则,想贪便宜肯定不能去线上买呀,线上买只是为了给低预算的朋友“分期”用的,根据线下渠道商提示:X90标准版目前已降价...
- 学习Geogebra重要的100条学习随笔(12)
-
角度①“0”:Alt+O;“π”:Alt+P;②GeoGebra默认计算都是使用弧度制;③携带度符号(°)的正常计算,但常量π/180会自动转为弧度。...
- 高中数学-三角函数
-
三角函数角的度量单位通常有两种,一种是角度制,另一种就是弧度制。...
- 数学与三角函数的基础用法和示例(一)
-
1.ABS函数说明返回数字的绝对值。一个数字的绝对值是该数字不带其符号的形式。语法ABS(number)...
- 折弯大圆弧每次折多少刀,折弯角度怎么计算
-
第一种方法如何折圆弧?(无模具时)如上图所示:板厚T=2MM,圆心角为90°1、先计算出弧长:弧长L=90°×3.14÷180°×中心层R59=92.632、选取折弯模具:上模用直剑刀,下模用8V(折...
- 高中数学里的角,和初中学的不太一样
-
同学们好,我是李状元数学课的李老师,讲人人都听得懂的高中数学课。经常有同学说起三角函数时会有点头疼,可是呢,三角函数其实是高中数学里比较基础的一部分,虽然应用非常广泛,但是一般都不会考察特别难的题目,...
- PS办公技巧:如何更改圆角矩形的弧度?
-
应用场景下图PS文档中有3个完全相同的圆角矩形(当前所有的圆角半径均为10像素),每个圆角矩形单独占用一个图层。下面我们让第1个图层“圆角矩形上”维持原样不变方便对比观察,将第2个图层“圆角矩形中”的...
- 解读角度制与弧度制的基础知识(讲义稿)
-
一、角度制1、什么叫做角度制?我们在平面几何学里研究的角度制,规定周角的1/360度为一度的角。这种用单位来度量角的制度叫做角度制。2、怎样用量角器来测量角?角的大小经常用量角器来测量(1)、点重合,...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)