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文件,示例图如下:




hlsl 使用shared memory .hls文件_客户端




    或者这样,一级索引文件也叫Master PlayList,二级索引文件也叫Media PlayList



hlsl 使用shared memory .hls文件_HTTP_02




    如果不存在Master PlayList,那么它是下面的形式



hlsl 使用shared memory .hls文件_协议_03





     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视频流