M3U8文件格式介绍(示例代码)

2021-03-07

栏目: 类库 ·

简介  这篇文章主要介绍了M3U8文件格式介绍(示例代码)以及相关的经验技巧,文章约2853字,浏览量179,点赞数3,值得参考!

阿里云的CDN开通后,作视频服务,通常会把视频文件存放到OSS上面,这个时候会 用到切片服务,m3u8就比较常见的媒体格式。M3U8 是 Unicode 版本的 M3U, 用 UTF-8 编码。"M3U" 和 "M3U8" 文件都是苹果公司使用的 HTTP Live Streaming(HLS) 协议格式的基础,
这种协议格式可以在 iPhone 和 Macbook 等设备播放

       m3u8 文件其实是 HTTP Live Streaming(缩写为 HLS) 协议的部分内容,
    而 HLS 是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议

        HLS 的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载,
    每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同
    的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同
    的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数
    据的 extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。
HLS 只请求基本的 HTTP 报文,与实时传输协议(RTP)不同,HLS 
    可以穿过任何允许 HTTP 数据通过的防火墙或者代理服务器。它也很
    容易使用内容分发网络来传输媒体流。

HLS 是新一代流媒体传输协议,其基本实现原理为将一个大的媒体文件进行分片,将该分片文件资源路径记录于 m3u8 文件(即 playlist)内,其中附带一些额外描述(比如该资源的多带宽信息···)用于提供给客户端。客户端依据该 m3u8 文件即可获取对应的媒体资源,进行播放。

因此,客户端获取 HLS 流文件,主要就是对 m3u8 文件进行解析操作

 M3U8 文件简介

m3u8 文件实质是一个播放列表(playlist),其可能是一个媒体播放列表(Media Playlist),或者是一个主列表(Master Playlist)。但无论是哪种播放列表,其内部文字使用的都是 utf-8 编码。

当 m3u8 文件作为媒体播放列表(Meida Playlist)时,其内部信息记录的是一系列媒体片段资源,顺序播放该片段资源,即可完整展示多媒体资源。其格式如下所示:

#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
对于点播来说,客户端只需按顺序下载上述片段资源,依次进行播放即可。而对于直播来说,客户端需要 定时重新请求 该 m3u8 文件,看下是否有新的片段数据需要进行下载并播放。

当 m3u8 作为主播放列表(Master Playlist)时,其内部提供的是同一份媒体资源的多份流列表资源(Variant Stream)。其格式如下所示:

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/low/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=240000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/lo_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/hi_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/high/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=64000,CODECS="mp4a.40.5"
http://example.com/audio/index.m3u8

该备用流资源指定了多种不同码率,不同格式的媒体播放列表,并且,该备用流资源也可同时提供不同版本的资源内容,比如不同语言的音频文件,不同角度拍摄的视屏文件等等。客户可以根据不同的网络状态选取合适码流的资源,并且最好根据用户喜好选择合适的资源内容。


以上就是本文的全部内容,希望对大家的学习有所帮助,本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文地址:https://blog.51cto.com/chenhva/2475854

相关文章

使用ffmpeg转码m3u8并播放(示例代码)

怎么下载m3u8格式视频?Python爬取A站m3u8格式视频案例讲解

让ckplayer支持m3u8格式的播放

关于H5播放Http Live Streaming m3u8格式视频(示例代码)

Python3 根据m3u8下载视频,批量下载ts文件并且合并(示例代码)

Python爬虫:从m3u8文件里提取小视频的正确操作

m3u8文件简介(示例代码)

解决问题video.js 播放m3u8格式的文件,根据官方的文档添加videojs-contrib-hls也不行的原因解决了