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

学习HLS.js

前言

HTTP 实时流(也称为HLS(.m3u8))是一种基于HTTP的自适应比特率流通信协议。HLS.js依靠HTML5视频和MediaSource Extensions进行播放,其特点:视频点播和直播播放列表、碎片化的 MP4 容器、加密媒体扩展 (EME) 支持 DRM(数字版权管理)、自适应流媒体、无需重新下载段即可在缓冲区和后台缓冲区中搜索。

HLS的配置对象

var config = {autoStartLoad: true,startPosition: -1,debug: false,capLevelOnFPSDrop: false,capLevelToPlayerSize: false,defaultAudioCodec: undefined,initialLiveManifestSize: 1,maxBufferLength: 30,maxMaxBufferLength: 600,backBufferLength: Infinity,frontBufferFlushThreshold: Infinity,maxBufferSize: 60 * 1000 * 1000,maxBufferHole: 0.1,highBufferWatchdogPeriod: 2,nudgeOffset: 0.1,nudgeMaxRetry: 3,maxFragLookUpTolerance: 0.25,liveSyncDurationCount: 3,liveSyncOnStallIncrease: 1,liveMaxLatencyDurationCount: Infinity,liveDurationInfinity: false,preferManagedMediaSource: false,enableWorker: true,enableSoftwareAES: true,fragLoadPolicy: {default: {maxTimeToFirstByteMs: 9000,maxLoadTimeMs: 100000,timeoutRetry: {maxNumRetry: 2,retryDelayMs: 0,maxRetryDelayMs: 0,},errorRetry: {maxNumRetry: 5,retryDelayMs: 3000,maxRetryDelayMs: 15000,backoff: 'linear',},},},startLevel: undefined,audioPreference: {characteristics: 'public.accessibility.describes-video',},subtitlePreference: {lang: 'en-US',},startFragPrefetch: false,testBandwidth: true,progressive: false,lowLatencyMode: true,fpsDroppedMonitoringPeriod: 5000,fpsDroppedMonitoringThreshold: 0.2,appendErrorMaxRetry: 3,loader: customLoader,fLoader: customFragmentLoader,pLoader: customPlaylistLoader,xhrSetup: XMLHttpRequestSetupCallback,fetchSetup: FetchSetupCallback,abrController: AbrController,bufferController: BufferController,capLevelController: CapLevelController,fpsController: FPSController,timelineController: TimelineController,enableDateRangeMetadataCues: true,enableMetadataCues: true,enableID3MetadataCues: true,enableWebVTT: true,enableIMSC1: true,enableCEA708Captions: true,stretchShortVideoTrack: false,maxAudioFramesDrift: 1,forceKeyFrameOnDiscontinuity: true,abrEwmaFastLive: 3.0,abrEwmaSlowLive: 9.0,abrEwmaFastVoD: 3.0,abrEwmaSlowVoD: 9.0,abrEwmaDefaultEstimate: 500000,abrEwmaDefaultEstimateMax: 5000000,abrBandWidthFactor: 0.95,abrBandWidthUpFactor: 0.7,abrMaxWithRealBitrate: false,maxStarvationDelay: 4,maxLoadingDelay: 4,minAutoBitrate: 0,emeEnabled: false,licenseXhrSetup: undefined,drmSystems: {},drmSystemOptions: {},requestMediaKeySystemAccessFunc: requestMediaKeySystemAccess,cmcd: {sessionId: uuid(),contentId: hash(contentURL),useHeaders: false,},
};var hls = new Hls(config);
autoStartLoad是否在实例化后自动开始加载流
startPosition播放的起始位置(以秒为单位)
debug是否启用调试模式
capLevelOnFPSDrop是否在帧率下降时降低视频质量
capLevelToPlayerSize是否根据播放器大小调整视频质量
maxBufferLength缓冲区的最大长度(以秒为单位)
maxMaxBufferLength缓冲区的最大长度上限(以秒为单位)
backBufferLength缓冲区的后缓冲长度(以秒为单位)
frontBufferFlushThreshold 前缓冲区的刷新阈值(以秒为单位)
maxBufferSize缓冲区的最大大小(以字节为单位)
maxBufferHole 缓冲区中允许的最大空洞(以秒为单位)
fragLoadPolicy定义片段加载策略,包括最大等待时间和重试策略
startLevel初始加载的视频质量级别
lowLatencyMode是否启用低延迟模式
enableWorker是否使用 Web Worker 来处理流数据
enableSoftwareAES是否启用软件 AES 解密
loader自定义加载器函数
fLoader自定义片段加载器函数
pLoader自定义播放列表加载器函数
xhrSetup自定义 XMLHttpRequest 设置回调函数
fetchSetup自定义 Fetch 设置回调函数
abrController自定义码率控制器
abrEwmaFastLive直播时的快速 Ewma(指数加权移动平均)系数
abrEwmaSlowLive直播时的慢速 Ewma 系数
abrEwmaFastVoD点播时的快速 Ewma 系数
abrEwmaSlowVoD点播时的慢速 Ewma 系数
abrEwmaDefaultEstimate默认的 Ewma 估计值
abrBandWidthFactor 码率选择时的带宽因子
abrBandWidthUpFactor 码率选择时的上行带宽因子
enableDateRangeMetadataCues是否启用日期范围元数据提示
enableMetadataCues是否启用元数据提示
enableID3MetadataCues 是否启用 ID3 元数据提示
enableWebVTT是否启用 WebVTT 字幕
enableIMSC1是否启用 IMSC1 字幕
enableCEA708Captions是否启用 CEA-708 字幕
stretchShortVideoTrack是否拉伸短视频轨道
maxAudioFramesDrift允许的最大音频帧漂移
forceKeyFrameOnDiscontinuity是否在不连续时强制关键帧
fpsDroppedMonitoringPeriod帧率下降监控周期(以毫秒为单位)
fpsDroppedMonitoringThreshold帧率下降监控阈值
appendErrorMaxRetry追加错误的最大重试次数
emeEnabled是否启用 EME(加密媒体扩展)
licenseXhrSetup自定义许可证请求设置回调函数
drmSystemsDRM 系统配置
drmSystemOptionsDRM 系统选项
requestMediaKeySystemAccessFunc请求媒体密钥系统访问的函数
cmcdCMCD(Common Media Client Data)配置

demo效果

相关代码在资源

http://www.lryc.cn/news/519106.html

相关文章:

  • 2025年华为OD上机考试真题(Java)——判断输入考勤信息能否获得出勤奖
  • 空对象模式
  • 开启Excel导航仪,跨表跳转不迷路-Excel易用宝
  • 年度技术突破奖|中兴微电子引领汽车芯片新变革
  • Ubuntu 如何查看盘是机械盘还是固态盘
  • 计算机网络(三)——局域网和广域网
  • STM32F4分别驱动SN65HVD230和TJA1050进行CAN通信
  • 将光源视角的深度贴图应用于摄像机视角的渲染
  • docker一键安装脚本(docker安装)
  • 【SY2】Apollo10.0 Cyber基于Writer/Reader的通信方式
  • 【YOLOv8杂草作物目标检测】
  • 在Java中实现集合排序
  • el-descriptions-item使用span占行不生效
  • Android 绘制学习总结
  • Linux下部署SSM项目
  • 计算机网络 笔记 数据链路层 2
  • xml简介
  • 透明部署、旁路逻辑串联的区别
  • 【网络安全渗透测试零基础入门】之XSS攻击获取用户cookie和用户密码(实战演示)
  • c#版本、.net版本、visual studio版本之间的对应关系
  • 熵与交叉熵:从不确定性角度理解 KL 散度
  • Redis:数据类型
  • 搭建Node.js后端
  • 集合——数据结构
  • 从CentOS到龙蜥:企业级Linux迁移实践记录(系统安装)
  • 《机器学习》——支持向量机(SVM)
  • 【PPTist】公式编辑、插入音视频、添加动画
  • LeetCode - #186 翻转字符串里的单词 II(会员题)
  • Kafka核心参数与使用02
  • Three.js 渲染技术:打造逼真3D体验的幕后功臣