Flv.js文档使用随记
关键字:Flv.js | Flv js | Flv-js | HTML5 FLV Player |
0x001: 前言
以下涉及到 flv.js 所有内容均是V1.5.0版本内的,如方法、属性、常量、监听等等,不讨论视频编解码,只陈述官方文档内容。采用文字+图片形式,单文字描述怕不好理解,单图片模式又怕将来哪天会挂掉,现在很多年份久的博文就有这情况,也不是没遇到过。非前端工作者,部分术语可能描述不得当,望理解。纯手码字一下午,只是为了时间久后遗忘再回来看一下。
0x002: 架构图

0x003: API文档相关内容
flvjs.isSupported()
// 查看当前浏览器是否支持flv.js,返回类型为布尔值
flvjs.createPlayer(mediaDataSource: MediaDataSource, config?: Config)
/* 创建一个Player实例,它接收一个MediaDataSource(必选), 一个Config(可选),如:
var flvPlayer = flvjs.createPlayer({
type: 'flv',
url: 'http://example.com/flv/video.flv'
}); */
MediaDataSource的字段列表如下,

这里说下最后一个segments字段(其余字段都很简单),它接收一个数组,类型为MediaSegment,MediaSegment的字段列表如下,

如果segments字段存在,transmuxer将把此MediaDataSource视为多片段源。在多片段模式下,将忽略MediaDataSource结构中的duration filesize url字段。
什么个意思呢,用白话说就是如果指定了segments字段那么之前指定的duration filesize url字段就不再生效了,将标志这是一个多片段合成一个的视频,进度条的总时长就等于各片段相加的和,所以每个片段的duration filesize一定要指定准确。
Config字段很多,就不一一介绍了,如下

flvjs.getFeatureList()
// 返回一些功能特性列表,比如是否支持FLV直播流、H264 MP4 视频文件等等,如下

flvjs.FlvPlayer(mediaDataSource, optionalConfig)
flvjs.NativePlayer(mediaDataSource, optionalConfig)// 这两个方法都继承自 Player抽象接口,一个是创建适用于FLV的Player实例,一个是适用于MP4的Player实例,如下
其实 flvjs.createPlayer(略) 内部就是根据 type 分别创建不同的Player实例,自己去看看源码就知道了。如下

interface Player (abstract)
// 它里面的每个方法或属性其实就是你自己创建出来Player实例的部分方法或属性,可直接调用。如下

flvjs.LoggingControl
// 一个全局接口,用于设置 flv.js 的日志级别。如下

举几个简单的例子:
flvjs.LoggingControl.getConfig() // 获取当前日志项的配置情况,如
enableCallback: true
enableDebug: true
enableError: true
enableInfo: true
enableVerbose: true
enableWarn: true
forceGlobalTag: true
globalTag: "flv.js"
flvjs.LoggingControl.enableVerbose
/* 输出详细调试信息,默认为true,页面加载后会在控制台打印一些解码日志信息,如forceGlobalTag例子中的日志那样。
设置 false; 控制台不再打印。*/
flvjs.LoggingControl.forceGlobalTag
// 默认false;
未设置之前的log打印是这样
[MSEController] > MediaSource onSourceOpen
[FLVDemuxer] > Parsed onMetaData
[FLVDemuxer] > Parsed AVCDecoderConfigurationRecord
[FLVDemuxer] > Parsed AudioSpecificConfig
[MSEController] > Received Initialization Segment, mimeType: video/mp4;codecs=avc1.640028
[MSEController] > Received Initialization Segment, mimeType: audio/mp4;codecs=mp4a.40.5
[FlvPlayer] > Maximum buffering duration exceeded, suspend transmuxing task
设置 true; 后是这样
[flv.js] > MediaSource onSourceOpen
[flv.js] > Parsed onMetaData
[flv.js] > Parsed AVCDecoderConfigurationRecord
[flv.js] > Parsed AudioSpecificConfig
[flv.js] > Received Initialization Segment, mimeType: video/mp4;codecs=avc1.640028
[flv.js] > Received Initialization Segment, mimeType: audio/mp4;codecs=mp4a.40.5
[flv.js] > Maximum buffering duration exceeded, suspend transmuxing task
[flv.js] > MediaSource onSourceEnded
flvjs.Events
// 可以与Player.on()/ Player.off()一起使用的一系列常量。需要使用前缀flvjs.Events。如下

flvjs.ErrorTypes
flvjs.ErrorDetails// 是几个错误类型以及相应类型对应的错误详情,可以用来做些判断。也需要使用前缀flvjs.Events。如下

0x004: 直播播放 文档相关内容
您需要在MediaDataSource中提供一个实时流URL(可以是HTTP 或 WebSocket),并指示isLive:true。如下
var flvPlayer = flvjs.createPlayer({
type: "flv",
isLive: true,
url: "http://127.0.0.1:8080/live/livestream.flv"
});

0x005: 多段播放 文档相关内容
多片段配置示例,需注意的是文档强调:您必须为每个细分提供准确的持续时间。

0x006: 使用记录
- 可以在播放前指定MediaDataSource参数,hasAudio(是否有音频)及hasVideo(是否有视频),单独指定单独有,都指定则都有。
- SeekTo功能 或 player.currentTime属性 接收的值类型是Number,如78或108.999,单位秒
0x007: 问题记录
Q1:点击进度条的未缓冲区域时,不会跳转到对应时间处继续播放,而是无响应。比如6分钟MV,当前播放到3分0秒,当前缓冲到5分0秒,如果点击进度条到5分01秒或之后播放器就无响应了。
A1:目前用户层的解决办法只能先点击到离缓冲区最近的时长,如4分59秒,播放器才会自动缓冲接下来未缓冲的片段。小文件基本无感,大文件才会有体现。(点播,视频源类型flv,H264+AAC,大小111 MB )
QN:...........
0x008: 完结
Flv.js文档使用随记的更多相关文章
- gulpfile.js文档
gulp watch 实现监听不仅需要package.json文档,还需要gulpfile.js文档.否则无法实现. 1.gulp的安装 1.1 首先必须先安装node.js.这个可以参考之前的博客& ...
- 使用node.js 文档里的方法写一个web服务器
刚刚看了node.js文档里的一个小例子,就是用 node.js 写一个web服务器的小例子 上代码 (*^▽^*) //helloworld.js// 使用node.js写一个服务器 const h ...
- JS文档生成工具:JSDoc 介绍
JSDoc是一个根据javascript文件中注释的信息,生成API文档的工具.生成的文档是html文件.类似JavaDoc和PHPDoc. 用法 /** 一坨注释之类的 */JSDoc会从/**开头 ...
- JS文档和Demo自动化生成工具 - SmartDoc发布
曾几何时,当你码神附体,一路披荆斩棘的完成代码后,带着“一码在手,天下我有”的傲然环顾之时,却发现单元测试.API文档.Demo实例陆续向你砸来,顿时有木有一种冰水挑战后的感觉.而这时你应该:哟哟,快 ...
- 使用YUIDoc生成JS文档
其实YUIDoc主页已经写的比较清晰了,但有一些概念和细节再点出一些注意的地方. 目前最新的YUIDoc使用nodejs进行开发安装和使用都非常的方便. 我们只需要将我们的代码加上必要的注释,便可以很 ...
- js文档系统-jsdoc-docdash
一.参考文档 模版:https://github.com/clenemt/docdash 例子:http://clenemt.github.io/docdash/index.html jsdoc:ht ...
- tweenmax.js 文档
TweenMax 参考http://bbs.9ria.com/thread-214959-1-1.html TweenMax 可能是很多人都用的,包括我 但 是最近发现大量的运用就总会产生这样或那样的 ...
- js文档视口高度函数
objwin=window;objBody=document.body;objDel=document.documentElement; 关于弹窗时候用到 function getPageHeig ...
- js文档碎片
//文档碎片:类似一个临时的文档,要所有要加的dom元素先放在这里,达到不要每次操作dom元素提高页面效率 var d1 = new Date(); //创建十个段落,常规的方式 ; i < ; ...
随机推荐
- 【大厂面试04期】讲讲一条MySQL更新语句是怎么执行的?
流程图 这是在网上找到的一张流程图,写的比较好,大家可以先看图,然后看详细阅读下面的各个步骤. 执行流程: 1.连接验证及解析 客户端与MySQL Server建立连接,发送语句给MySQL Serv ...
- el-upload配合vue-cropper实现上传图片前裁剪
需求背景 上传一个封面图,在上传之前需要对图片进行裁剪,上传裁剪之后的图片,类似微信的上传头像. 技术方案 上传肯定是用element的 el-upload 组件实现上传,非常方便,各种钩子函数. 裁 ...
- WebService之Spring+CXF整合示例
一.Spring+CXF整合示例 WebService是一种跨编程语言.跨操作系统平台的远程调用技术,它是指一个应用程序向外界暴露一个能通过Web调用的API接口,我们把调用这个WebService的 ...
- Linux的文件系统及文件缓存知识点整理
Linux的文件系统 文件系统的特点 文件系统要有严格的组织形式,使得文件能够以块为单位进行存储. 文件系统中也要有索引区,用来方便查找一个文件分成的多个块都存放在了什么位置. 如果文件系统中有的文件 ...
- Flutter upgrade更新版本引发的无法启动调试APP的错误 target:kernel_snapshot failed”
前言 我的主机上的Flutter 本地的分支是在 beta,因为去年想尝鲜Flutter Web,所以一直没切回来stable分支. 早上打开VSCode,右下角弹出了Flutter upgrade的 ...
- 我们为什么要用hibernate
1.hibernate对JDBC访问数据库的代码做了一个封装,简化了数据访问繁琐的代码. 2.hibernate的性能非常好,因为它是个轻量级框架.映射的灵活性很好,它支持各种关系型数据库,从一对一到 ...
- Base-64字符串无效,The input is not a valid Base-64 string as it contains a non-base 64 character
base64规则: * 字符串只可能包含A-Z,a-z,0-9,+,/,=字符* 字符串长度是4的倍数* =只会出现在字符串最后,可能没有或者一个等号或者两个等号 首先,C# 做上传文件的时候,需要替 ...
- 如何向这些CA来申请数字证书呢?
申请的过程大致是: 1.自己本地先生成一对密匙,然后拿着自己的公匙以及其他信息(比如说企业名称啊什么的)去CA申请数字证书. 2.CA在拿到这些信息后,会选择一种单向Hash算法(比如说常见的MD5) ...
- 如何安装 Sublime text 编辑器相关的插件
Sublime是一个伟大的编辑器,具有可靠的基础功能,使编写代码变得愉快.您可以安装一个包管理器,以便于安装插件和添加新功能. 为什么使用包管理器(package manager) 包管理器可以方便地 ...
- IE6、IE7兼容querySelectorAll和querySelector方法
querySelector 和 querySelectorAll 方法是 W3C Selectors API 规范中定义的.他们的作用是根据 CSS 选择器规范,便捷定位文档中指定元素. 目前几乎主流 ...