HLS(HTTP Live Streaming)是苹果公司提出的基于HTTP动态流传输协议。客户端可以根据网络带宽的变化,智能切换至对应码率、分辨率的媒体流进行播放,支持音视频的点播和直播。HLS可以通过HTTPS对媒体加密传输和身份认证。

HLS由服务器组件、分发组件、客户端三个部分组成。

服务器组件

将采集的音视频编码为MPEG-2传输流发送给流分段器,流分段器将编码后的媒体分成一系列时间持续时间相等的小媒体文件,以.ts文件(MPEG-2传输流文件)保存。同时流分段器还会创建一个.m3u8的索引文件,记录所有分片后小媒体文件的位置。分段器还可以对每个媒体段加密,并创建秘钥文件,目前HLS支持16个字节秘钥的AES-128加密。

分发组件

存储分片后的媒体文件(.m3u8文件和.ts文件),将客户端请求的媒体资源分发给客户端。

客户端

根据URL获取媒体索引文件(.m3u8),通过索引文件的内容获取相应的媒体流片段以及解密秘钥,当获取到的媒体片段数量足够多时,客户端便开始渲染呈现给用户。

m3u8文件

规范

  • #EXT-X-TARGETDURATION: 每片最大时长(秒)
  • #EXT-X-MEDIA-SEQUENCE: 起始播放位置,默认0。
  • #EXT-X-KEY: 加密信息
  • #EXT-X-VERSION: 版本
  • #EXTINF: 播放时长,值小于#EXT-X-TARGETDURATION。
  • #EXT-X-ENDLIST: 存在这个标签,说明当前是点播,否则就是直播状态。处于直播状态时,客户端会定期加载最新版本的索引文件,找到最新的媒体片段文件和加密秘钥,并添加到队列中。

一个简单的示例索引文件如下:

#EXTM3U
#EXT-X-TARGETDURATION:12
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="https://p.bokecc.com/servlet/hlskey?info=33D2A8E5B002F46D9C33DC5901307461&t=1639911151&key=9942094167040394D78382EDD6B21CC3",IV=0x33D2A8E5B002F46D9C33DC5901307461
#EXT-X-VERSION:4
#EXTINF:10.067,
33D2A8E5B002F46D9C33DC5901307461-10.ts?video=0&tpl=10&tpt=112
#EXTINF:10.000,
33D2A8E5B002F46D9C33DC5901307461-10.ts?video=14&tpl=10&tpt=112
#EXTINF:10.867,
33D2A8E5B002F46D9C33DC5901307461-10.ts?video=19&tpl=10&tpt=112
#EXTINF:10.000,
33D2A8E5B002F46D9C33DC5901307461-10.ts?video=25&tpl=10&tpt=112
#EXTINF:10.000,
33D2A8E5B002F46D9C33DC5901307461-10.ts?video=30&tpl=10&tpt=112
......
#EXT-X-ENDLIST

应用

HLS支持一级索引文件、也支持多级索引文件。多级索引文件主要由主索引、备用索引组成。主索引文件只加载一次,默认使用第一个备用索引流。客户端可以根据带宽的变化,自动切换对应的备用索引流。如果处于直播状态,备用索引文件会定期重新加载。

示例如下:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000, RESOLUTION=720x480 //BANDWIDTH:带宽  RESOLUTION:分辨率
http://ALPHA.mycompany.com/lo/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000, RESOLUTION=720x480
http://BETA.mycompany.com/lo/prog_index.m3u8#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=500000, RESOLUTION=1920x1080
http://ALPHA.mycompany.com/md/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=500000, RESOLUTION=1920x1080
http://BETA.mycompany.com/md/prog_index.m3u8

参考:
https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/Introduction/Introduction.html

HLS协议(m3u8)相关推荐

  1. iOS 边学边记 HLS协议 m3u8 ts详解

    1.HLS综述 谈HLS 就不得不谈苹果,谈苹果就不得不提乔帮主.HLS就是"HTTP Live Streaming"的缩写,它诞生自2009年,QuickTime和iPhone3 ...

  2. c++ hls协议 m3u8解析器

    从zlmediakit这个项目中借鉴来的代码,可以直接加到项目中使用. 用到了c++11的语法. 不管是直播还是点播都可以使用. 接收到m3u8文件的内容后,调用 HlsParser::parse(m ...

  3. php安卓直播抓取,hls,android_安卓大部分浏览器播放HLS协议直播流会从头开始,hls,android,ffmpeg,m3u8 - phpStudy...

    安卓大部分浏览器播放HLS协议直播流会从头开始 遇到的问题 HLS直播流在iOS系统中表现正常, 但在安卓使用大部分浏览器(UC浏览器除外)播放ffmpeg生成的HLS直播流都会发生从头播放的问题, ...

  4. HLS协议及java切片相关

    http://blog.csdn.net/cjsafty/article/details/7922849 简介:HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTT ...

  5. Nginx、HLS、M3U8、TS 搭建手记

    Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器. Nginx 添加模块(nginx-rtmp-module)可以搭建hls流媒体服务器. HLS HTTP ...

  6. 使用HLS协议连接nginx实现近实时流方式播放视频

    文章目录 1. 流媒体 1.1 流式传输 1.1.2 顺序流式传输 1.1.3 实时流式传输 2. 点播 2.1 点播方案 2.2 什么是`HLS` 3. 视频编码 3.1 视频编码格式 3.2 `F ...

  7. HLS协议深入分析——时间线介绍(二)

    在上一篇文章中,我们重点介绍了HLS协议中M3U8文件里面和时间相关的一些字段,以及这些字段在不同平台MAC,Android上的一些应用,本文介绍一下HLS中TS文件里面和时间相关的字段. 一.TS介 ...

  8. 流媒体传输 - HLS 协议

    HLS 全称是 HTTP Live Streaming,是一个由 Apple 公司提出的基于 HTTP 的媒体流传输协议,用于实时音视频流的传输.目前 HLS 协议被广泛的应用于视频点播和直播领域. ...

  9. 流媒体协议(一):HLS 协议

    一.HLS 概述 HLS 全称是 HTTP Live Streaming,是一个由 Apple 公司提出的基于 HTTP 的媒体流传输协议,用于实时音视频流的传输.目前HLS协议被广泛的应用于视频点播 ...

最新文章

  1. 微软开源的自动机器学习工具上新了:NNI概览及新功能详解
  2. OSI七层 TCP/IP四层 TCP/IP协议栈: 不同的通信协议的大集合
  3. 使用 NumPy 的标准化技巧
  4. C 中 main 函数的参数
  5. debian 下配置common lisp环境
  6. 在Windows XP中对系统文件(页面文件和注册表)进行碎片整理
  7. TCP面向连接中的“连接”和“可靠”与“不可靠”
  8. 8条体面的程序员偷懒技巧
  9. 兄弟姐妹们,祝大家圣诞节快乐!
  10. python文件操作with语句是不是不用关闭文件_分析用Python脚本关闭文件操作的机制...
  11. java Google图片验证码_使用google.kaptcha来生成图片验证码的实现方法
  12. 知识图谱——关系抽取
  13. 计算机网络网桥模拟课程设计,网桥模拟实验
  14. Java核心技术大会|Java应用开发专场
  15. 3d游戏设计读书笔记三
  16. 最近大火的chatGPT是什么?它是怎样聊天的?
  17. TUP第30期:微软资深专家论如何用Visual Studio开发iOS、Android应用
  18. 龚文祥:VC看B2C的5个核心数据
  19. 盘点世上最牛的5篇博士论文,跪拜!
  20. 常用查找法(C语言)

热门文章

  1. ChatGPT:探索RLHF与GPT的完美结合
  2. 大赛首单惊人:一天收益20%
  3. method_LPP(Locality preserving projections)
  4. 【ceph】CephFS文件系统和管理
  5. 计算机一级有加学分吗,大学还有这7个加学分的方式?!
  6. 太原理工大学软件学院19级数据库实验三(2021.4.19)
  7. 解决泛微 Emobile7打卡定位OA
  8. ADB 的下载和安装
  9. AD使用总结--2__PCB中各层作用详解
  10. 【温故知新】CSS学习笔记(并集和交集选择器)