HLS学习(一)HLS介绍

HLS介绍




    HLS(HTTP live streaming)是apple公司提出的一个基于HTTP的流媒体网络传输协议

    HLS只请求基本的HTTP报文,和实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器



协议简介



     1、视频的封装格式是TS
     2、视频的编码格式是H.264,音频编码格式是MP3、AAC或者AC-3     
     3、处理TS视频文件本身,还定义了用来控制播放的m3u8文件(文本文件)



协议特点



     1、HLS是为了解决RTMP协议中存在的一些问题,RTMP协议不使用HTTP的接口,可能会被屏蔽
     2、RTMP是有状态的协议,很难对视频服务器进行平滑扩展;二HLS是无状态的协议,客户端只需要按照顺序使用下载存储在服务器的普通TS文件。
     3、HLS协议本身实现了码率的自适应。
     4、HLS协议的延迟很大,直播延迟比较敏感的服务慎用HLS


HLS的工作流程



     1、客户端先下载一级索引文件(即m3u8文件)
     2、一级索引文件里记录了二级索引文件(index1,index2,index3等,也是m3u8文件)的地址
     3、客户端根据地质去下载二级索引文件
     4、二级索引文件中记录了TS文件的下载地址

     5、这样客户端就可以按照顺序下载TS视频文件并连续播放



HLS的m3u8文件


    1、m3u8文件即索引(index)文件,也叫playlist文件,示例图如下:
HLS学习(一)HLS介绍_第1张图片

    或者这样,一级索引文件也叫Master PlayList,二级索引文件也叫Media PlayList
HLS学习(一)HLS介绍_第2张图片

    如果不存在Master PlayList,那么它是下面的形式
HLS学习(一)HLS介绍_第3张图片
     
     2、一级index文件(Master PlayList)介绍
     
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1064000
1000kbps.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=564000
500kbps.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=282000
250kbps.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2128000
2000kbps.m3u8
     bandwidth指定视频的比特率;
     PROGRAM-ID无需关注;
     每个#EXT-X-STREAM-INF的下一行就是二级index文件的路径,路径可以是绝对路径也可以是相对路径;
     客户端可以自己判断目前的网络带宽,来决定播放哪一个视频流

     3、二级index文件(Media PlayList)
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:10
#EXTINF:10,
2000kbps-00001.ts
#EXTINF:10,
2000kbps-00002.ts
#EXTINF:10,
2000kbps-00003.ts
#EXTINF:10,
2000kbps-00004.ts
... ...
#EXTINF:10,
2000kbps-00099.ts
#EXTINF:10,
2000kbps-00100.ts
#ZEN-TOTAL-DURATION:999.66667
#ZEN-AVERAGE-BANDWIDTH:2190954
#ZEN-MAXIMUM-BANDWIDTH:3536205
#EXT-X-ENDLIST
     #EXTINF表示每个ts切片的视频文件的时长
     #EXT-X-TARGETDURATION指定当前视频流中切片文件的最大时长,即这些ts切片的时长不能超过这个值
     #EXT-X-PLAYLIST-TYPE-VOD 表示当前的视频不是一个直播流,而是点播流
     #EXT-X-ENDLIST表示这个视频结束,这个标志也说明了当前的流是一个非直播流



播放模式



     1、点播VOD。特点是当前时间点可以获取到所有index文件和ts文件,二级index文件中记录了所有ts文件的地址。这种模式允许客户访问全部内容。
     2、Live(直播)。实时生成m3u8文件和ts文件。它的索引玩呢家一直处于动态变化的,播放的时候需要不断下载二级index文件,以获取最新生成的ts文件。如果一个而今index文件的末尾没有#EXT-X-ENDLIST标志,说明他是一个live视频流


整理自:http://www.jianshu.com/p/426425cad08a

你可能感兴趣的:(流媒体协议HLS)