HLS协议深入分析——时间线介绍(一)


在之前的文章中,我们已经介绍过,HLS协议由三部分组成,HTTP+M3U8+TS。在这三部分中,HTTP是传输协议,M3U8是索引文件,TS是视音频的媒体信息。

HLS直播也好,点播也好,都和时间紧密相关,在本文中,我们以HLS直播为例,重点分析一下M3U8和TS中,和时间相关的几个参数。

一.M3U8文件

这是一个文本文件。由一系列的标签组成,详细的介绍可以参考:https://tools.ietf.org/html/draft-pantos-http-live-streaming-18

直播的M3U8示例如下:

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-TARGETDURATION:8

#EXT-X-MEDIA-SEQUENCE:2680

#EXTINF:7.975,

2680.ts

#EXTINF:7.941,

2681.ts

#EXTINF:7.975,

2682.ts

使用HLS进行流媒体直播,M3U8索引文件中,一般保存三个TS片的描述,每次更新一片,在上例中,生成TS新片时,M3U8文件内容变化如下:

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-TARGETDURATION:8

#EXT-X-MEDIA-SEQUENCE:2681

#EXTINF:7.941,

2681.ts

#EXTINF:7.975,

2682.ts

#EXTINF:7.970

2683.ts

在M3U8文件中,存在三个和时间相关的Tag信息,我们来看一下。

1.      #EXTINF

指示出下面TS片的时间长度,单位是秒,可以是整数也可以浮点数,浮点数一般精确到小数点后面3位。在示例中,2680.ts的时长为7.975秒。

同时,EXTINF也影响了播放器刷新M3U8文件的间隔,正常情况下,播放器会把当前下载的TS片的EXTINF的值作为每次刷新M3U8文件的间隔;如果播放器发现本次取到的M3U8文件内容没有更新,会在1-2秒内再次刷新。

2.      #EXT-X-TARGETDURATION

指示出TS列表中最大TS片的时长,单位为秒,精度为整数。因该值只能是整数,因此在标准中这样定义:

The EXT-X-TARGETDURATION tag specifies the maximumMedia Segment

duration.The EXTINF duration of each Media Segmentin the Playlist

file, when rounded to the nearest integer, MUST beless than or equal

to the target duration;

即,对于播放列中的每个TS片,把它的EXTINF取整后,必须小于或等于EXT-X-TARGETDURATION。

在不同的系统中,对这个值的具体实现也不同。在Android系统中,不管理是QQ还是微信的播放器(可以通过H5的Video标签进行播放HLS),如果存在某些TS片,它的EXTINF 取整后,大于EXT-X-TARGETDURATION,播放器可以正常进行播放。在iOS系统中,使用系统播放器播放,如果存在某些TS片,它的EXTINF 取整后,大于EXT-X-TARGETDURATION,但不大于2倍EXT-X-TARGETDURATION,也可以正常播放,例如EXTINF最大值是10.000,EXT-X-TARGETDURATION值为5,可以正常播放,如果EXTINF最大值是10.001,EXT-X-TARGETDURATION值为5,则无法播放。

3.      #EXT-X-MEDIA-SEQUENCE

#EXT-X-MEDIA-SEQUENCE指示了当前播放的TS片的序号。在前面的示例中,我们把TS片的文件名和EXT-X-MEDIA-SEQUENCE保持了一致,但在实际的环境中,TS片的文件名可以和序号没有关系,对于直播来讲,通常情况下,播放器会把第一次获取到M3U8文件中的第一个TS片文件和其中的序号对应起来,然后依次类推,序号加1,就认为是指向接下来的一个TS片文件。例如,如果第一次获取下面的M3U8文件:

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-TARGETDURATION:8

#EXT-X-MEDIA-SEQUENCE: 0

#EXTINF:7.975,

a.ts

#EXTINF:7.941,

b.ts

#EXTINF:7.975,

c.ts

播放器就会认为EXT-X-MEDIA-SEQUENCE:0对应a.ts。当M3U8文件更新时:

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-TARGETDURATION:8

#EXT-X-MEDIA-SEQUENCE: 1

#EXTINF:7.941,

b.ts

#EXTINF:7.975,

c.ts

#EXTINF:7.978,

d.ts

   

此时,EXT-X-MEDIA-SEQUENCE: 1对应b.ts。

正常情况下,EXT-X-MEDIA-SEQUENCE会一直增加,如果遇到EXT-X-MEDIA-SEQUENCE变小的情况,不同系统的处理方式也不一样,在iOS中,播放器继续播放,但声音可能会出现异常,如卡顿等;在Android系统中,使用QQ浏览器播放,会导致视频播放暂停,甚至是浏览器报错。

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值