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
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000
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文件。
                    

你可能感兴趣的:(网络服务器开发)