【音视频】M3U8与HLS详解

举报
人才程序员 发表于 2024/07/28 20:27:33 2024/07/28
【摘要】 @TOC 前言M3U8 和 HLS 是音视频流媒体领域中常见的技术,广泛应用于在线视频点播(VOD)和直播(Live)场景。M3U8 是一种基于文本的播放列表文件格式,主要用于描述媒体文件的位置和顺序,而 HLS(HTTP Live Streaming)是一种流媒体传输协议,由 Apple 公司提出。HLS 使用 M3U8 文件来管理和播放流媒体内容,能够适应不同的网络环境,实现高质量、低延...

@TOC


前言

M3U8 和 HLS 是音视频流媒体领域中常见的技术,广泛应用于在线视频点播(VOD)和直播(Live)场景。M3U8 是一种基于文本的播放列表文件格式,主要用于描述媒体文件的位置和顺序,而 HLS(HTTP Live Streaming)是一种流媒体传输协议,由 Apple 公司提出。HLS 使用 M3U8 文件来管理和播放流媒体内容,能够适应不同的网络环境,实现高质量、低延迟的流媒体传输。


M3U8详解

M3U8 是什么

M3U8 是一种基于文本的文件格式,用于描述音视频文件的播放列表。它是 M3U 文件的一种扩展,M3U 文件主要用于音频播放列表,而 M3U8 则用于音视频流媒体播放。M3U8 文件使用 UTF-8 编码,通常用于 HTTP Live Streaming (HLS) 协议中,作为媒体分片的索引文件。

M3U8 文件的组成部分

一个典型的 M3U8 文件包含多个标签,每个标签都以井号(#)开头。以下是 M3U8 文件的主要组成部分:

  1. 文件头

    • #EXTM3U:所有 M3U8 文件的起始标签,表明这是一个 M3U8 文件。
  2. 基本标签

    • #EXTINF:<duration>,<title>:描述媒体分片的信息。<duration> 是分片的时长(以秒为单位),<title> 是可选的分片标题。
    • URL:实际媒体文件的位置,通常紧跟在 #EXTINF 标签之后。
  3. 可选标签

    • #EXT-X-TARGETDURATION:<seconds>:指定媒体分片的最大时长。
    • #EXT-X-MEDIA-SEQUENCE:<number>:定义播放列表中第一个分片的序列号。
    • #EXT-X-VERSION:<number>:指定播放列表文件的协议版本。
    • #EXT-X-ALLOW-CACHE:<YES|NO>:指示客户端是否可以缓存播放列表文件。
    • #EXT-X-ENDLIST:指示播放列表的结束,常用于点播流。
    • #EXT-X-KEY:<attributes>:描述用于解密媒体分片的密钥信息,包含多个属性(如方法、URI 等)。
    • #EXT-X-STREAM-INF:<attributes>:用于描述变码率(多码率)流信息,包含分辨率、带宽等属性。

示例 M3U8 文件

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:10.0,
http://example.com/segment0.ts
#EXTINF:10.0,
http://example.com/segment1.ts
#EXTINF:10.0,
http://example.com/segment2.ts

#EXT-X-ENDLIST

以上示例展示了一个简单的 M3U8 文件,其中包含版本信息、目标时长、媒体序列号和三个媒体分片。每个分片的时长为 10 秒,URL 指向实际的媒体文件位置。最后,#EXT-X-ENDLIST 标签表示播放列表的结束。

HLS

HLS(HTTP Live Streaming)视频封装格式

HLS(HTTP Live Streaming)是由 Apple 公司开发的一种流媒体传输协议,广泛用于直播和点播视频流的传输。HLS 协议将视频文件分割成一系列较小的媒体文件(通常称为分片),通过 HTTP 进行传输,并使用 M3U8 播放列表文件来管理这些分片。

HLS 视频封装格式的主要组成部分

  1. M3U8 播放列表文件

    • Master Playlist(主播放列表):用于描述不同比特率和分辨率的变码率流,每个流有一个相应的 Media Playlist。
    • Media Playlist(媒体播放列表):包含实际的媒体分片的 URL 和相关信息。每个分片的 URL 通常紧跟在 #EXTINF 标签之后。
  2. 媒体分片

    • .ts 文件(MPEG-TS):HLS 主要使用 MPEG-TS(MPEG Transport Stream)格式来封装视频和音频数据。每个 .ts 文件是一个视频分片,包含一段视频和音频数据。
    • .aac 文件:在某些情况下,音频数据也可以单独存储为 .aac 文件。

示例 HLS 主播放列表文件(Master Playlist)

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=1280000,RESOLUTION=640x360
http://example.com/low.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2560000,RESOLUTION=1280x720
http://example.com/mid.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=5120000,RESOLUTION=1920x1080
http://example.com/high.m3u8

示例 HLS 媒体播放列表文件(Media Playlist)

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:10.0,
http://example.com/segment0.ts
#EXTINF:10.0,
http://example.com/segment1.ts
#EXTINF:10.0,
http://example.com/segment2.ts

#EXT-X-ENDLIST

HLS 封装格式的特点

  • 分段传输:将视频文件分割成小的分片文件,便于在不稳定的网络环境下进行传输。
  • 自适应比特率:支持不同比特率和分辨率的流,客户端可以根据网络状况动态选择合适的流进行播放。
  • 基于 HTTP 传输:使用标准的 HTTP 协议进行传输,兼容性强,易于通过 CDN(内容分发网络)进行分发。

HSL(HTTP Stream Live)的视频封装格式

目前并没有广泛承认的 HSL(HTTP Stream Live)作为一种独立的流媒体传输协议,HLS(HTTP Live Streaming)是标准且被广泛应用的协议。HLS 已经被许多视频流媒体服务和播放器广泛支持。如果您指的是某种自定义或特定公司的流媒体技术,可能需要具体说明其详细信息。

总结而言,HLS 是一种成熟且广泛应用的流媒体传输协议,使用 M3U8 播放列表文件和 MPEG-TS 分片文件来实现稳定、高效的流媒体播放。

TS 文件介绍

TS(Transport Stream,传输流)文件是一种用于多媒体数据传输和存储的容器格式。TS 文件主要用于传输和存储视频、音频和数据,特别是在广播和流媒体应用中。MPEG-TS(MPEG Transport Stream)是 TS 文件的一个常见实现,它是一种标准化的数字容器格式,用于传输音频、视频和数据。TS 文件格式设计目的是在不可靠的传输介质(如广播网络或互联网)上提供可靠的传输。

TS 文件的优势

  1. 抗误码能力强:TS 文件设计用于在不可靠的传输介质上工作,具有很强的纠错能力,能够在传输过程中有效应对数据丢失和错误。

  2. 实时传输:TS 文件支持实时数据流传输,适合用于直播和流媒体应用,能够保证数据的实时性。

  3. 灵活的多路复用:TS 文件可以包含多个音视频流和数据流,并且可以灵活地进行多路复用和解复用,支持多种分辨率和比特率的组合。

  4. 同步性好:TS 文件格式通过时间戳(PTS/DTS)保证了音频和视频流的同步,确保了播放过程中的同步性和一致性。

  5. 标准化:MPEG-TS 是国际标准,得到广泛支持和应用,兼容性好,能够与多种硬件和软件设备配合使用。

HLS 使用 TS 视频文件的原因

  1. 广泛支持:MPEG-TS 是一个成熟的国际标准,得到了广泛的支持。几乎所有的流媒体服务器和播放器都支持 TS 文件格式,使其成为流媒体传输的理想选择。

  2. 分片传输:HLS 协议将视频流分割成多个小的 TS 分片,每个分片包含几秒钟的视频和音频数据。这样可以在网络环境不稳定的情况下,逐片传输和播放,减少播放中断的可能性。

  3. 实时性:TS 文件格式支持实时流媒体传输,适合用于直播等需要实时传输的场景。HLS 使用 TS 文件可以保证数据的实时传输和播放。

  4. 纠错能力:由于 TS 文件具有很强的纠错能力,能够在传输过程中应对数据丢失和错误,确保传输的可靠性和数据的完整性。

  5. 多路复用和同步:TS 文件支持多路复用,可以在一个文件中同时包含多个音视频流和数据流。通过时间戳(PTS/DTS),TS 文件能够保证音视频的同步播放,提供良好的用户体验。

示例 TS 文件结构

TS 文件由多个固定大小(188 字节)的数据包组成,每个数据包包含头部和有效负载。头部通常包含同步字节、标志和 PID(Packet Identifier),用于标识和管理不同的流。

| 188 bytes TS Packet |
|----------------------|
| Sync Byte | Header | Payload |

总结

M3U8 和 HLS 是现代流媒体技术的核心组成部分,它们通过简便的播放列表格式和高效的传输协议,实现了稳定、灵活的音视频播放体验。M3U8 文件提供了对媒体资源的详细描述,而 HLS 则通过分段传输和自适应比特率技术,保证了在各种网络条件下的流畅播放。随着流媒体应用的不断发展,M3U8 和 HLS 的使用场景将更加广泛,为用户提供更好的音视频服务。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。