zoukankan      html  css  js  c++  java
  • m3u8字段意义解析

    m3u8字段意义解析

    HLS,Http Live Streaming是由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件。

    M3U8文件
    用文本方式对媒体文件进行描述,由一系列标签组成。举例如下:

    m3u8的详情可以参考网址:

    http://blog.csdn.net/test_1207/article/details/8160863

    m3u8其他字段的意义:

    #EXTM3U

    每个M3U文件第一行必须是这个tag。

    #EXTINF:<duration>,<title>

    duration表示持续的时间(秒)必须是整数,如果版本在3以上可以是浮点数。

    #EXTINF

    指定每个媒体段(ts)的持续时间,这个仅对其后面的URI有效,每两个媒体段URI间被这个tag分隔开。

    #EXT-X-BYTERANGE

    表示媒体段是一个媒体URI资源中的一段,只对其后的media URI有效,格式如下:#EXT-X-BYTERANGE:<n>[@o]

    其中n表示这个区间的大小,o表在URI中的offset;”The EXT-X-BYTERANGE tag appeared in version 4 of the protocol“。

    #EXT-X-TARGETDURATION

    指定最大的媒体段时间长(秒)。所以#EXTINF中指定的时间长度必须小于或是等于这个最大值。这个tag在整个PlayList文件中只能出现一 次(在嵌套的情况下,一般有真正ts url的m3u8才会出现该tag)。格式如下:

    #EXT-X-TARGETDURATION:<s>:s表示最大的秒数。

    #EXT-X-MEDIA-SEQUENCE

    每一个media URI 在 PlayList中只有唯一的序号,相邻之间序号+1。

    #EXT-X-MEDIA-SEQUENCE:<number>

    一个media URI并不是必须要包含的,如果没有,默认为0。

    #EXT-X-KEY

    表示怎么对media segments进行解码。其作用范围是下次该tag出现前的所有media URI,格式如下:

    #EXT-X-KEY:<attribute-list>:

    NONE 或者 AES-128。如果是NONE,则URI以及IV属性必须不存在,如果是AES-128(Advanced Encryption

    Standard),则URI必须存在,IV可以不存在。对于AES-128的情况,keytag和URI属性共同表示了一个key文件,通过URI可以获得这个key,如果没有IV(Initialization Vector),则使用序列号作为IV进行编解码,将序列号的高位赋到16个字节的buffer中,左边补0;如果有IV,则将改值当成16个字节的16进制数。

    #EXT-X-PROGRAM-DATE-TIME

    将一个绝对时间或是日期和一个媒体段中的第一个sample相关联,只对下一个meida URI有效,格式如下:

    #EXT-X-PROGRAM-DATE-TIME:<YYYY-MM-DDThh:mm:ssZ>

    例如:

    #EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+08:00

    #EXT-X-ALLOW-CACHE:

    是否允许做cache,这个可以在PlayList文件中任意地方出现,并且最多出现一次,作用效果是所有的媒体段。格式如下:

    #EXT-X-ALLOW-CACHE:<YES|NO>

    #EXT-X-PLAYLIST-TYPE

    提供关于PlayList的可变性的信息, 这个对整个PlayList文件有效,是可选的,格式如下:

    #EXT-X-PLAYLIST-TYPE:<EVENT|VOD> :如果是VOD,则服务器不能改变PlayList 文件;如果是EVENT,则

    服务器不能改变或是删除PlayList文件中的任何部分,但是可以向该文件中增加新的一行内容。

    #EXT-X-ENDLIST

    表示PlayList的末尾了,它可以在PlayList中任意位置出现,但是只能出现一个,格式如下:

    #EXT-X-ENDLIST

    #EXT-X-MEDIA

    被用来在PlayList中表示相同内容的不用语种/译文的版本,比如可以通过使用3个这种tag表示3中不用语音的音频,或者用2个这个tag表示不同角度的video在PlayLists中。这个标签是独立存在的,其格式如下:

    #EXT-X-MEDIA:<attribute-list>:该属性列表中包含:URI、TYPE、GROUP-ID、LANGUAGE、NAME、DEFAULT、AUTOSELECT。

    URI:如果没有,则表示这个tag描述的可选择版本在主PlayList的EXT-X-STREAM-INF中存在;

    TYPE:AUDIO and VIDEO;

    GROUP-ID:具有相同ID的MEDIAtag,组成一组样式;

    LANGUAGE:identifies the primary language used in the rendition。

    NAME:The value is a quoted-string containing a human-readable description of the rendition. If the LANGUAGE attribute is present then this description SHOULD be in that language。

    DEFAULT: YES或是NO,默认是No,如果是YES,则客户端会以这种选项来播放,除非用户自己进行选择。

    AUTOSELECT:YES或是NO,默认是No,如果是YES,则客户端会根据当前播放环境来进行选择(用户没有根据自己偏好进行选择的前提下)。

    The EXT-X-MEDIA tag appeared in version 4 of the protocol。

    o All EXT-X-MEDIA tags in the same group MUST have the same TYPE

    attribute.

    o All EXT-X-MEDIA tags in the same group MUST have different NAME

    attributes.

    o A group MUST NOT have more than one member with a DEFAULT

    attribute of YES.

    o All members of a group whose AUTOSELECT attribute has a value of

    YES MUST have LANGUAGE [RFC5646] attributes with unique values.

    o All members of a group with TYPE=AUDIO MUST use the same audio

    sample format.

    o All members of a group with TYPE=VIDEO MUST use the same video

    sample format。

    #EXT-X-STREAM-INF

    指定一个包含多媒体信息的 media URI 作为PlayList,一般做M3U8的嵌套使用,它只对紧跟后面的URI有

    效,格式如下:

    #EXT-X-STREAM-INF:<attribute-list>

    <URI>

    有以下属性:

    BANDWIDTH:带宽,必须有。

    PROGRAM-ID:该值是一个十进制整数,惟一地标识一个在PlayList文件范围内的特定的描述。一个PlayList 文件中可

    能包含多个有相同ID的此tag。

    CODECS:不是必须的。

    RESOLUTION:分辨率。

    AUDIO:这个值必须和AUDIO类别的“EXT-X-MEDIA”标签中“GROUP-ID”属性值相匹配。

    VIDEO:同上

  • 相关阅读:
    LeetCode 83. Remove Duplicates from Sorted List (从有序链表中去除重复项)
    LeetCode 21. Merge Two Sorted Lists (合并两个有序链表)
    LeetCode 720. Longest Word in Dictionary (字典里最长的单词)
    LeetCode 690. Employee Importance (职员的重要值)
    LeetCode 645. Set Mismatch (集合不匹配)
    LeetCode 500. Keyboard Row (键盘行)
    LeetCode 463. Island Perimeter (岛的周长)
    115.Distinct Subsequences
    55.Jump Game
    124.Binary Tree Maximum Path Sum
  • 原文地址:https://www.cnblogs.com/bugutian/p/4490912.html
Copyright © 2011-2022 走看看