常用视频文件的介绍(一):M3U8--常用点播和直播格式文件
文章目录
M3U8格式介绍
M3U8是一种常用的直播和点播视频格式,但它本身并不是一个视频完整的存储地址,而是一个列表形式的文件,所以使得它有多样的灵活性。它在Android和IOS上最为常用,是一种常用的流媒体直播方式
我们可以看到这是支持实时直播的
从这个列表中,我们可以看出这些ts文件是M3U8列表中的子文件,浏览器根据M3U8列表的指向来寻找这个位置,然后进行播放,这样就可以缩小一个很大的视频的内存,让他缩小到只有几MB
M3U8标准格式介绍
M3U介绍
M3U(Moving Picture Experts Group Audio Layer 3 Uniform Resource Locator)这种文件格式,本质上说不是音频文件,它并不能在脱机模式下读取网络资源音频,它是音频文件的列表文件,是纯文本文件。你下载下来打开它,播放软件并不是播放它,而是根据它的记录找到网络地址进行在线播放。
要脱机播放m3u,分为两种方法,第一种是在m3u的文本中写入音频文件的本地路径,并且音频文件的路径不能更改,若要更改,m3u文件的文本也要相应更改;第二种方法是把m3u文件与音频文件放入同一文件夹,m3u文件所在文件夹以及以上的地址都可以省略不写,音乐文件也可以放在m3u文件所在文件夹的子文件夹。
相关资料
M3U8介绍
M3U8也是一bai种M3U,只是它的编码du格式zhi是UTF-8格式。M3U用Latin-1字符集编码。
在这里,我们可以请求一下这个地址CCTV-9纪录2020-192
我们可以看到这个文件十分小,仅仅只有630B,我们可以用笔记本或sublime等其他编辑器来查看源代码
#EXTM3U
#EXT-X-TARGETDURATION:12
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:159437243
#EXT-X-PROGRAM-DATE-TIME:2020-07-10T17:13:50+08:00
#EXTINF:9.749,
https://1252894780-test.vod2.myqcloud.com/59ae3190vodcq1252894780/db8506455285890805070702572/2000-159437243.ts
#EXT-X-PROGRAM-DATE-TIME:2020-07-10T17:14:00+08:00
#EXTINF:10.549,
https://1252894780-test.vod2.myqcloud.com/59ae3190vodcq1252894780/db8506455285890805070702572/2000-159437244.ts
#EXT-X-PROGRAM-DATE-TIME:2020-07-10T17:14:10+08:00
#EXTINF:9.589,
https://1252894780-test.vod2.myqcloud.com/59ae3190vodcq1252894780/db8506455285890805070702572/2000-159437245.ts
我们可以看到,这些M3U8中有许多带#的英文字符,那么接下来我们就来解读一下其中的意义
M3U8标准字段
播放列表的定义
放列表文件必须使用UTF-8 [ RFC3629 ] 进行编码。一定不能包含任何字节顺序标记(BOM) 播放列表文件中的行由单个换行符终止字符或回车符后跟换行符字符。每行是一个URI,为空白,或者以字符“#”。空行将被忽略。空格一定不能当前,除了明确指定的元素。
以字符“#”开头的行是注释或标签。标签以#EXT开头。它们区分大小写。所有其他行以“#”开头的注释,应忽略。
URI行标识媒体段或播放列表文件每个媒体段均由URI和适用于它的标签。
如果播放列表中的所有URI行,则播放列表就是媒体播放列表识别媒体细分。如果所有URI,则播放列表就是主播放列表播放列表中的各行标识媒体播放列表。播放列表必须媒体播放列表或主播放列表;所有其他播放列表是无效。
媒体播放列表的持续时间是指其中的媒体细分。
媒体段的段比特率是媒体的大小段除以其EXTINF持续时间。由交付系统强加,例如HTTP,TCP或IP标头。
媒体播放列表的峰值片段比特率是最大的比特率总持续时间在0.5之间的任何连续段的集合和目标持续时间的1.5倍。一组的比特率是通过将段大小的总和除以段的持续时间。
基本标签
在媒体播放列表和主播放列表中都允许使用这些标签。
EXTM3U
EXTM3U标记指示文件是扩展M3U [ M3U ]播放列表文件。它必须是每个媒体播放列表的第一行,每个主播放列表。其格式为:#EXTM3U
EXT-X版本
EXT-X-VERSION标记指示兼容版本播放列表文件,其关联的媒体及其服务器。 EXT-X-VERSION标签适用于整个播放列表文件。它的格式为:#EXT-X-VERSION:
其中n是指示协议兼容性版本的整数值。
细分标签
每个媒体细分由一系列媒体细分标记指定然后是URI。某些媒体细分代码仅适用于下一个分割; 其他适用于所有后续细分,直到另一个相同标签的实例。
EXTINF
EXTINF标签指定媒体段的持续时间。适用仅到下一个媒体段。每个媒体都需要此标签分割。其格式为:#EXTINF:,[
这一行写出了持续的分片时间是9.749秒
duration(持续时间)
为十进制浮点数或十进制整数,指定了媒体片段(以秒为单位)。持续时间应为十进制浮点数-点,以足够的精度避免在分段时出现可察觉的错误持续时间是累积的。但是,如果兼容版本number**(EXT-X版本)**小于3,持续时间必须为整数。持续时间报告为整数,应四舍五入到最接近的整数。
逗号后的其余行是可选的-媒体段的可读信息标题,表示为UTF-8文本。
EXT-X-BYTERANGE
EXT-X-BYTERANGE标签指示媒体段是由其URI标识的资源的子范围。它仅适用于播放列表中紧随其后的下一个URI行。其格式为:#EXT-X-BYTERANGE: [@ ]
n
是十进制整数,指示子范围的长度(以字节为单位)。如果存在,则o是一个十进制整数,指示子范围的开始,以距资源开始的字节偏移量为单位。如果不存在o,则子范围从上一媒体段的子范围之后的下一个字节开始。
如果不存在o,则先前的媒体段务必出现在播放列表文件中,并且必须是同一媒体资源的子范围,或者媒体段未定义,并且客户端务必无法解析播放列表。
没有EXT-X-BYTERANGE标签的媒体段由其URI标识的整个资源组成。
使用EXT-X-BYTERANGE标签需要兼容版本号为4或更大。
EXT-X-PROGRAM-DATE-TIME
EXT-X-PROGRAM-DATE-TIME标记将媒体段的第一个样本与绝对日期和/或时间相关联。它仅适用于下一个媒体段。其格式为:#EXT-X-PROGRAM-DATE-TIME:
date-time-msec
是ISO / IEC 8601:2004 [ ISO_8601 ]日期/时间表示,例如YYYY-MM- DDThh:mm:ss.SSSZ。它应该指示时区和秒的小数部分,精确到毫秒。
例如:#EXT-X-PROGRAM-DATE-TIME:2020-07-10T17:14:10+08:00
EXT-X-DATERANGE(不常用)
EXT-X-DATERANGE标记将日期范围(由开始日期和结束日期定义的时间范围)与一组属性/ 值对相关联。其格式为:#EXT-X-DATERANGE:
ID
引号的字符串,用于唯一标识播放列表中的日期范围。此属性是必需的。
CLASS
客户定义的带引号的字符串,它指定一组属性及其关联的值语义。所有具有相同CLASS属性值的日期范围都必须遵守这些语义。此属性是可选的。
START-DATE
带引号的字符串,其中包含日期范围开始的ISO-8601日期。此属性是必需的。
END-DATE
包含日期范围结束的ISO-8601日期的带引号的字符串。它必须等于或晚于START-DATE属性的值。此属性是可选的。
DURATION
日期范围的持续时间,以秒的十进制浮点数表示。它一定不能为负。时间上的单个瞬间(例如,越过终点线)应以0的持续时间表示。此属性是可选的。
PLANNED-DURATION
日期范围的预期持续时间,以十进制表示-浮点秒数。它一定不能为负。该属性应该用于指示实际持续时间未知的日期范围的预期持续时间。这是可选的。
X- < client-attribute >
“ X-”前缀定义为客户端定义的属性保留的名称空间。客户端属性必须是合法的AttributeName。客户端在定义自己的属性名称时应使用反向DNS语法,以避免冲突。属性值必须是带引号的字符串,十六进制序列或十进制浮点数。客户端定义的属性的一个示例是X-COM-EXAMPLE-AD-ID =“ XYZ123”。这些属性是可选的。
EXT-X-TARGETDURATION(不常用)
EXT-X-TARGETDURATION标记指定最大媒体段持续时间。播放列表文件中每个媒体段的EXTINF持续时间四舍五入到最接近的整数时,必须小于或等于目标持续时间;较长的片段会触发播放停顿或其他错误。它适用于整个播放列表文件。其格式为:#EXT-X-TARGETDURATION:< s >
s
是十进制整数,以秒为单位指示目标持续时间。需要EXT-X-TARGETDURATION标签。
EXT-X-MEDIA-SEQUENCE(不常用)
EXT-X-MEDIA-SEQUENCE标签指示出现在播放列表文件中的第一个媒体片段的媒体***。其格式为:#EXT-X-MEDIA-SEQUENCE:< number >
number
是十进制整数。
如果媒体播放列表文件不包含EXT-X-MEDIA-SEQUENCE 标记,则媒体播放列表中第一个媒体片段的媒体***应视为0。客户端不得假定具有相同媒体的片段不同媒体