HLS详解(看这个就够了)

HLS详解(看这个就够了)

  • HLS概述
  • 官方定义
  • 优劣性
    • 优点:
    • 缺点:
  • 格式解析
  • HLS文件
    • playlist(m3u8)介绍
    • HLS playlist(m3u8)格式详解
  • 播放模式
    • 点播VOD
    • Live 模式

HLS概述

HLS是HTTP Live Streaming的简称,是苹果公司提出的基于HTTP的流媒体网络传输协议,它的基本原理也是服务端把文件或媒体流按照不同的码率切分成一个个小片段进行传输,客户端在播放码流时,可以根据自身的带宽及性能限制,在同一视频内容的不同码率的备用源中,选择合适码率的码流进行下载播放。在传输会话开始时,客户端首先需要下载描述不同码流元数据的M3U8索引文件。

官方定义

从概念上讲,HTTP Live Streaming由三个部分组成:服务器组件,分发组件和客户端软件。

在典型配置中,硬件编码器接受音频视频输入,将其编码为HEVC视频和AC-3音频,然后输出片段化的MPEG-4文件或MPEG-2传输流。然后,软件流分段器将流分成一系列简短的媒体文件,这些文件放在Web服务器上。分段器还创建并维护一个包含媒体文件列表的索引文件。索引文件的URL在Web服务器上发布。客户端软件读取索引,然后按顺序请求列出的媒体文件并显示它们,而各段之间没有任何暂停或间隙。

HLS详解(看这个就够了)
项目 释义
index file 主索引,后缀以”.m3u8“结尾的文件
Alternate-A index file 子索引,后缀以”.m3u8“结尾的文件
ts 实际缓存内容,后缀以”.ts“结尾的文件

HLS有两级索引

  1. 第一级索引存放的是不同码率的HLS源的M3U8地址,也就是二级索引文件的地址。
  2. 第二级索引则记录了同一码率下TS切片序列的下载地址。

客户端获取一级M3U8文件后,根据自己的带宽,去下载相应码率的二级索引文件,然后再按二级索引文件的切片顺序下载并播放TS文件序列。

HLS存储目录截图如下:

HLS详解(看这个就够了)

playlist(m3u8)介绍

HLS中的playlist是一个UTF-8编码的文本文件,其中包含了URL和描述性标签。一个常规的playlist如下所示:

其中以’#‘打头的行都是标签,HLS标准规定对于标准中未定义的标签,可以直接忽略;也就是说’#’也可以作为注释行。这里说明下上面M3U8文件的构成:

  1. #EXT-X-VERSION:表示协议的版本号,而且每个M3U8中只能出现一次该标签。对于具体版本号的定义,可以参考标准的第7节。
  2. #EXTM3U:作为M3U文件的标识符,可以用于文件类型识别,这是必须的字段。
  3. #EXT-X-TARGETDURATION:表示最长分片的时长,这是必须的字段。
  4. #EXT-X-MEDIA-SEQUENCE:表示playlist文件中第一个分片的序列号(整数值)。如果M3U8文件中没有该字段,则playlist中第一个分片的序列号必须是0。
  5. #EXTINF:表示下一个分片的时长。对于每个分片,必须有该字段。 对于#EXT-X-VERSION小于3的情况下,duration必须是整数;其他情况下duration可以是浮点数和整数。title是一个可选字段,仅用于增强可读性。
  6. #EXT-X-ENDLIST:该字段表示分片结束,不会在playlist文件中添加新的分片。

上面介绍的是最常见的playlist,还有一种playlist,仅包含播放节目列表信息,在HLS中称为master playlist,也是我们上图描述二级索引的结构,其示例如下:

其中包含的标签说明如下:

  1. #EXT-X-STREAM-INF:用于标识一个Variant Stream,这是由一系列的Redition组成的。该标签的属性列表中包含了Variant Stream的描述信息。例如:

    • BANDWIDTH表示Variant Stream中的峰值比特率,单位bits/s。
    • AVERAGE-BANDWIDTH表示Variant Stream中的平均比特率,单位bits/s。
    • CODECS包含Variant Stream中音视频编码格式相关的信息,比如上面的”mp4a.40.5″。
    • RESOLUTION包含Variant Stream中对应视频流的分辨率。
    • FRAME-RATE表示Variant Stream中的视频帧率。
  2. M3U8中还有一个标签需要关注下,EXT-X-PLAYLIST-TYPE。该标签只有两个值:EVENTVOD。EVENT指的是分片工具只能在M3U8末尾添加新的分片的信息,但不能删除老的分片,通常比较适用于直播+录播的情况(既要提供给客户端点播功能,也要对实时场景进行录制,直播完成之后EVENT就自然退化为VOD)。但是对于M3U8中存在#EXT-X-ENDLIST标签时,可以忽略EXT-X-PLAYLIST-TYPE。

  3. 还有一种情况,如果M3U8中不存在#EXT-X-ENDLIST以及EXT-X-PLAYLIST-TYPE标签,则服务器端可以任意更新playlist内容。

HLS playlist(m3u8)格式详解

可参考:
https://www.cnblogs.com/tocy/p/hls-playlist-example.html
https://blog.csdn.net/weixin_33735077/article/details/86362702
https://blog.csdn.net/weixin_38451161/article/details/101033178

播放模式

点播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文件,如此反复进行播放。

参考链接:
https://www.jianshu.com/p/426425cad08a
https://www.jianshu.com/p/32417d8ee5b6
https://www.jianshu.com/p/6de22b88dc73
https://blog.csdn.net/u011857683/article/details/84863250
https://blog.csdn.net/qiandublog/article/details/53434081
https://blog.csdn.net/weixin_38451161/article/details/101033178
https://www.cnblogs.com/tocy/p/hls-playlist-example.html

来源:终成一个大象

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年3月19日
下一篇 2020年3月19日

相关推荐