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

    转载《https://www.cnblogs.com/shakin/p/3870439.html》

  • 相关阅读:
    安全编码1
    VPP tips
    VPP概述汇总
    C语言安全编码摘录
    TCP-proxy
    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.4. Matplotlib: plotting
    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.3. NumPy: creating and manipulating numerical data
    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.2. The Python language
    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.1. Python scientific computing ecosystem
    25马5跑道,求最快的五匹马的需要比赛的次数
  • 原文地址:https://www.cnblogs.com/ckAng/p/9259471.html
Copyright © 2011-2022 走看看