HTTP Live Streaming:

HLS是一个由苹果公司提出的基于HTTP的流媒体网络传输协议,可以实现流媒体的直播(live)和点播(vod)。

HLS协议规定:

HLS协议由HTTP+M3U8+TS三部分组成,其中,HTTP是传输协议,M3U8是索引文件,TS是视音频的媒体信息。
视频的编码格式为H264,音频编码格式为MP3、AAC或者AC-3。

工作原理:

把整个ts流分成一个个ts小文件供播放器按顺序下载播放。
在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。

1 http 请求 m3u8 的 url。
2 服务端返回一个 m3u8 的播放列表,这个播放列表是实时更新的,一般一次给出5段数据的 url。
3 客户端解析 m3u8 的播放列表,再按序请求每一段的 url,获取 ts 数据流。

Media encoder将视频源中的视频数据转码到目标编码格式(H264)的视频数据,之后,在stream segmenter模块将视频切片。切片的结果就是index file(m3u8)和ts文件。

HLS的index文件(m3u8文件)

播放模式

点播VOD的特点就是当前时间点可以获取到所有index文件和ts文件,二级index文件中记录了所有ts文件的地址。这种模式允许客户端访问全部内容。
Live 模式就是实时生成M3u8和ts文件。它的索引文件一直处于动态变化的,播放的时候需要不断下载二级index文件,以获得最新生成的ts文件播放视频。如果一个二级index文件的末尾没有#EXT-X-ENDLIST标志,说明它是一个Live视频流。
m3u8的Tag,太多了,这里就不一一说明。
播放器拿到该m3u8列表之后,会请求一片ts后,间隔一段时间请求下一片ts。 这个间隔的时间的长短,一般是根据m3u8中的 #EXT-X-TARGETDURATION

优势:

1.码率自适应(Adaptive Streaming)

当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。

2.基于HTTP(穿墙/性能高)

HLS采取HTTP协议传输文件,所以可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。相比之下,因为RTMP协议不使用标准的HTTP接口传输数据,所以在一些特殊的网络环境下可能被防火墙屏蔽掉。

3.跨平台性:

支持PC/Android/IOS平台,并在移动端趋势明显。(PC主要的直播方案是RTMP)

4.充分利用CDN(负载均衡):

CDN即Content Delivery Network (内容分发网络)。CDN包含两大核心技术:负载均衡和分发网络
于负载,RTMP是一种有状态协议,很难对视频服务器进行平滑扩展,因为需要为每一个播放视频流的客户端维护状态。而HLS基于无状态协议(HTTP),客户端只是按照顺序使用下载存储在服务器的普通TS文件,做负责均衡如同普通的HTTP文件服务器的负载均衡一样简单。

劣势:

1.实时性差:

基本上HLS的延迟在10秒以上,而RTMP协议的延迟最低可以到3、4秒左右。

2.文件碎片:

若分发HLS,码流低,切片较小时,小文件分发不是很友好。特别是一些对存储比较敏感的情况,譬如源站的存储,嵌入式的SD卡。

HLS延时分析

HLS理论上延时=1个切片的时长+ 0-1个td + 0-n个启动切片 +网络连接耗时。

td是EXT-X-TARGETDURATION,可简单理解为播放器取片的间隔时间
n:苹果官方建议是请求到3个片之后才开始播放

假设列表里面的包含5个 ts 文件,每个 TS 文件包含5秒的视频内容,那么整体的延迟就是25秒。苹果官方推荐的ts时长时10s,所以这样就会大改有30s(n x 10)的延迟。

为了追求低延时效果,我们可以将切片切的更小,取片间隔做的更小,播放器未取到3个片就启动播放。极致来说可以缩减列表长度为1,并且 ts 的时长为1s,但是这样会造成请求次数增加,增大服务器压力,当网速慢时回造成更多的缓冲,增加HLS不稳定和出现错误的风险。

参考:
HLS协议介绍
HTTP Live Streaming (HLS) - 概念
流媒体|从入门到出家:流媒体协议—HLS
HTML 5 视频直播一站式扫盲

HTTP Live Streaming (HLS) 协议科普扫盲相关推荐

  1. 推流和拉流的概念以及RTMP和HLS协议

    https://www.bbsmax.com/A/x9J2wZM56o/ 推流为将直播内容推送至服务器的过程:拉流为服务器已有直播内容,用指定地址进行拉取的过程. rtmp rtmp是Real Tim ...

  2. 流媒体传输 - HLS 协议

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

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

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

  4. 技术博客|第15期:流媒体传输协议简介 - HLS协议

    在Hulu及Disney+流媒体平台上,自适应流媒体传输技术被广泛使用,它可以根据用户的网络情况相应地调整视频码率,为用户带来良好的观看体验.为了实现这一点,视频将被编码成不同码率的版本,并且在每个版 ...

  5. 流媒体点播/直播服务架构设计,类HLS协议

    有一个关于通信网络的冷笑话: 2G时代,你可以看苍井空.txt 3G时代,你可以看苍井空.jpg 4G时代,你可以看苍井空.avi 于是可以看到,如今的网络时代已经进入了流媒体时代,了解如何搭建一个流 ...

  6. HLS协议解析(含有pes分析)

    1. 综述 HLS(HTTP Live Streaming) 把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些.HLS 协议由三部分组成:HTTP.M3U8.TS.这三部分中,HTT ...

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

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

  8. 如何使用iOS实现视频的直播、点播、缓存?-HTTP Live Streaming (HLS)

    本文接 <如何使用iOS实现<芈月传>的直播.点播?-HTTP Live Streaming (HLS)(一)> HLS-Demo地址:https://github.com/y ...

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

    HLS协议简介 HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议. 工作原理 简单讲就是把整个流分成一个个小的,基于 HTTP 的文件来下载 ...

  10. hls协议(最清晰的讲解)

    今天来介绍一下HLS协议,这个协议是由苹果公司提出并推广开来的.来一段维基百科的定义. HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议.是 ...

最新文章

  1. list、dict、tuple的一些小操作总结
  2. 再议《反驳 吕震宇的“小议数据库主键选取策略(原创)” 》
  3. 时序图、活动图、状态图、协作图的区别
  4. 整型数据在内存中的存放形式
  5. MySQL软件的下载
  6. SpringMVC的数据响应-回写数据-返回对象或集合2(应用)
  7. Android开发之自定义ImageView圆角图片的方法
  8. 前端学习(1926)vue之电商管理系统电商系统之美化一层循环的UI结构for循环渲染第二层结构
  9. 您如何轻松地水平居中 div 使用CSS? [重复]
  10. Rust的各种花式汇编操作
  11. 【华为机试真题 Python实现】黑板上的数字涂颜色【2022 Q1 Q2 |100分】
  12. Ubuntu菜鸟入门(七)—— 微信安装
  13. 【前端】Vue+Element UI案例:通用后台管理系统-用户管理:Form表单填写、Dialog对话框弹出
  14. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器解决方案之CDN内容分发网络
  15. 服务器千兆网卡芯片,Intel 82574L and 82576 千兆网卡芯片区别.pdf
  16. 追梦的过程很开心,但结果却令人遗憾
  17. 支付宝小程序获取php用户id,02支付宝小程序(基于知晓云)~如何获取用户ID
  18. 数字集成电路物理设计学习总结——布图规划和布局
  19. 真实生活的记录:我三年的外企生涯(10) 出处:天涯虚拟社区
  20. new balance 574 bybd arbz nooy

热门文章

  1. 如何判断患者服用的温度敏感性药品依旧安全有效?
  2. golang学习笔记(6)-gorm实现查询功能
  3. 02-03-JSP-Maven-会话-MySQL事务
  4. 九层之台,起于累土:码良组件开发
  5. win10系统中如何查看wifi密码
  6. 蓝桥杯试题 基础练习 圆的面积_python_个人练习
  7. 中国菜刀使用与原理分析
  8. python中利用字典加密字符串_Python列表,字典和字符串操作
  9. 花猫c语言,C语言实现小猫钓鱼游戏 - 技术经验 - W3xue
  10. cmd怎么查看当前静态路由_计算机cmd命令之route,查看路由表,或配置一个更有效的路由...