您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > H5

Flv.js - FLV视频的HTML5播放器

时间:2020-08-19 10:53:23  来源:  作者:

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 - FLV视频的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 - FLV视频的HTML5播放器

flv.js项目

安装

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 的架构设计如下:

Flv.js - FLV视频的HTML5播放器

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 - FLV视频的HTML5播放器

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 - FLV视频的HTML5播放器

flv.js项目

总结

Flv.js 作为一个 HTML5 视频播放器,实现了通过原生 JAVAscript,在 HTML5 页面上进行 FLV 视频的播放,充分利用了 FLV 格式优秀的体积和质量,提供了更为优秀的播放体验,降低了视频服务器和负荷,同时支持切片、直播、懒加载等进阶特性,功能丰富。Flv.js 目前已被广泛应用到视频播放网站中,使用者众多,同时代码质量高,值得使用、研究和学习。

Flv.js - FLV视频的HTML5播放器


Tags:HTML5播放器   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
FLV(Flash Video)流媒体格式,是随着 Flash MX 的推出发展而来的视频格式。其文件体积小,一般1分钟只占1MB,是普通视频文件大小的1/3,且视频质量良好,广受视频网站欢迎。然而,FLV 格...【详细内容】
2020-08-19  Tags: HTML5播放器  点击:(175)  评论:(0)  加入收藏
▌简易百科推荐
前言在刚接触HTML的时候,你是否被它众多的标签所惊讶?尤其是HTNL5的标签,新增了不少,很多HTML4的标签跨版本之后就用不了了,如此多的标签,要记是不可能记完的,我们只需要一些常用的...【详细内容】
2021-08-27  鳌拜的表哥熬夜    Tags:HTML5   点击:(343)  评论:(0)  加入收藏
前言前段时间笔者一直忙于数据可视化方面的工作,比如如何实现拖拽式生成可视化大屏,如何定制可视化图表交互和数据导入方案等,这块需求在B端企业中应用非常大,所以非常有探索价...【详细内容】
2021-08-18  趣谈前端    Tags:H5编辑器   点击:(90)  评论:(0)  加入收藏
前言移动端开发在前端里像神一样地存在,不是说它多难而是说它坑位实在太多了,怎样填都填不完。Android和iOS各显神通,Android的系统版本和屏幕分辨率多得难以一招兼容,iOS的顽固...【详细内容】
2021-03-18      Tags:H5   点击:(228)  评论:(0)  加入收藏
1.HTML5是什么HTML是web开发中三大规范之一,可以参考:Web前端开发-HTML入门干货 。HTML产生于1990年,1997年的HTML4.0成为互联网标准并广泛应用,HTML5是在HTML4.01(1999年发布)的...【详细内容】
2021-02-19      Tags:HTML5   点击:(195)  评论:(0)  加入收藏
HTML5是HTML4.01和XHTML1.0之后超文本标记语言的最新版本,由一群自由思想者设计,最终实现了多媒体支持、交互性、更智能的表单和更好的语义标注。 HTML 5不只是 HTML规范的最...【详细内容】
2021-01-20      Tags:HTML5   点击:(179)  评论:(0)  加入收藏
前言浏览器越来越强大,从文字、图片、到声音、视频、动画与游戏都有了丰富的应用。H5之后,不仅仅是表现层,数据存储与通讯能力也得到大幅度提高,并逐渐取得共识,形成了标准。随着...【详细内容】
2020-12-29      Tags:H5应用   点击:(165)  评论:(0)  加入收藏
今天给大家隆重推荐一款超强功能的H5西瓜视频播放器插件xgplayer。 xgplayer 字节跳动公司西瓜播放器技术团队推出的开源音视频解决方案,star高达3.2K+。实现自定义加载、缓...【详细内容】
2020-11-24      Tags:XGPlayer   点击:(199)  评论:(0)  加入收藏
今天给大家推荐一款超棒的H5可视化网页制作编辑工具H5DS。 h5ds 基于HTML5构建的web网页可视化制作器。通过轻松拖拽元素即可快速生成精美的H5页面。 技术栈 前端:React+Mo...【详细内容】
2020-11-12      Tags:H5DS   点击:(393)  评论:(0)  加入收藏
今天给大家分享一款超全功能的跨浏览器平台甘特图表库DHTMLXGantt。 dhtmlx-gantt DHTMLX公司开源的 JavaScript 甘特图/横道图/条状图类库。用来快速构建显示项目、进度,和...【详细内容】
2020-11-12      Tags:HTML5   点击:(113)  评论:(0)  加入收藏
项目已经在10月底上线,最近又进入到其他项目里,到今天才抽出时间对这个项目总结一下。回顾一下,在项目的初期就设定为轻量级H5 App,上线后已经运行在 原生app、微信小程序、百...【详细内容】
2020-11-10      Tags:app开发   点击:(109)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条