m3u8介绍

在IOS device和mac上可以用http的方式进行分发,其中playlist标准为由m3u扩展而来的m3u8文件,媒体文件为MPEG2-TS或者AAC文件(audio only)。

m3u8文件有两种应用场景:

多码率适配流,

    #EXTM3U

    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000

    http://example.com/low.m3u8

    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2560000

    http://example.com/mid.m3u8

    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7680000

    http://example.com/hi.m3u8

    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=65000,CODECS="mp4a.40.5"

    http://example.com/audio-only.m3u8

单码率适配流

    #EXTM3U

    #EXT-X-TARGETDURATION:5220

    #EXTINF:5220,

    http://media.example.com/entire.ts

    #EXT-X-ENDLIST


国际标准组织对此的定义 rfc doc:
http://tools.ietf.org/html/draft-pantos-http-live-streaming-06
m3u8 文件是m3u文件的扩展。在该rfc中定义了扩展的关键字:
其中:

    #EXT-X-TARGETDURATION

        定义每个TS的最大的duration。

    #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的时候说明以下属性发生了变化:

        file format

        number and type of tracks

        encoding parameters

        encoding sequence

        timestamp sequence

    #EXT-X-VERSION             该属性用不用都可以,可以没有





M3U8分顶级M3U8和二级M3U8, 顶级M3U8主要是做多码率适配的, 二级M3U8才是真正的切片文件,

客户端默认会首先选择码率最高的请求,如果发现码率达不到,会请求郊低码率的流


一个实际使用中的顶级M3U8文件如下 :

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=201273221265,BANDWIDTH=358400
11.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=201273221265,BANDWIDTH=972800
22.m3u8


上面顶级M3U8文件中又定义了 11.m3u8 和 22.m3u8 两个二级文件,客户端会选择其中一个获取其内容。

二级M3U8文件内容如下:


#EXTM3U
#EXT-X-VERSION:1
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:3,
1-4.ts
#EXTINF:8,
1-6.ts
#EXTINF:8,
1-8.ts
#EXTINF:8,
1-10.ts
#EXTINF:8,
1-12.ts
#EXTINF:8,
1-14.ts
#EXTINF:8,
1-16.ts
#EXTINF:9,
1-18.ts
#EXTINF:6,
1-20.ts
#EXTINF:8,
1-22.ts
#EXTINF:9,
1-24.ts
#EXTINF:3,
1-26.ts
#EXT-X-ENDLIST


客户端拿到上面的二级M3U8文件后,会继续请求里面的文件,这时就可进行播放了。

上面讲解的是点播的情况,直播的情况,M3U8文件里面会有属性告诉是直播,客户端会定时来请求新的M3U8文件。

你可能感兴趣的:(m3u8介绍)