# hls_learn **Repository Path**: easyhao/hls ## Basic Information - **Project Name**: hls_learn - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2016-05-09 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # hls ## Media Playlist & Master Playlist - Media Playlist 每个切片的list - Media Playlist 整个m3u8文件 ## 看个例子 #EXTM3U #EXT-X-TARGETDURATION:10 #EXTINF:9.009, http://media.example.com/first.ts #EXTINF:9.009, http://media.example.com/second.ts #EXTINF:3.003, http://media.example.com/third.ts ## 简单说明 - \#EXT-X-TARGETDURATION:xxx 表示所有的列表视频的长度不能超过xxx - EXTINF:xxx 表示每个媒体片的长度 - 每个媒体片都有自己的序列号,第一个片的序列号可以是0 也可以自定义,后面的就逐次加一 - 被传输的媒体片的格式可以是mpeg-2 , webvtt , 或则是一个音频包。PS(音频包的编码可以是:mp3,aac,ac-3,) - 媒体片包含的视频必须包含最少一帧关键帧,和足够的信息初始化解码器 - 每个媒体片必须延续上一个媒体片的信息,如序列号,时间戳 以及连续计数器等,除了第一个媒体片以外 ## 定义一个Playlis 1. 编码必须使用utf-8编码(客户端会拒绝有BOM字符的playlist或则不是utf-8编码的playlist) 1. '#'开头的要么是注释要么是标记 1. 片的bit率是片的大小除以片的时长 ## 属性列表 1. 属性列表是以逗号分隔的不带空格的属性/值对的列表。 1. 属性列表可以是整形,浮点类型,字符串等 ---------------------------------------------------------------------------------------------- ## 基本片描述 - 既可以定义在主列表中,也可以定义在媒体列表中 ----------------------------------------------------------------------------------------------- ### EXTM3U - 必须在首行制定,表示该文件是一个M3U的扩展列表文件 - 定义如下: \#EXTM3U ### EXT-X-VERSION - 标识播放列表兼容的版本号,它关联媒文件以及他的服务器 - 定义如下: \#EXT-X-VERSION: **PS:绝对不能定义多个EXT-X-VERSION** ----------------------------------------------------------------------------------------------- ## 媒体片标记 ### EXT-INFO - 指定媒体片的长度,仅仅适用于下一个媒体的长度 - 格式如下: \#EXTINFO:, [] == **注意** 1. duration是浮点类型的数字或则是整形数字 1. 时长的单位是秒 1. 如果#EXT-X-VERSION 的值小于3,duration必须是整形类型 ### EXT-X-BYTERANGE - 表示媒体段是一个媒体URI资源中的一段,只对其后的media URI有效 - 格式如下: \#EXT-X-BYTERANGE:<n>[@<o>] ------- **注意** - n:十进制的整数,表示区间的大小 - o:如果o存在,则用一个整形的数字表示区间的开始位置,用来表示偏移,如果不存在,则表示从下一个tags开始 ###EXT-X-DISCONTINUITY - The EXT-X-DISCONTINUITY tag indicates a discontinuity between the Media Segment that follows it and the one that preceded it - 定义如下: \#EXT-X-DISCONTINUITY ------- **注意** EXT-X-DISCONTINUITY必须被制定,如果会下列信息会发生变化: - file format - number, type and identifiers of tracks - timestamp sequence EXT-X-DISCONTINUITY应该被指定,如果下列的信息会发生变化: - encoding parameters - encoding parameters ### EXT-X-KEY - 媒体段是可以被加密的,EXT-X-KEY的说明了如何去解密加密的视频,它被应用到它和下一个EXT-X-KEY之间的所有拥有相同的KEYFORAMT的媒体片。 - 定义的格式如下: \#EXT-X-KEY:<attribute-list> **可以使用下列属性进行定义** - METHOD 包括(NONE , AES-128 , SAMPLE-AES) - NONE:表示媒体段没有被加密,如果加密方法是NONE,则别的属性一律不许出现 - AES-128: 表示媒体段使用128位的高级加密方法进行加密 - URI:这是一个字符串,它包含了如何获取key的URI,如果出现METHOD是NONE,这个属性没有必要出现 - IV: 这是一个16进制的序列,制定了128位的key - KEYFORMAT: - KEYFORMATVERSIONS: ### EXT-X-MAP - 标签指定了如何获得所需的媒体初始化部分,它的应用于后续的媒体片段,直到下一个该标签再出现。 - 定义如下: \#EXT-X-MAP:<attribute-list> - 下列的属性被定义: - URI - BYTERANGE ### EXT-X-PROGRAM-DATE-TIME - 将一个绝对时间或是日期和一个媒体段中的第一个sample相关联,只对下一个meida URI有效 - 定义如下: \#EXT-X-PROGRAM-DATE-TIME:<YYY-MM-DDThh:mm:ssZ> - 例子: \#EXT-X-PROGRAM-DATE-TIME:2016-05-09T16:49:23.031+08:00 - EXT-X-PROGRAM-DATE-TIME 应该提供毫秒级的精度 ### EXT-X-DATERANGE ? ### EXT-X-TARGETDURATION - 指定playlist的长度,这个属性是必须的要定义的 - 定义格式如下: \#EXT-X-TARGETDURATION:<s> ### EXT-X-MEDIA-SEQUENCE - 指定playlist中首个media tags 的序列号 - 定义如下: \#EXT-X-MEDIA-SEQUENCE:<number> - number是一个整形类型的数字 - 如果一个playlist文件没有包含一个EXT-X-MEDIA-SEQUENCE标签,媒体段的第一个序列号就会被假设成为0 ### EXT-DISCONTINUITY-SEQUENCE ? ### EXT-X-ENDLIST - 制定没有更多的媒体段会加入到playlist文件中了,他可以放置到Playlist的任何位置 - 定义如下: \#EXT-X-ENDLIST ### EXT-X-PLAYLIST-TYPE - 提供有关媒体播放列表文件的可变性信息,它适用于整个媒体播放列表文件。 - 定义如下: \#EXT-X-PLAYLIST-TYPE:<EVENT|VOD> - 如果EXT-X-PLAYLIST-TYPE:EVENT,媒体段只能被添加到Playlist的后面,如果EXT-X-PLAYLIST-TYPE:VOD,媒体的Playlist不能改变 ### EXT-X-I-FRAMES-ONLY - 指定在每个媒体文件中都包含关键帧