zoukankan      html  css  js  c++  java
  • HLS协议详解

    1. HLS

    HLS是为移动设备开发的基于HTTP的流媒体解决方案。

    2. 原理:

    将视频或流切分成小片(TS), 并建立索引(M3U8).

    支持视频流:H.264; 音频流:AAC

    3. M3U8文件解析

    M3U8文件在很多地方也叫做Playlist file。

    一个简单的例子:

    #EXTM3U  

    #EXT-X-TARGETDURATION:10 

    #EXT-X-MEDIA-SEQUENCE:1  

    #EXTINF:10, http://media.example.com/segment0.ts  

    #EXTINF:10, http://media.example.com/segment1.ts 
    #EXTINF:10, http://media.example.com/segment2.ts  

    #EXT-X-ENDLIST (VOD含EXT-X-ENDLIST,live stream则没有)

    3.1 File

    一个M3U的 Playlist 就是一个由多个独立行组成的文本文件,每行由回车/换行区分。每一行可以是一个URI  空白行或是以”#“号开头的字符串,并且空格只能存在于一行中不同元素间的分隔。   

    一个URI 表示一个媒体段或是”variant Playlist file“(最多支持一层嵌套,即一个mm3u8文件中嵌套另一个m3u8)

    以”#EXT“开头的表示一个”tag“,否则表示注释

    3.2 Tag

    #EXTM3U: 

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

    #EXTINF

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

      #EXTINF:<duration>,<title> :

     duration表示持续的时间(秒)”Durations MUST be integers if the protocol version of the Playlist file is less than 3“,否则可以是浮点数。

    #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>                      

    For example:

                        #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

    4. TS简介

    5. 参考文献

    [1] http://blog.csdn.net/matthew_fan/article/details/7796732

    [2] http://tools.ietf.org/html/draft-pantos-http-live-streaming-08

    [3] m3u8文件解析

    [4] HLS协议--学习笔记--M3U8

  • 相关阅读:
    Lucene in action 笔记 case study
    关于Restful Web Service的一些理解
    Lucene in action 笔记 analysis篇
    Lucene in action 笔记 index篇
    Lucene in action 笔记 term vector
    Lucene in action 笔记 search篇
    博客园开博记录
    数论(算法概述)
    DIV, IFRAME, Select, Span标签入门
    记一个较困难的SharePoint性能问题的分析和解决
  • 原文地址:https://www.cnblogs.com/yulang314/p/3728939.html
Copyright © 2011-2022 走看看