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

协议之HLS介绍

HLS(HTTP Live Streaming),苹果推出的基于 HTTP 的流媒体传输协议,核心是把视频切分成小分片 + m3u8 索引文件,浏览器 / 播放器通过普通 HTTP 请求逐段下载播放,无需专用流媒体端口(RTMP 用 1935),80/443 端口通用,防火墙、CDN 友好。

其实就是音视频直接使用HTTP 进行传输,这样天然的满足网元的传输。

核心特点

  1. 基于标准 HTTP,穿透性强,CDN 完美加速
  2. 自适应码率(多清晰度自动切换)
  3. 延迟偏高:标准直播 10~30s;低延迟 LL-HLS 可压到 2~5s
  4. 原生支持:Safari、iOS、Android、Chrome、VLC、Video.js、Flv.js
  5. 封装:视频 H.264/H.265,音频 AAC,分片容器 TS(传统)/fMP4(LL-HLS)

一、两大核心技术

1.1 m3u8 索引文件(文本,UTF-8)

后缀.m3u8,播放器先拉取这个文件,获取分片地址、时长、码率等配置。

1.1.1 主索引(Master m3u8):多清晰度自适应

包含多个不同分辨率 / 码率的子流地址,播放器根据网速自动切换。 示例:

#EXTM3U

#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=1280x720 720p.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=400000,RESOLUTION=960x540 540p.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=200000,RESOLUTION=640x360 360p.m3u8

  • BANDWIDTH:码率 bps
  • RESOLUTION:分辨率

1.1.2 分片索引(Media m3u8):存放 TS 分片列表

记录每一段视频分片、单段时长、加密信息、直播序列。

#EXTM3U

#EXT-X-TARGETDURATION:10 // 单个分片最大时长10s

#EXT-X-MEDIA-SEQUENCE:100 // 当前第一个分片序号

#EXTINF:9.8, seg-100.ts

#EXTINF:9.9, seg-101.ts

#EXT-X-ENDLIST // 点播视频才有,直播无此行

关键标签:

  • #EXTINF:分片实际时长(秒)
  • #EXT-X-MEDIA-SEQUENCE:直播滚动更新,旧分片会被删除
  • #EXT-X-KEY:加密信息(AES-128 加密 HLS)
  • #EXT-X-DISCONTINUITY:分片编码切换标记

关于m3u8文件的生成,可以参考我在CNblog的博文:HLS(HTTP Live Streaming)协议之m3u8文件生成方式 - mediastream - 博客园

1.2. TS 分片文件(Transport Stream)

  • 传统 HLS 分片后缀.ts,一般 2~10s 一段
  • 每片独立可解码,不用依赖前后分片,网络卡顿只卡当前片段
  • LL-HLS 使用 fMP4(碎片化 MP4)分片,延迟更低

二、点播 HLS vs 直播 HLS

2.1. VOD 点播

  • m3u8 末尾带#EXT-X-ENDLIST
  • 所有分片固定,不会新增、不会删除,可完整下载整部视频

2.2. Live 直播

  • #EXT-X-ENDLIST
  • 服务端持续追加新分片,旧分片超时自动清理(滑动窗口)
  • 播放器循环定时重新请求 m3u8 获取最新片段,天然存在缓冲延迟

HLS的服务搭建,可以参考我的博文:基于nginx的HLS简单服务器搭建 - mediastream - 博客园

三 常见工具与服务

3.1推流 / 切片工具

  • FFmpeg:ffmpeg -i rtmp://input -c copy -hls_time 4 output.m3u8
  • Nginx-RTMP-Module:RTMP 转 HLS 直播
  • SRS、MediaKit、Wowza、Nimble Streamer 流媒体服务器

3.2 前端播放

  • Video.js + hls.js(Chrome/PC 浏览器)
  • Safari 原生支持 m3u8,无需插件
  • Android ExoPlayer、iOS AVPlayer 原生支持

3.3 下载工具

  • ffmpeg、vlc、N_m3u8DL-RE(m3u8 批量下载解密)
http://www.jsqmd.com/news/1142880/

相关文章:

  • 如何在DSM 7.2.2及更高版本中安装Video Station:完整兼容性解决方案
  • Epomaker RT98 机械键盘:模块化数字小键盘+复古外观,体验如何?
  • 降AIGC终极攻略!AI率92%暴降至5%!实测10款降AIGC网站!免费降AIGC额度薅到爽!
  • 企业网络管理全攻略:稳住数字底座,降本增效少故障
  • MQTT-Proxy未来路线图:新功能规划与技术发展方向终极指南
  • 终极Purpur服务器配置指南:10分钟打造高性能Minecraft服务器
  • 通讯电子看板在印刷包装车间的实时数据采集应用
  • 如何选择最适合你的VS Code主题:OneDark-Pro深度解析与实战应用
  • 【架构实战】蓝绿部署:零停机发布的工程实践
  • 企业网络不是“工具”,而是业务的生命线
  • LV把卖鸭血粉丝的给告了?奢侈品巨头疯狂“扫街式”维权,真不是为了那点赔偿
  • C# 可空类型(Nullable)详解
  • 3步精通猫抓浏览器资源嗅探扩展:从架构剖析到高级配置实战指南
  • 【数据发布】340.8万个AOI 2026年6月28日更新 覆盖373地市 29大类
  • 鸣潮模组终极指南:15个功能模块让你的游戏体验焕然一新
  • AI成「生产资料」:SemiAnalysis降本增效,硅谷巨头却为天价账单抓狂
  • 用 Codex 这类工具,最好还是准备一个自己长期持有的号码
  • Claude工程师分享Fable 5使用技巧:打破人与模型信息差
  • 直流负载管理优化:继电器与微控制器方案详解
  • 鸿蒙应用SM2国密算法实践:加密签名完整实现与踩坑指南
  • 为什么选择OpenSCOW?5大优势让计算中心管理效率提升80%
  • 想找优质手推龙门架生产商?哪家才是你的心头好?
  • SceneDiver:具身智能体的视觉焦点规划引擎
  • 如何用Buzz实现离线音频转文字:新手的完整入门指南
  • Android 开发问题:EmbossMaskFilter 浮雕效果不生效
  • 国产化替代优选!FCE1353一体式EtherCAT IO模块方案详解
  • 简单3步!免费下载B站大会员4K高清视频完整教程
  • Hermes Agent:具备自我学习能力的AI代理系统部署与使用指南
  • 2026免费好用去水印软件哪个好用?电脑手机在线无广告工具教程
  • BA-Master / SA-Master / PM-Master:当多 Agent 拥有专属技能集