[HLS]切片文件M3U8格式的初步分析
1. m3u8文件时m3u文件的一种,只不过它的编码方式是是UTF-8格式,M3U用Latin-1字符集编码。
2. m3u8文件里面是不会存放音视频文件的。它里面存放的是地址一个地址,最终是通过这个地址来实现在线点播的。
3. m3u8分顶级m3u8和二级m3u8, 顶级m3u8主要是做多码率适配的, 二级m3u8才是真正的切片文件,客户端默认会
首先选择码率最高的请求,如果发现码率达不到,会请求郊低码率的流
3. 再来看看m3u8文件的格式解析
英文参考地址在这里:http://tools.ietf.org/html/draft-pantos-http-live-streaming-06
#EXTM3U 标头,此句必须在文件的第一行
#EXT-X-STREAM-INF 属性
BANDWIDTH 指定码率
PROGRAM-ID 唯一ID
CODECS 指定流的编码类型
#EXT-X-TARGETDURATION 定义每个TS的最大的持续时间。
#EXT-X-MEDIA-SEQUENCE 定义当前m3u8文件中第一个文件的序列号,每个ts文件在m3u8文件中都有固定唯一的序列号
,该序列号用于在MBR时切换码率进行对齐。
#EXT-X-KEY 定义加密方式和key文件的url,用于取得16bytes的key文件解码ts文件。
属性:METHOD URL
#EXT-X-PROGRAM-DATE-TIME 第一个文件的绝对时间
#EXT-X-ALLOW-CACHE 是否允许cache。
#EXT-X-ENDLIST 表明m3u8文件的结束。live m3u8没有该tag。
#EXT-X-STREAM-INF
属性:
BANDWIDTH 指定码率
PROGRAM-ID 唯一ID
CODECS 指定流的编码类型
#EXT-X-DISCONTINUITY 当遇到该tag的时候说明以下属性发生了变化
#EXT-X-VERSION 该属性用不用都可以,可以没有
4. 接下来看一个实际中应用的例子
在顶级m3u8文件中的内容:
- #EXTM3U
- #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000
- exam20140401.m3u8
- exam20140402.m3u8
上面顶级M3U8文件中又定义了 exam20140401.m3u8和exam20140402.m3u8两个二级文件,客户端会选择其中一个获取其内容。
二级M3U8文件内容如下:
- #EXTM3U
- #EXT-X-TARGETDURATION:11
- #EXT-X-MEDIA-SEQUENCE:1
- #EXTINF:11,
- exam_2014032900024_400&startoffset=0&endoffset=10838764/1.ts
- #EXTINF:10,
- exam_2014032900024_400&startoffset=10838764&endoffset=20659884/2.ts
- #EXTINF:10,
- exam_2014032900024_400&startoffset=20659884&endoffset=31139944/3.ts
- #EXTINF:11,
- exam_2014032900024_400&startoffset=31139944&endoffset=41262804/4.ts
- #EXTINF:9,
- exam_2014032900024_400&startoffset=41262804&endoffset=0/5.ts
- #EXT-X-ENDLIST
客户端拿到上面的二级M3U8文件后,会继续请求里面的文件,这时就可进行播放了。
上面讲解的是点播的情况,直播的情况,M3U8文件里面会有属性告诉是直播,客户端会定时来请求新的M3U8文件。
热门文章推荐
- 10款html5网页播放器推荐(总有一款适合你)
- [html5]html5+css3实现图片斜角切成直角梯形显示的源代码
- [HTML5]HTML5视频video时间事件代码
- [微信]iOS苹果和微信中音频和视频实现自动播放的方法
- [html5]html5视频全屏实现的源代码
- [Html5]mobile-agent移动Agent,就是具有移动性的智能Agent
- [html5]视频播放器js控制vedio视频和分段播放
- [html5]H5播放器:竖屏播放\横屏播放\跟随旋转例子