流媒体协议-HLS协议简介

本文详细介绍了HLS协议,包括其概述、架构流程、m3u8文件解析,以及直播和点播模式下的会话流程。重点讨论了索引文件的结构、抓包分析中的注意事项,以及实时流处理策略。HLS通过HTTP协议实现高效的流媒体传输,支持码率自适应和二级索引结构以优化用户体验。
摘要由CSDN通过智能技术生成

目录

1:HLS概述

2:HLS架构流程

3:索引文件(m3u8文件)解析

4:HLS会话流程

5:HLS抓包分析

6:结束


1:HLS概述

        HLS是苹果公司提出的基于HTTP的流媒体传输协议,广泛应用于视频点播和直播领域。 通过将音视频流切割成TS(Transport Stream)切片,并生成m3u8播放列表文件,实现边下载边播放的效果。类似于实时在线播放。

         由于传输层只采用HTTP协议,HLS因此具有HTTP的优势,如易于穿越防火墙、负载均衡和CDN分发,支持码率自适应,但缺点是直播时延时较高,TS切片较多,特别是实时视频流,需要动态的生成和删除TS切片文件,为了实现高性能、低碎片化,对于文件存储的逻辑需要更加复杂的设计。

2:HLS架构流程

         音视频数据通过媒体编码器编码并封装成TS格式。 流切片器按照预设时间间隔对TS流进行切片,并生成或更新m3u8文件列表。 Web服务器存储播放列表文件和TS切片文件,并通过HTTP协议提供下载服务。 播放客户端拉取播放列表,按顺序下载TS切片文件并播放。

HLS整体流程框图如下:

  1. 音视频输入单元:这是从音视频设备(比如摄像头、麦克风)中采集音视频数据的设备或模块。它将实时的音视频信号转换成数字信号。

  2. 媒体编码器:这个模块负责对采集到的音视频数据进行编码,以符合所需的编码格式和码率要求。编码后的数据会被封装成TS(Transport Stream)格式,这是一种常用于数字视频广播和存储的格式。

  3. 流切片器:一旦音视频数据经过编码器处理并封装成TS格式,流切片器会按照预设的时间间隔将TS流切分成等时长的片段。同时,它会生成或更新一个M3U8(playlist播放列表)文件,这是一个播放列表文件,用于存储各个切片的信息,包括位置和有效性。

  4. Web服务器:这是一个HTTP服务器,用于存储切片文件和M3U8文件,并提供下载服务。通常使用Nginx等服务器搭建。客户端通过HTTP协议从Web服务器上拉取M3U8文件,然后根据M3U8文件中的信息逐个拉取TS切片文件,并进行播放。

总体而言,这个架构通过将音视频数据编码、切片、存储和传输相结合,实现了一套基于HTTP协议的流媒体传输系统,使得客户端可以通过简单的HTTP请求来获取并播放实时的音视频内容。

3:索引文件(m3u8文件)解析

       1 :m3u8文件是HLS协议的核心,包含索引信息和切片文件的URL。

       2  :重要标签包括#EXTM3U、#EXT-X-VERSION、#EXT-X-TARGETDURATION、#EXT-X-MEDIA-SEQUENCE和#EXTINF。

       3: 直播流的m3u8文件是动态变化的,需要不断更新;点播流的m3u8文件包含所有切片的地址,允许客户端访问全部内容。

索引文件示例:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.000000,
hls0.ts
#EXTINF:10.000000,
hls1.ts
#EXTINF:10.000000,
hls2.ts
  1. EXTM3U:这是M3U文件的标识符,表示这是一个M3U文件,以确保文件的兼容性。

  2. EXT-X-VERSION:表示协议的版本号,每个M3U8文件中只能出现一次,用于指定所使用的HLS协议版本。这里版本号为3。

  3. EXT-X-TARGETDURATION:表示最长分片的时长,单位为秒。这个字段指定了TS切片的最大时长,分片器应该按照这个时长进行分片。例如,这里是10秒一个分片。

  4. EXT-X-MEDIA-SEQUENCE:表示索引文件中第一个分片的序列号。如果M3U8文件中没有该字段,则playlist中第一个分片的序列号必须是0。

  5. EXTINF:描述下一个分片的信息,格式为EXTINF[duration],[title]。其中duration表示下一个分片的时长,title是TS切片文件的URL地址。对于不同版本的EXT-X-VERSION,duration可以是整数或浮点数。这里每个分片的时长都是10秒。

  6. #EXT-X-ENDLIST:表示录像文件的播放结束。如果存在这个标签,则表示录像文件的播放结束,切片器不会再生成新的切片。

  7. #EXT-X-PLAYLIST-TYPE:指定播放列表的类型,可选值为EVENT和VOD。EVENT表示只能在M3U8末尾添加新的分片信息,而不能删除老的分片,通常适用于直播+录播的情况;VOD表示对录像文件进行切片。

这些标签和字段用于描述和控制M3U8文件中的播放列表信息,以及TS切片的生成和播放过程。通过合理设置这些信息,可以实现对实时视频流或录像文件的有效管理和播放

为了能够实现码率自适应,HLS存在二级索引结构,一级索引文件存放的是不同码率的HLS源的M3U8地址,也就是二级索引文件的地址,二级索引文件如上所示是真正记录了同一码率下TS切片序列的下载地址,一级索引文件格式如下:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1280000,AVERAGE-BANDWIDTH=1000000, RESOLUTION=704x576
http://example.com/d1.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=2, BANDWIDTH=2560000,AVERAGE-BANDWIDTH=2000000, RESOLUTION=1280x720
http://example.com/720p.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=3, BANDWIDTH=7680000,AVERAGE-BANDWIDTH=6000000, RESOLUTION=1920x1080
http://example.com/1080p.m3u8
  1. 一级索引文件(主索引文件):这个文件存放的是不同码率或分辨率的HLS源的M3U8地址,也就是二级索引文件的地址。一级索引文件是一个普通的M3U8文件,其中每个EXT-X-STREAM-INF标签描述了一个不同码率或分辨率的视频流。客户端根据自身网络状况和设备性能选择合适的M3U8地址进行播放。

  2. 二级索引文件(子索引文件):这个文件包含了真正记录了同一码率下TS切片序列的下载地址。二级索引文件是M3U8格式的播放列表文件,它提供了实际的TS切片下载地址。

  3. EXT-X-STREAM-INF标签:描述了码率自适应的相关信息。其中BANDWIDTH属性指定了视频流的码率峰值,AVERAGE-BANDWIDTH属性表示媒体流的平均比特率,RESOLUTION属性表示视频流的分辨率。

  4. 二级索引文件的播放特点

    • 主索引文件只需要下载一次,因为它包含了所有可用的码率和分辨率选项。
    • 子索引文件是根据所选码率或分辨率从主索引文件中选择的。对于直播节目,子索引文件可能会定期重新加载,以获取最新的TS切片信息。
    • 客户端可能会根据网络条件或其他因素在任何时候改变到备用流,而所有的切换应该使用相同的音频文件,以确保在切换过程中音频不中断。

通过这种二级索引结构,HLS协议可以实现在不同码率和分辨率之间的平滑切换,并提供了一种有效的码率自适应机制,以确保用户在不同网络环境下都能够获得最佳的播放体验。

4:HLS会话流程

        HLS流媒体播放,通常包含 直播Live 和 VOD (点播)两种,点播VOD模式下,客户端只需下载一次m3u8文件即可获取所有TS文件地址。 直播Live模式下,客户端需要不断下载更新的m3u8文件以获取最新生成的TS文件。

  1. 点播(VOD)模式:在点播模式下,所有的索引文件和TS文件都是预先生成好的,客户端可以直接获取到所有的索引文件和TS文件的下载地址。因此,在播放VOD视频时,客户端只需要下载一次一级索引文件和二级索引文件,然后顺序下载TS文件并进行播放。除非客户端需要切换码率,否则无需再下载任何索引文件,只需不断下载TS文件并播放即可。

  2. 直播(Live)模式:在直播模式下,索引文件和TS文件是实时生成的。因为直播流是实时产生的,新的TS文件会随着时间的推移不断生成。客户端在播放过程中需要不断获取最新的TS文件和索引文件。因此,客户端在播放直播视频时,需要先下载一次二级索引文件,然后下载TS文件进行播放。但在播放的同时,新的TS文件也在生成,因此在播放过程中客户端需要定期下载更新的二级索引文件,以获取最新生成的TS文件的下载地址,从而保持播放的连续性。

总结来说的话,VOD模式下的播放是基于预先生成好的索引文件和TS文件,而Live模式下的播放则是基于实时生成的索引文件和TS文件,需要不断获取最新的文件来保持播放的连续性。

5:HLS抓包分析

         抓包分析展示了客户端如何通过HTTP协议拉取m3u8文件和TS切片文件。 服务器需要正确处理m3u8文件的更新和TS切片的老化,以确保客户端能够顺利播放。

hls.m3u8文件内容如下:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:2
#EXTINF:10.000000,
hls2.ts
#EXTINF:10.000000,
hls3.ts
#EXTINF:10.000000,
hls4.ts

根据索引文件可知,VLC客户端一次拉取2,3,4个TS文件,TS切片文件地址为相对地址,VLC拉取相关切片时,需要加上前缀,如:http://10.45.12.29/live/hls2.ts

这里是一级播放索引,比较简单,HLS服务器切片时,特别是实时流的情况下,切片涉及到更新m3u8、新生成TS切片和老化老的切片,需要注意老化时机,如果搞错了可能会导致播放客户端拉去了m3u8播放列表,在下载TS切片时,下载不到的现象。以下是规范中有关索引文件有效期的说明:

如果播放列表索引文件没有包含EXT-X-ENDLIST标签(hls的live流),那么服务器应该使一个新版本的播放列表文件可用,并至少包含一个媒体文件的URL,新的播放列表索引文件必须与前一个播放列表索引文件在相对的时间内有效:从上一个播放列表文索引件开始有效的时间算起,不早于0.5倍持续时间,不晚于1.5倍持续时间,也就是说hls的live流要时刻更新m3u8文件,而更新时间要保持在[0.5,1.5]个ts持续时间内。
如果服务器期望移除TS切片,它必须使播放列表索引文件对于客户端不可用,在播放列表被清除时,它应该确保播放列表文件中的所有媒体文件对于客户端来说至少在一个播放列表文件持续时间内是可用的。
...
服务器可以限制最近一段时间添加到播放列表文件中的媒体文件的可用性,为了达到这个目的,播放列表文件必须包含准确的EXT-X-MEDIA-SEQUENCE标签。标签的值是按照从播放列表中移除的媒体文件的URL递增的。
媒体文件的URL必须按照其加入的顺序移除。当服务器从播放列表移除URL时,媒体文件在一段时间内必须保持可用,该时间等于媒体文件的时间加上包含该媒体文件的最长播放列表文件的时间。
当媒体文件通过http传输给客户端后,如果服务器打算移除该文件,那么它应该确保http响应头包含反应生存时间的过期头。
那些不包含EXT-X-ENDLIST标签的播放列表文件的持续时间必须至少三倍于targrt dutration。之所以为三倍的targrt dutration可能是因为,根据hls协议来看,每个终端的播放行为都是不一致的,对于点播的m3u8文件来说,都是从第一个文件开始播,但是对于直播的m3u8,播放器可以从任意一个文件开始向后(新的文件)追溯。不过一般的播放器都是从倒数第三个开始。

也是就是说hls的live流要时刻更新m3u8文件,而更新时间要保持在[0.5,1.5]个ts持续时间内,针对老化的TS文件,至少要保留3倍目标持续时间之后再删除,才能确保客户端获取的播放列表文件,在下载TS切片时,切片是可用的。

6:结束

        切片器在处理实时流(Live)时通常会采用的一种策略是:

  1. 切片持续时间设定为3秒:这是指切片器将实时流分割成的每个切片文件的持续时间。在这种情况下,每个切片文件的时长被设定为3秒。

  2. 切片文件以I帧开头:在视频编码中,I帧(关键帧)是帧序列中的一个重要帧,它包含完整的图像信息,而其他帧(如P帧和B帧)则是相对于前一帧的差异数据。因此,以I帧开头的切片文件保证了每个切片文件都是可以独立播放的,而不需要依赖前面的帧。

  3. 切片持续时间不严格按照设定时间来:由于视频编码中I帧的出现时间是不确定的,因此切片的持续时间并不一定严格等于预设的时间。切片器会尽量在I帧之间进行切片,以保证每个切片都是以I帧开始的。这样做可以确保无论客户端从实时流的哪个位置拉取切片文件,都可以立即播放,而不会出现播放问题。

  4. 切片持续时间是I帧间隔的整数倍:由于切片器需要在I帧之间进行切片,因此切片的持续时间一般会设定为I帧间隔的整数倍。切片器会选择最接近预设值的整数倍作为切片的实际持续时间。

综上,切片器在处理实时流时会根据视频流的I帧间隔来选择切片的持续时间,并确保每个切片以I帧开头,以保证切片的独立性和可播放性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值