HLS协议详解
来源:互联网 发布:淘宝手机单怎么刷视频 编辑:程序博客网 时间:2024/06/06 18:39
今天来介绍一下HLS协议,这个协议是由苹果公司提出并推广开来的。来一段维基百科的定义。
HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。
苹果公司把HLS协议作为一个互联网草案(逐步提交),在第一阶段中已作为一个非正式的标准提交到IETF。但是,即使苹果偶尔地提交一些小的更新,IETF却没有关于制定此标准的有关进一步的动作。[1]
协议简介
HLS协议规定:
- 视频的封装格式是TS。
- 视频的编码格式为H264,音频编码格式为MP3、AAC或者AC-3。
- 除了TS视频文件本身,还定义了用来控制播放的m3u8文件(文本文件)。
为什么苹果要提出HLS这个协议,其实他的主要是为了解决RTMP协议存在的一些问题。比如RTMP协议不使用标准的HTTP接口传输数据,所以在一些特殊的网络环境下可能被防火墙屏蔽掉。但是HLS由于使用的HTTP协议传输数据,不会遇到被防火墙屏蔽的情况(该不会有防火墙连80接口都不放过吧)。
另外于负载,RTMP是一种有状态协议,很难对视频服务器进行平滑扩展,因为需要为每一个播放视频流的客户端维护状态。而HLS基于无状态协议(HTTP),客户端只是按照顺序使用下载存储在服务器的普通TS文件,做负责均衡如同普通的HTTP文件服务器的负载均衡一样简单。
另外HLS协议本身实现了码率自适应,不同带宽的设备可以自动切换到最适合自己码率的视频播放。其实HLS最大的优势就是他的亲爹是苹果。苹果在自家的IOS设备上只提供对HLS的原生支持,并且放弃了flash。Android也迫于平果的“淫威”原生支持了HLS。这样一来flv,rtmp这些Adobe的视频方案要想在移动设备上播放需要额外下点功夫。当然flash对移动设备造成很大的性能压力确实也是自身的问题。
但HLS也有一些无法跨越的坑,比如采用HLS协议直播的视频延迟时间无法下到10秒以下,而RTMP协议的延迟最低可以到3、4秒左右。所以说对直播延迟比较敏感的服务请慎用HLS。
HLS的index文件
#EXTM3U#EXT-X-VERSION:3#EXT-X-ALLOW-CACHE:YES#EXT-X-MEDIA-SEQUENCE:0#EXT-X-TARGETDURATION:10#EXT-X-DISCONTINUITY#EXTINF:9.067, no desclivestream-0.ts#EXTINF:7.394, no desclivestream-1.ts#EXTINF:7.656, no desclivestream-2.ts#EXTINF:7.592, no desclivestream-3.ts#EXTINF:7.701, no desclivestream-4.ts#EXTINF:8.712, no desclivestream-5.ts
播放模式
点播VOD的特点就是当前时间点可以获取到所有index文件和ts文件,二级index文件中记录了所有ts文件的地址。这种模式允许客户端访问全部内容。上面的例子中就是一个点播模式下的m3u8的结构。
Live 模式就是实时生成M3u8和ts文件。它的索引文件一直处于动态变化的,播放的时候需要不断下载二级index文件,以获得最新生成的ts文件播放视频。如果一个二级index文件的末尾没有#EXT-X-ENDLIST标志,说明它是一个Live视频流。
客户端在播放VOD模式的视频时其实只需要下载一次一级index文件和二级index文件就可以得到所有ts文件的下载地址,除非客户端进行比特率切换,否则无需再下载任何index文件,只需顺序下载ts文件并播放就可以了。但是Live模式下略有不同,因为播放的同时,新ts文件也在被生成中,所以客户端实际上是下载一次二级index文件,然后下载ts文件,再下载二级index文件(这个时候这个二级index文件已经被重写,记录了新生成的ts文件的下载地址),再下载新ts文件,如此反复进行播放。
总结
其他的一些细节不想写了,发现简书上有一个作者写的很好了,其实我上面的总结和他的文章相比也没有什么新的内容。建议去看他的文章《HTTP Live Streaming (HLS) - 概念》.
转载自:http://www.jianshu.com/p/426425cad08a
- HLS协议详解
- hls协议详解
- HLS协议详解
- HLS 协议详解
- HLS协议
- HLS 协议
- HLS 协议
- HLS协议实现
- HLS协议实现
- LR模拟HLS协议
- HLS协议相关
- HLS协议解析1
- HLS协议相关知识
- HLS协议实现
- HLS协议的解读
- 流媒体协议—HLS
- [FFMPEG- 协议]hls
- HLS协议实现
- git two
- 宁波市第31届中小学程序设计比赛模拟试题 match 九宫格填字母
- H5基础知识第十三课时(正则表达式)
- poj-2818-密码-C语言
- Maven Archetypes Part 2:怎样创建我的第一个jar?
- HLS协议详解
- 如何从零开始写一个即时通讯软件(附源码)
- 《reinforcement learning:an introduction》第五章《Monte Carlo Methods》总结
- 21-Vue单文件组件的使用方式介绍
- CentOS下编写shell脚本来监控MySQL主从复制的教程_MySQL
- JS中的运算符和表达式
- 异步fifo的设计(二)
- jQuery查找,获取和修改元素
- Load Data使用方法