HLS详解(看这个就够了)

阅读: 评论:0

HLS详解(看这个就够了)
HLS详解(看这个就够了)
HLS概述
HLS是HTTP Live Streaming的简称,是苹果公司提出的基于HTTP的流媒体⽹络传输协议,它的基本原理也是服务端把⽂件或媒体流按照不同的码率切分成⼀个个⼩⽚段进⾏传输,客户端在播放码流时,可以根据⾃⾝的带宽及性能限制,在同⼀视频内容的不同码率的备⽤源中,选择合适码率的码流进⾏下载播放。在传输会话开始时,客户端⾸先需要下载描述不同码流元数据的M3U8索引⽂件。
官⽅定义
从概念上讲,HTTP Live Streaming由三个部分组成:服务器组件,分发组件和客户端软件。
在典型配置中,硬件编码器接受⾳频视频输⼊,将其编码为HEVC视频和AC-3⾳频,然后输出⽚段化的MPEG-4⽂件或MPEG-2传输流。然后,软件流分段器将流分成⼀系列简短的媒体⽂件,这些⽂件放在Web服务器上。分段器还创建并维护⼀个包含媒体⽂件列表的索引⽂件。索引⽂件的URL在Web服务器上发布。客户端软件读取索引,然后按顺序请求列出的媒体⽂件并显⽰它们,⽽各段之间没有任何暂停或间隙。
服务器组件(Server Component)
服务器组件负责获取媒体的输⼊流并对其进⾏数字编码。它以适合交付的格式封装它们,并准备封装的媒体以进⾏分发。
对于现场事件,服务器需要媒体编码器(可以是现成的硬件),以及⼀种将编码的媒体拆分为⽚段并将其保存为⽂件的⽅法,该⽅法可以是诸如由Microsoft提供的媒体流分段器之类的软件。 Apple或集成第三⽅解决⽅案的⼀部分。
分配组件(Distribution Component)
分发系统是Web服务器或Web缓存系统,可通过HTTP将媒体⽂件和索引⽂件传递给客户端。不需要⾃定义服务器模块即可交付内容,并且通常在Web服务器上只需要很少的配置。要实际部署HTTP Live Streaming,您需要为浏览器或客户端应⽤程序创建HTML页⾯以充当接收器。您还需要使⽤Web服务器,以及将实时流编码为包含HEVC或H.264视频以及AAC或AC-3⾳频的分段MPEG-4媒体⽂件的⽅式。
客户端软件(Client Software)
客户端软件负责确定要请求的适当媒体,下载这些资源,然后重新组合它们,以便可以将媒体连续地呈现给⽤户。客户端软件包含在iOS 3.0和更⾼版本中以及安装了Safari 4.0或更⾼版本的计算机上。
客户端软件⾸先使⽤标识流的URL获取索引⽂件。索引⽂件⼜指定可⽤媒体⽂件,解密密钥以及任何可⽤备⽤流的位置。对于选定的流,客户端按顺序下载每个可⽤的媒体⽂件。每个⽂件包含流的连续段。⼀旦下载了⾜够数量的数据,客户端便开始向⽤户展⽰重组后的流。
客户端负责获取所有解密密钥,验证或提供允许验证的⽤户界⾯以及根据需要解密媒体⽂件。
此过程将继续进⾏,直到客户端在索引⽂件中遇到EXT-X-ENDLIST标记为⽌。如果不存在EXT-X-ENDLIST标记,则索引⽂件是正在进⾏的⼴播的⼀部分。在正在进⾏的⼴播期间,客户端会定期加载索引⽂件的新版本。客户端在更新的索引中查新的媒体⽂件和加密密钥,并将这些URL添加到其队列中。
项⽬释义
Audio/Video inputs视频源可以是任意格式,可以是离线⽂件或实时码流
Media encoder将视频源中的视频数据转码到⽬标编码格式(H264)的视频数据
stream segmenter对编码后的视频进⾏切⽚,视频会被转换成HLS格式的视频(即TS和m3u8⽂件index file索引⽂件,后缀以".m3u8"结尾的⽂件
ts缓存内容,后缀以".ts"结尾的⽂件
HTTP传输协议
优劣性
优点:
1. 基于HTTP传输,防⽌防⽕墙屏蔽;
2. 码率⾃适应;
3. 服务器易于拓展,易于http做负载均衡;
缺点:
1. 时延较长(10秒左右),对时延敏感慎⽤;
2. 对服务器内存要求⾼;
格式解析
项⽬释义
⽹络协议HTTP
封装格式MEPG-2 TS
编码格式视频编码格式为H.264,⾳频编码格式为MP3、AAC、AC-3或EC-3
索引⽂件M3U8
HLS⽂件
项⽬释义
index file主索引,后缀以".m3u8"结尾的⽂件
Alternate-A index file⼦索引,后缀以".m3u8"结尾的⽂件
ts实际缓存内容,后缀以".ts"结尾的⽂件
HLS有两级索引:
1. 第⼀级索引存放的是不同码率的HLS源的M3U8地址,也就是⼆级索引⽂件的地址。
2. 第⼆级索引则记录了同⼀码率下TS切⽚序列的下载地址。
客户端获取⼀级M3U8⽂件后,根据⾃⼰的带宽,去下载相应码率的⼆级索引⽂件,然后再按⼆级索引⽂件的切⽚顺序下载并播放TS⽂件序列。
HLS存储⽬录截图如下:
playlist(m3u8)介绍
HLS中的playlist是⼀个UTF-8编码的⽂本⽂件,其中包含了URL和描述性标签。⼀个常规的playlist如下所⽰:
#EXT-X-VERSION:3
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:1
# Old-style integer duration; avoid for newer clients.
#EXTINF:10,
/segment0.ts
# New-style floating-point duration; use for modern clients.
#EXTINF:10.0,
/segment1.ts
#EXTINF:9.5,
/segment2.ts
#EXT-X-ENDLIST
其中以’#‘打头的⾏都是标签,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,也是我们上图描述⼆级索引的结构,其⽰例如下:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1280000,AVERAGE-BANDWIDTH=1000000, RESOLUTION=720x480
/low.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=2, BANDWIDTH=2560000,AVERAGE-BANDWIDTH=2000000, RESOLUTION=1080x720
/mid.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=3, BANDWIDTH=7680000,AVERAGE-BANDWIDTH=6000000, RESOLUTION=1920x1080
/high.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=4, BANDWIDTH=65000,CODECS="mp4a.40.5"
/audio-only.m3u8
其中包含的标签说明如下:
1. #EXT-X-STREAM-INF:⽤于标识⼀个Variant Stream,这是由⼀系列的Redition组成的。该标签的属性列表中包含了Variant
Stream的描述信息。例如:
1. BANDWIDTH表⽰Variant Stream中的峰值⽐特率,单位bits/s。
2. AVERAGE-BANDWIDTH表⽰Variant Stream中的平均⽐特率,单位bits/s。
3. CODECS包含Variant Stream中⾳视频编码格式相关的信息,⽐如上⾯的"mp4a.40.5"。
4. RESOLUTION包含Variant Stream中对应视频流的分辨率。
5. FRAME-RATE表⽰Variant Stream中的视频帧率。
2. M3U8中还有⼀个标签需要关注下,EXT-X-PLAYLIST-TYPE。该标签只有两个值:EVENT、VOD。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)格式详解
播放模式
点播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⽂件,如此反复进⾏播放。

本文发布于:2023-05-05 21:51:47,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/4/88695.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:客户端   服务器   媒体
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图