HLS.js 是一个实现 HTTP Live Streaming 客户端的 JavaScript 库。它依赖于 HTML5 视频 和 MediaSource Extensions 进行播放。
它通过将 MPEG-2 传输流和 AAC/MP3 流转换为 ISO BMFF (MP4) 片段来工作。转换过程在浏览器支持的情况下使用 Web Worker 异步执行。HLS.js 还支持 HLS + fmp4,这在 WWDC2016 上宣布。
HLS.js 直接在标准 HTML <video>
元素之上工作。
HLS.js 使用 ECMAScript6 (*.js
) 和 TypeScript (*.ts
)(ES6 的强类型超集)编写,并使用 Babel 和 TypeScript 编译 器转译为 ECMAScript5。
Rollup 用于构建发布包并为本地开发环境提供服务。
有关 HLS 格式和这些标签含义的详细信息,请参阅 https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis
#EXT-X-STREAM-INF:<attribute-list>
<URI>
#EXT-X-MEDIA:<attribute-list>
#EXT-X-SESSION-DATA:<attribute-list>
#EXT-X-SESSION-KEY:<attribute-list>
EME 密钥系统选择和预加载#EXT-X-START:TIME-OFFSET=<n>
#EXT-X-CONTENT-STEERING:<attribute-list>
内容引导#EXT-X-DEFINE:<attribute-list>
变量替换(NAME,VALUE,QUERYPARAM
属性)以下属性被添加到各自变体的属性列表中,但在选择和播放中未实现。
VIDEO-RANGE
(参见 #2489)#EXTM3U
#EXT-X-VERSION=<n>
#EXTINF:<duration>,[<title>]
#EXT-X-ENDLIST
#EXT-X-MEDIA-SEQUENCE=<n>
#EXT-X-TARGETDURATION=<n>
#EXT-X-DISCONTINUITY
#EXT-X-DISCONTINUITY-SEQUENCE=<n>
#EXT-X-BYTERANGE=<n>[@<o>]
#EXT-X-MAP:<attribute-list>
#EXT-X-KEY:<attribute-list>
(仅支持带有MPEG-2 TS片段的KEYFORMAT="identity",METHOD=SAMPLE-AES
)#EXT-X-PROGRAM-DATE-TIME:<attribute-list>
#EXT-X-START:TIME-OFFSET=<n>
#EXT-X-SERVER-CONTROL:<attribute-list>
#EXT-X-PART-INF:PART-TARGET=<n>
#EXT-X-PART:<attribute-list>
#EXT-X-SKIP:<attribute-list>
Delta播放列表#EXT-X-RENDITION-REPORT:<attribute-list>
#EXT-X-DATERANGE:<attribute-list>
元数据#EXT-X-DEFINE:<attribute-list>
变量导入和替换(NAME,VALUE,IMPORT,QUERYPARAM
属性)#EXT-X-GAP
(跳过加载GAP片段和部分。跳过仅包含GAP内容且没有合适替代内容的未缓冲程序的播放。参见 #2940)以下标签被添加到各自片段的属性列表中,但在流媒体和播放中未实现。
#EXT-X-BITRATE
(未在ABR控制器中使用)已解析但缺少功能支持
#EXT-X-PRELOAD-HINT:<attribute-list>
(参见 #5074)
完整的问题列表,请参见发布计划和待办事项项目选项卡中的"最高优先级"。编解码器支持取决于运行环境(例如,同一操作系统上的不同浏览器对HEVC的支持情况不同)。
#EXT-X-I-FRAME-STREAM-INF
I帧媒体播放列表文件SAMPLE-AES
方法密钥与fmp4、aac、mp3、vtt等片段(仅MPEG-2 TS)require
您可以安全地在Node中导入此库,绝对不会发生任何事情。导出了一个虚拟对象,以便导入库时不会抛出错误。HLS.js无法在Node.js中实例化。更多详情请参见 #1841。
首先,检出仓库并安装所需的依赖项
git clone https://github.com/video-dev/hls.js.git cd hls.js # 克隆或从仓库拉取后,确保所有依赖项都是最新的 npm install ci # 运行演示页面的开发服务器(文件监视时重新编译,但不写入实际的dist文件系统工件) npm run dev # 更改后运行健全性检查任务,以在提交更改前验证所有检查 npm run sanity-check
开发服务器将在8000端口上托管文件。启动后,可以在 http://localhost:8000/demo/ 找到运行的演示。
提交PR之前,请查看我们的贡献指南。 通过 video-dev.org 加入 #hlsjs 频道的Slack讨论,获取有关开发的更新和问题。
构建所有风格(适用于生产模式/CI):
npm install ci
npm run build
仅调试模式工件:
npm run build:debug
构建并监视(自定义开发设置,您需要通过另一个服务器托管 - 例如在子模块/项目中)
npm run build:watch
仅特定风格(已知配置有:debug、dist、light、light-dist、demo):
npm run build -- --env dist # 将"dist"替换为其他配置名称,见上文^
注意:始终构建"demo"配置。
注意: hls.light.*.js
dist文件不包括备用音频、字幕、CMCD、EME(DRM)或变量替换支持。此外,light版本中不提供以下类型:
AudioStreamController
AudioTrackController
CuesInterface
EMEController
SubtitleStreamController
SubtitleTrackController
TimelineController
CmcdController
运行代码检查器:
npm run lint
以自动修复模式运行代码检查器:
npm run lint:fix
仅运行错误检查(无警告)
npm run lint:quiet
运行prettier格式化代码
npm run prettier
运行类型检查以验证TypeScript类型
npm run type-check
一次运行所有测试:
npm test
运行单元测试:
npm run test:unit
以监视模式运行单元测试:
npm run test:unit:watch
运行功能(集成)测试:
npm run test:func
本项目的设计概述、模块、事件和错误处理可以在这里找到。
注意,您可以使用"https://github.com/video-dev/hls.js/tree/deployments"访问特定版本的文档
https://hlsjs.video-dev.org/demo
https://hlsjs-dev.video-dev.org/demo