M3U8是什么?M3U播放列表是什么?如何打开和转换它?

EdgeOne-Dev Team
Dec 25, 2024

M3U8 作为一种常见的视频格式,广泛应用于在线视频播放、直播和其他流媒体服务。与传统视频格式如 MP4 相比,M3U8 带来了更高效的视频传输、灵活的适应性和增强的内容保护。如果您想转码、分发和托管 M3U8 视频,您可能想考虑 我们的服务

M3U(运动图像专家组音频层 3 统一资源定位符) 文件格式本质上并不是音频或视频文件。它无法在离线模式下读取网络资源音频或视频。它是一个音频和视频文件的播放列表文件,是一个纯文本文件。 

M3U 的 Unicode 版本是 M3U8,它使用 UTF-8 编码字符。M3U8 文件是原本由苹果公司开发以向 iOS 设备流式传输视频和广播的 HTTP 实时流(HLS)格式的基础,现在已成为普遍适用于自适应流的热门格式。

具体计算和说明详见英语版维基百科的 M3U8 部分。正如我们所看到的,m3u8 文件是 HTTP 实时流(HLS) 协议的一部分。

什么是 HLS?

HLS 是苹果公司开发的一种基于 HTTP 的媒体流协议。它主要旨在解决在线视频流的传输和播放问题。

与 RTSP 协议等传统流媒体技术相比(流媒体协议有三种类型:RTMP、RTSP 和 HTTP 实时流),HLS 的优势在于,一旦完成分段,就无需额外的专用软件进行分发,可以使用普通的 Web 服务器,这减少了对服务器的技术要求。对于广泛使用的 CDN 服务,它极大地降低了 CDN 边缘服务器的配置要求,并且可以使用任何现有的 CDN。

对于非实时视频,如果您希望通过单个 MP4 格式视频文件和 HTTP 协议跳转到长视频,则需要一个支持 HTTP 范围请求的代理服务器来获取大型文件的一部分。并不是所有的代理服务器都能很好地支持这一点。HTTP 实时流只需根据 m3u 播放列表文件中的时间线下载相应的 TS 段,无需 HTTP 范围请求,对代理服务器的要求较低,因为所有代理服务器都支持小文件的高效缓存。

此外,使用 TS 进行流媒体打包还有另一个优点,即无需在播放之前加载索引,从而大大减少了初始加载延迟,提高了用户体验。

此外,HTTP 实时流的最大优势是自适应比特率流。客户端会根据网络状况自动选择不同比特率的视频流,当条件允许时使用高比特率,当网络繁忙时使用低比特率,并在两者之间自动切换。这对于确保在不稳定的移动设备网络条件下流畅播放非常有帮助。

什么是 M3U8 和 M3U 播放列表?

m3u8 文件本质上是 m3u 播放列表,可以是媒体播放列表或主播放列表。然而,无论哪种类型的播放列表,内部使用的文本都是以 UTF-8 编码的。

当 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

对于点播播放,客户端只需按顺序下载片段资源并逐个播放。然而,对于直播流,客户端需要定期请求 m3u8 文件以检查是否有新的段数据需要下载和播放。

当 m3u8 文件作为主播放列表使用时,它提供同一媒体资源的变体流列表。其格式如下:

#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

变体流资源指定具有不同比特率和格式的多个媒体播放列表。此外,变体流资源还可以提供内容的不同版本,例如不同语言的音频文件或从不同角度拍摄的视频文件。客户端可以根据不同的网络条件选择合适的比特率资源,并建议根据用户偏好选择合适的内容。

要了解有关 m3u 播放列表和 HLS 协议的更多信息,您可以参考以下链接:

HLS.js 文档

创建主播放列表

向播放列表添加备用媒体

M3U8 文件格式

m3u8 文件格式主要包括三个方面:

M3U 播放列表

m3u 播放列表(m3u8 文件)的内容必须严格遵循定义的规范。以下是一些需要遵循的主要条件: 

  • m3u8 文件必须以 UTF-8 编码,不能使用字节顺序标记(BOM)字节序。不能包含 UTF-8 控制字符(U+0000 ~ U_001F 和 U+007F ~ u+009F)。 
  • m3u8 文件的每一行必须是 URI、空行或以 # 开头的字符串。除了显式声明的元素外,不允许有空格字符。
  • 以 # 开头的字符串在 m3u8 文件中是注释或标签。标签以 #EXT 开头,并区分大小写。

属性列表

某些特定标签的值以属性列表的形式表示。标签后面的属性列表被分成多个属性/值对集合,用逗号作为分隔符,没有空格。

属性/值对的语法格式如下:

AttributeName=AttributeValue

AttributeName 是由 [A..Z]、[0..9] 和 - 组成的未加引号的字符串。因此,AttributeName 只能使用大写字母,不能使用小写字母。AttributeName 和 = 之间以及 = 和 AttributeValue 之间都不能有空格。

标签

标签用于指定 m3u8 文件的全局参数或后续的一些段文件/媒体播放列表的信息。

标签可分为五种类型:基本标签、媒体段标签、媒体播放列表标签、主播放列表标签和播放列表标签。它们的具体内容如下:

  1. 基本标签:
  • #EXTM3U
  • #EXT-X-VERSION
  • #EXT-X-ALLOW-CACHE
  • #EXT-X-MEDIA-SEQUENCE
  • #EXT-X-TARGETDURATION
  1. 媒体段标签:
  • #EXTINF
  • #EXT-X-BYTERANGE
  • #EXT-X-DISCONTINUITY
  • #EXT-X-KEY
  • #EXT-X-MAP
  • #EXT-X-PROGRAM-DATE-TIME
  • #EXT-X-DATERANGE
  1. 媒体播放列表标签:
  • #EXT-X-TITLE
  • #EXT-X-PLAYLIST-TYPE
  • #EXT-X-MEDIA
  • #EXT-X-STREAM-INF
  • #EXT-X-I-FRAME-STREAM-INF
  • #EXT-X-ENDLIST
  1. 主播放列表标签:
  • #EXT-X-MEDIA
  • #EXT-X-STREAM-INF
  • #EXT-X-I-FRAME-STREAM-INF
  • #EXT-X-SESSION-DATA
  • #EXT-X-SESSION-KEY
  1. 播放列表标签:
  • #EXT-X-DISCONTINUITY-SEQUENCE
  • #EXT-X-ENDLIST
  • #EXT-X-INDEPENDENT-SEGMENTS
  • #EXT-X-START
  • #EXT-X-VERSION

如何打开 M3U8 文件?

M3U8 文件是包含对媒体文件引用的播放列表。它们可以使用支持 M3U8 格式的媒体播放器打开和播放。以下是打开 M3U8 文件的步骤:

我们提供一个免费的在线 M3U8 播放器,支持 WebRTC、FLV 和 HLS 直播流,以及 HLS、DASH、FLV 和 MP4 格式的点播播放,以方便您的使用。请随意使用。

M3U8 文件通常用于通过互联网流式传输媒体内容。播放列表中引用的媒体文件可能不会存储在您的计算机上,而是在远程服务器上。因此,需要稳定的互联网连接以平稳播放媒体文件。

如何创建 M3U8 文件?

创建 M3U8 文件涉及生成一个引用媒体文件的播放列表文件,通常用于流媒体目的。M3U8 是 M3U 播放列表文件格式的 UTF-8 编码版本,常用于 HTTP 实时流(HLS)。以下是创建 M3U8 文件的逐步指南:

步骤 1:收集您的媒体文件

确保您拥有所有要包含在播放列表中的媒体文件(例如视频片段)。如果您计划通过互联网流式传输这些文件,则这些文件应该可以通过 Web 服务器访问。

步骤 2:创建 M3U8 文件

1. 打开文本编辑器:使用 Notepad(Windows)、TextEdit(Mac)或任何代码编辑器(例如 VSCode、Sublime Text)。

2. 从标题开始:M3U8 文件的第一行应为 #EXTM3U,这表明该文件是扩展 M3U 播放列表。

3. 添加媒体信息:对于每个媒体文件,您需要添加元数据和文件路径。基本格式为:

  • #EXTINF:<duration>,<title>: 此行提供持续时间(以秒为单位)和媒体片段的可选标题。
  • <file_path_or_URL>: 此行指定媒体文件的路径或 URL。

示例:

#EXTM3U
#EXTINF:10,段 1
http://example.com/media/segment1.ts
#EXTINF:10,段 2
http://example.com/media/segment2.ts
#EXTINF:10,段 3
http://example.com/media/segment3.ts

4. 保存文件:将文件保存为 .m3u8 扩展名,确保其以 UTF-8 编码。

步骤 3:高级功能(可选)

  • 添加带宽和分辨率信息:对于自适应流,您可以使用 #EXT-X-STREAM-INF 指定不同质量级别。
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=1280000,RESOLUTION=640x360
http://example.com/low/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2560000,RESOLUTION=1280x720
http://example.com/mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=5120000,RESOLUTION=1920x1080
http://example.com/high/index.m3u8
  • 使用 #EXT-X-ENDLIST:如果您的播放列表不是实时流并且有明确的结束,您可以在文件末尾添加 #EXT-X-ENDLIST

步骤 4:测试您的 M3U8 文件

  • 本地测试:使用支持 M3U8 文件的媒体播放器,如 VLC,测试您的播放列表。
  • 网络测试:如果在线流式传输,请确保您的 Web 服务器正确配置以提供媒体文件,并使用兼容的播放器或浏览器进行测试。

通过遵循这些步骤,您可以创建一个功能齐全的 M3U8 文件以进行流媒体内容播放。

如何下载 M3U8 视频?

下载 M3U8 视频涉及获取 M3U8 播放列表文件中引用的视频片段并将它们组合成一个单独的视频文件。以下是几种下载 M3U8 视频的方法:

方法 1:使用 FFmpeg

FFmpeg 是一个强大的多媒体框架,可以处理各种视频和音频格式。它可以用于下载和转换 M3U8 流为单个视频文件。

1. 安装 FFmpeg

  • Windows:从 官方网站 下载 FFmpeg 可执行文件并将其添加到系统 PATH 中。
  • Mac:使用 Homebrew 安装 FFmpeg:brew install ffmpeg
  • Linux:使用您的包管理器,例如,sudo apt-get install ffmpeg 用于基于 Debian 的系统。

2. 下载 M3U8 视频

打开终端或命令提示符并运行以下命令:

ffmpeg -i "http://example.com/path/to/playlist.m3u8" -c copy output.mp4

http://example.com/path/to/playlist.m3u8 替换为 M3U8 文件的 URL,将 output.mp4 替换为您所需的输出文件名。

方法 2:使用浏览器扩展

有几个浏览器扩展可帮助您直接从 Web 浏览器下载 M3U8 视频。

1. 安装浏览器扩展

  • Chrome:如 "Video DownloadHelper" 或 "HLS Downloader" 等扩展。
  • Firefox:如 "Video DownloadHelper" 或 "HLS Downloader" 等扩展。

2. 下载视频

  • 导航到包含 M3U8 视频的网页。
  • 使用扩展检测并下载视频。按照扩展的说明将视频保存到您的计算机上。

方法 3:使用在线服务

有一些在线服务可以为您下载 M3U8 视频。然而,这些服务可能有限制并存在隐私问题。

1. 查找在线 M3U8 下载器

搜索在线 M3U8 下载器,如 "M3U8 Downloader" 或 "HLS Downloader"。

2. 下载视频

  • 将 M3U8 文件的 URL 粘贴到在线下载器中。
  • 按照说明下载视频。

方法 4:使用命令行工具

有一些专门设计用于下载 M3U8 视频的命令行工具。

1. 安装工具

  • youtube-dl:一个流行的命令行程序,可以从各种网站下载视频,包括那些使用 M3U8 的网站。请遵循 官方网站 上的说明安装 youtube-dl。

2. 下载视频

打开终端或命令提示符并运行以下命令:

youtube-dl "http://example.com/path/to/playlist.m3u8"

http://example.com/path/to/playlist.m3u8 替换为 M3U8 文件的 URL。

重要注意事项

  • 法律问题:确保您有权下载内容。未经许可下载受版权保护的材料是非法的。
  • 质量:下载视频的质量取决于 M3U8 文件中引用的片段的质量。
  • 依赖关系:某些方法可能需要在您的系统上安装额外的软件或依赖项。

通过遵循这些方法,您可以下载 M3U8 视频并将其保存为计算机上的单个视频文件。

M3U8 与 MP4:哪个更好?

M3U8 文件是包含对媒体文件引用的播放列表,而 MP4 是一种视频文件格式。选择 M3U8 还是 MP4 取决于您的具体需求和用例,因为它们在视频流和播放领域服务于不同的目的。以下是比较,以帮助您理解它们的区别并确定哪个更适合您的情况:

M3U8

M3U8 是一种播放列表格式,主要用于 HTTP 实时流(HLS),这是苹果开发的一种协议。

使用

M3U8 包含指向媒体文件(通常是分段视频文件)的链接,可以通过互联网流式传输。它通常用于直播和自适应比特率流,根据观众的网络条件调整视频质量。

优点

  • 自适应流:根据网络条件自动调整视频质量。
  • 直播流:理想用于广播实时事件。
  • 分段文件:通过将大型视频文件拆分为较小的片段,实现高效流式传输。
  • 跨平台兼容性:在许多设备和浏览器上均受支持。

缺点

  • 不是独立文件:M3U8 文件本身不包含视频数据;它引用其他文件,这意味着需要兼容的播放器来流式传输内容。
  • 复杂性增加:设置 HLS 流可能比提供单个 MP4 文件更复杂。

MP4

MP4(MPEG-4 第 14 部分)是一种数字多媒体格式,用于存储视频和音频,以及字幕和图像。

使用

通常用于下载和播放各种设备和平台上的视频,包括计算机、智能手机和媒体播放器。

优点

  • 广泛兼容性:大多数媒体播放器和设备均支持,使共享和查看变得简单。
  • 独立文件:所有视频和音频数据都包含在一个文件中,简化了分发。
  • 质量控制:提供良好的压缩,且不会显著损失质量,适合高清晰度视频。

缺点

  • 不支持自适应流:不支持根据网络条件自动调整质量。
  • 文件大小:与分段流相比,文件大小较大,这可能对较慢的连接或有限的存储空间构成问题。

总结

  • 选择 M3U8 如果:您希望实现直播流或需要针对不同互联网速度的自适应比特率流。它非常适合 Web 应用程序、在线广播和用户可能经历波动带宽的情况。
  • 选择 MP4 如果:您希望获得一个简单、广泛兼容的格式来共享和播放视频文件。它最适合可下载的内容、离线观看和不需要自适应流的情况。

最终,“更好”的选择取决于您的具体需求——您是优先考虑流媒体能力和适应性(M3U8),还是简单性和兼容性(MP4)。

如何将 M3U8 转换为 MP4?

要将 M3U8 转换为 MP4,您需要下载播放列表中引用的媒体文件,然后使用视频转换器将其转换为 MP4 格式。 

  1. 下载 M3U8 播放列表中引用的媒体文件。您可以使用视频下载工具,如 Video DownloadHelper、VLC 媒体播放器或 IDM(互联网下载管理器)下载媒体文件。
  2. 下载媒体文件后,使用视频转换工具将其转换为 MP4 格式。网上有许多视频转换工具可用,如 HandBrake、Any Video Converter 和 Freemake Video Converter。
  3. 打开视频转换工具,选择要转换的媒体文件。选择 MP4 格式作为输出格式。
  4. 根据需要自定义视频设置,如分辨率、比特率和帧率。
  5. 开始转换过程,并等待其完成。
  6. 转换完成后,您将得到一个可以在任何支持 MP4 格式的媒体播放器上播放的 MP4 视频文件。

将 M3U8 转换为 MP4 可能会导致质量损失,具体取决于所使用的视频转换工具和设置。

如何重写 M3U8 文件?

Tencent Edge Functions 提供了一个无服务器代码执行环境,适用于腾讯 EdgeOne 的边缘节点。得益于 EdgeOne 边缘函数的可编程能力,开发人员可以在边缘节点处理 M3U8 媒体文件,并动态修改和注入内容。重写和处理 M3U8 文件可以帮助开发人员实现更丰富、更灵活的流媒体应用场景。以下是一些常见场景:

  1. 自定义播放列表:开发人员可能需要根据用户的网络状况、设备性能或地理位置选择不同的媒体流。
  2. 内容安全和访问控制:为了保护版权内容,开发人员可能需要处理 M3U8 文件以实施加密、添加访问令牌和其他功能。
  3. 广告插入:在流媒体内容中插入广告是常见的商业模式。开发人员可以修改 M3U8 文件,在视频播放的特定时间插入广告片段。

在博客文章 "如何重写 M3U8 文件?" 中,我们介绍了如何使用腾讯边缘函数动态修改 M3U8 文件的内容。有关 M3U8 重写、访问控制和更多代码实现的实际示例,我们邀请您探索我们的 GitHub 仓库

结论

总之,M3U8 是一种强大而灵活的流媒体内容文件格式。由于其适应性和易用性,它变得越来越受欢迎。如果您有更广泛的视频资产管理需求,例如快速上传、转码、存储和加速播放,EdgeOne VOD 是完美的解决方案。

Tencent EdgeOne VOD(点播视频)提供了一整套功能,如云视频存储、视频转码和视频播放加速,确保快速、灵活和高质量的视频交付。这使您能够专注于核心业务,根据需求选择服务,并迅速适应市场变化。我们还提供 免费试用,让您开始。 点击这里 开始您的旅程。

常见问题解答

1. M3U8 文件是什么?

M3U8 文件是一种用于 HTTP 实时流(HLS)的播放列表文件格式。它是一个以 UTF-8 编码的文本文件,包含媒体片段的 URL 或文件路径列表,通常是视频或音频文件。

2. M3U8 如何工作?

M3U8 文件通过列出媒体片段的位置,使媒体播放器能够顺序下载和播放。这允许自适应比特率流,其中视频质量可以根据观众的互联网连接进行调整。

3. M3U 和 M3U8 有什么区别?

主要区别在于编码。M3U 文件通常以 ANSI 或其他字符集编码,而 M3U8 文件专门以 UTF-8 编码,支持更广泛的字符范围。

4. 我如何打开 M3U8 文件?

您可以使用多种支持 HLS 的媒体播放器打开 M3U8 文件,例如:

  • VLC 媒体播放器
  • Apple QuickTime 播放器
  • Windows 媒体播放器(使用适当的插件)
  • 支持 HLS 的 Web 浏览器,如 Safari、Chrome 和 Firefox

5. 我可以将 M3U8 转换为 MP4 吗?

是的,您可以使用 FFmpeg 等工具将 M3U8 转换为 MP4。该过程涉及下载 M3U8 文件中列出的媒体片段并将它们合并为一个 MP4 文件。

6. 我如何创建 M3U8 文件?

您可以使用文本编辑器创建 M3U8 文件,通过列出媒体片段及其持续时间。将文件保存为 .m3u8 扩展名,并确保以 UTF-8 编码。有关详细信息,请参阅前面的回复中的步骤。

7. 使用 M3U8 的优点是什么?

  • 自适应流:根据网络条件调整视频质量。
  • 直播流:适合实时广播。
  • 韧性:通过请求下一个片段更好地处理网络中断。

8. 使用 M3U8 的缺点是什么?

  • 复杂性:需要 Web 服务器来托管媒体片段。
  • 延迟:可能会在直播流中引入轻微延迟。
  • 兼容性:并非所有媒体播放器都原生支持 M3U8。

9. M3U8 适合离线播放吗?

不,M3U8 是为流式传输设计的,需要互联网连接才能访问媒体片段。对于离线播放,您应该使用 MP4 等格式。

10. 我如何从 M3U8 文件下载视频?

您可以使用 FFmpeg 或浏览器扩展下载并将媒体片段组合成一个视频文件。有关详细说明,请参阅前面的回复。

11. 我可以使用 M3U8 进行音频流吗?

是的,M3U8 也可以用于音频流。该格式不限于视频,也可以列出音频片段以进行流式传输。

12. 什么是自适应比特率流?

自适应比特率流是一种技术,其中视频流的质量根据观众的互联网连接速度动态调整。M3U8 文件通过列出多种不同比特率的媒体版本来支持这一点。

13. 什么是 HLS(HTTP 实时流)?

HLS 是苹果开发的流媒体协议,它使用 M3U8 文件通过互联网传递媒体内容。它将内容分成小段并允许自适应比特率流。