M3U8 流媒体文件播放

M3U8

M3U8 是 Unicode 版本的 M3U,用 UTF-8 编码。

M3UM3U8 文件都是苹果公司使用的 HTTP Live Streaming (HLS) 格式的基础,这种格式可以在 iPhone 和 Macbook 等设备播放。

HLS

HTTP Live Streaming (HLS) 是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。它的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的 extended M3U (m3u8) playlist 文件,用于寻找可用的媒体流。

HLS 只请求基本的 HTTP 报文,与实时传输协议 (RTP) 不同,HLS 可以穿过任何允许 HTTP 数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。

由于 Android 和 iOS 原生支持 HLSHLS 已成为移动设备流媒体的事实标准。有很多无关平台的原因来推荐这个格式:

  • 支持(客户端驱动)自适应比特率选择
  • 通过标准的 HTTP 端口传输
  • 简单、基于文本的 manifest 格式
  • 不需要专有流服务器

然而除了 Safari,主流的桌面浏览器都不支持 HLS。这使得 web 开发人员要维护多个格式的同一视频文件,或者放弃使用 html 的 video 来提供最好的桌面浏览体验。

在这里,我们在支持 Media Source Extensions 的浏览器使用 polyfill 来使用 HLS。

Media Source Extensions

Media Source Extensions (MSE) 为支持无插件的基于 Web 的流媒体提供功能。使用 MSE,流媒体可以通过 JavaScript 创建,并用 <audio><video> 元素播放。

播放方法

采用 videojs + videojs-contrib-hls