HLS (HTTP Live Streaming)是Apple的动态码率自适应技术。主要用于PC和Apple终端的音视频服务,包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。
一、master playlist,常见的master m3u8如下所示:
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=1280000
example.com/low.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2560000
example.com/mid.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=7680000
example.com/hi.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5"
example.com/audio-only.m3u8
客户端可以根据当前自身的网络情况选择一个与其匹配的BANDWIDTH子m3u8进行播放请求。
二、I-Frames playlist,常见的包含倍速m3u8如下所示:
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=1280000
low/audio-video.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=86000,URI="low/iframe.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=2560000
mid/audio-video.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=150000,URI="mid/iframe.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=7680000
hi/audio-video.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=550000,URI="hi/iframe.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5"
audio-only.m3u8
当客户端有倍速播放需求时可以根据当前自身的网络情况选择一个与其匹配的BANDWIDTH子iframe m3u8进行播放请求。
三、iframe m3u8使用
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:YES
#EXT-X-I-FRAMES-ONLY
#EXT-X-TIMESHIFT
#EXT-X-MEDIA-SEQUENCE:339019297
#EXT-X-TARGETDURATION:5
#EXTINF:5.00,
#EXT-X-BYTERANGE:83472@0
010007181553_01_1695096485.ts
#EXTINF:5.00,
#EXT-X-BYTERANGE:166380@989444
010007181553_01_1695096485.ts
#EXTINF:5.00,
#EXT-X-BYTERANGE:125020@2068000
010007181553_01_1695096485.ts
#EXTINF:5.00,
#EXT-X-BYTERANGE:173336@3001796
010007181553_01_1695096485.ts
#EXTINF:5.00,
#EXT-X-BYTERANGE:189504@4010228
010007181553_01_1695096485.ts
当我们请求iframe m3u8时会获取到如上样式的m3u8内容,其中EXT-X-I-FRAMES-ONLY和#EXT-X-BYTERANGE需要我们特别关注。
1)EXT-X-I-FRAMES-ONLY:这个字段表示每个切片只有一个I帧;
2)EXT-X-BYTERANGE:表示只有I帧的切片如果下载,格式为#EXT-X-BYTERANGE:<length>[@<offset>],其中length表示range的长度, offset表示这个range从分片的什么位置开始读。下面这条切片即从010007181553_01_1695096485.ts这个切片文件的offset=0位置下载length=83472长度的数据。
#EXT-X-BYTERANGE:83472@0
010007181553_01_1695096485.ts