zoukankan      html  css  js  c++  java
  • M3U8格式讲解及实际应用分析

    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文件。


  • 相关阅读:
    android studio 提示翻译
    mysql-You can’t specify target table for update in FROM clause错误
    echarts-案例
    maven-过滤不打入包的文件
    neo4j关闭和开启密码访问权限
    linux-crontab定时任务
    neo4j-备份、恢复
    windows和linux执行class
    mvn-打jar运行包(含环境变量配置)
    mysql-netstat
  • 原文地址:https://www.cnblogs.com/shakin/p/3870439.html
Copyright © 2011-2022 走看看