【音视频】M3U8与HLS详解
创始人
2024-09-25 16:24:09

文章目录

  • 前言
    • M3U8详解
      • M3U8 是什么
      • M3U8 文件的组成部分
      • 示例 M3U8 文件
    • HLS
      • HLS(HTTP Live Streaming)视频封装格式
        • HLS 视频封装格式的主要组成部分
      • 示例 HLS 主播放列表文件(Master Playlist)
      • 示例 HLS 媒体播放列表文件(Media Playlist)
      • HLS 封装格式的特点
      • HSL(HTTP Stream Live)的视频封装格式
      • TS 文件介绍
      • TS 文件的优势
      • HLS 使用 TS 视频文件的原因
      • 示例 TS 文件结构
  • 总结


前言

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:,</code>:描述媒体分片的信息。<code><duration></code> 是分片的时长(以秒为单位),<code><title></code> 是可选的分片标题。</li><li>URL:实际媒体文件的位置,通常紧跟在 <code>#EXTINF</code> 标签之后。</li></ul></li><li><p><strong>可选标签</strong></p><ul><li><code>#EXT-X-TARGETDURATION:<seconds></code>:指定媒体分片的最大时长。</li><li><code>#EXT-X-MEDIA-SEQUENCE:<number></code>:定义播放列表中第一个分片的序列号。</li><li><code>#EXT-X-VERSION:<number></code>:指定播放列表文件的协议版本。</li><li><code>#EXT-X-ALLOW-CACHE:<YES|NO></code>:指示客户端是否可以缓存播放列表文件。</li><li><code>#EXT-X-ENDLIST</code>:指示播放列表的结束,常用于点播流。</li><li><code>#EXT-X-KEY:<attributes></code>:描述用于解密媒体分片的密钥信息,包含多个属性(如方法、URI 等)。</li><li><code>#EXT-X-STREAM-INF:<attributes></code>:用于描述变码率(多码率)流信息,包含分辨率、带宽等属性。</li></ul></li></ol><h4>示例 M3U8 文件</h4> <pre><code class="prism language-plaintext">#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 </code></pre> <p>以上示例展示了一个简单的 M3U8 文件,其中包含版本信息、目标时长、媒体序列号和三个媒体分片。每个分片的时长为 10 秒,URL 指向实际的媒体文件位置。最后,<code>#EXT-X-ENDLIST</code> 标签表示播放列表的结束。</p><h3>HLS</h3><h4>HLS(HTTP Live Streaming)视频封装格式</h4><p>HLS(HTTP Live Streaming)是由 Apple 公司开发的一种流媒体传输协议,广泛用于直播和点播视频流的传输。HLS 协议将视频文件分割成一系列较小的媒体文件(通常称为分片),通过 HTTP 进行传输,并使用 M3U8 播放列表文件来管理这些分片。</p><h5>HLS 视频封装格式的主要组成部分</h5><ol><li><p><strong>M3U8 播放列表文件</strong></p><ul><li><strong>Master Playlist(主播放列表)</strong>:用于描述不同比特率和分辨率的变码率流,每个流有一个相应的 Media Playlist。</li><li><strong>Media Playlist(媒体播放列表)</strong>:包含实际的媒体分片的 URL 和相关信息。每个分片的 URL 通常紧跟在 <code>#EXTINF</code> 标签之后。</li></ul></li><li><p><strong>媒体分片</strong></p><ul><li><strong>.ts 文件(MPEG-TS)</strong>:HLS 主要使用 MPEG-TS(MPEG Transport Stream)格式来封装视频和音频数据。每个 .ts 文件是一个视频分片,包含一段视频和音频数据。</li><li><strong>.aac 文件</strong>:在某些情况下,音频数据也可以单独存储为 .aac 文件。</li></ul></li></ol><h4>示例 HLS 主播放列表文件(Master Playlist)</h4> <pre><code class="prism language-plaintext">#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 </code></pre> <h4>示例 HLS 媒体播放列表文件(Media Playlist)</h4> <pre><code class="prism language-plaintext">#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 </code></pre> <h4>HLS 封装格式的特点</h4><ul><li><strong>分段传输</strong>:将视频文件分割成小的分片文件,便于在不稳定的网络环境下进行传输。</li><li><strong>自适应比特率</strong>:支持不同比特率和分辨率的流,客户端可以根据网络状况动态选择合适的流进行播放。</li><li><strong>基于 HTTP 传输</strong>:使用标准的 HTTP 协议进行传输,兼容性强,易于通过 CDN(内容分发网络)进行分发。</li></ul><h4>HSL(HTTP Stream Live)的视频封装格式</h4><p>目前并没有广泛承认的 HSL(HTTP Stream Live)作为一种独立的流媒体传输协议,HLS(HTTP Live Streaming)是标准且被广泛应用的协议。HLS 已经被许多视频流媒体服务和播放器广泛支持。如果您指的是某种自定义或特定公司的流媒体技术,可能需要具体说明其详细信息。</p><p>总结而言,HLS 是一种成熟且广泛应用的流媒体传输协议,使用 M3U8 播放列表文件和 MPEG-TS 分片文件来实现稳定、高效的流媒体播放。</p><h4>TS 文件介绍</h4><p>TS(Transport Stream,传输流)文件是一种用于多媒体数据传输和存储的容器格式。TS 文件主要用于传输和存储视频、音频和数据,特别是在广播和流媒体应用中。MPEG-TS(MPEG Transport Stream)是 TS 文件的一个常见实现,它是一种标准化的数字容器格式,用于传输音频、视频和数据。TS 文件格式设计目的是在不可靠的传输介质(如广播网络或互联网)上提供可靠的传输。</p><h4>TS 文件的优势</h4><ol><li><p><strong>抗误码能力强</strong>:TS 文件设计用于在不可靠的传输介质上工作,具有很强的纠错能力,能够在传输过程中有效应对数据丢失和错误。</p></li><li><p><strong>实时传输</strong>:TS 文件支持实时数据流传输,适合用于直播和流媒体应用,能够保证数据的实时性。</p></li><li><p><strong>灵活的多路复用</strong>:TS 文件可以包含多个音视频流和数据流,并且可以灵活地进行多路复用和解复用,支持多种分辨率和比特率的组合。</p></li><li><p><strong>同步性好</strong>:TS 文件格式通过时间戳(PTS/DTS)保证了音频和视频流的同步,确保了播放过程中的同步性和一致性。</p></li><li><p><strong>标准化</strong>:MPEG-TS 是国际标准,得到广泛支持和应用,兼容性好,能够与多种硬件和软件设备配合使用。</p></li></ol><h4>HLS 使用 TS 视频文件的原因</h4><ol><li><p><strong>广泛支持</strong>:MPEG-TS 是一个成熟的国际标准,得到了广泛的支持。几乎所有的流媒体服务器和播放器都支持 TS 文件格式,使其成为流媒体传输的理想选择。</p></li><li><p><strong>分片传输</strong>:HLS 协议将视频流分割成多个小的 TS 分片,每个分片包含几秒钟的视频和音频数据。这样可以在网络环境不稳定的情况下,逐片传输和播放,减少播放中断的可能性。</p></li><li><p><strong>实时性</strong>:TS 文件格式支持实时流媒体传输,适合用于直播等需要实时传输的场景。HLS 使用 TS 文件可以保证数据的实时传输和播放。</p></li><li><p><strong>纠错能力</strong>:由于 TS 文件具有很强的纠错能力,能够在传输过程中应对数据丢失和错误,确保传输的可靠性和数据的完整性。</p></li><li><p><strong>多路复用和同步</strong>:TS 文件支持多路复用,可以在一个文件中同时包含多个音视频流和数据流。通过时间戳(PTS/DTS),TS 文件能够保证音视频的同步播放,提供良好的用户体验。</p></li></ol><h4>示例 TS 文件结构</h4><p>TS 文件由多个固定大小(188 字节)的数据包组成,每个数据包包含头部和有效负载。头部通常包含同步字节、标志和 PID(Packet Identifier),用于标识和管理不同的流。</p> <pre><code class="prism language-plaintext">| 188 bytes TS Packet | |----------------------| | Sync Byte | Header | Payload | </code></pre> <hr /><h2>总结</h2><p>M3U8 和 HLS 是现代流媒体技术的核心组成部分,它们通过简便的播放列表格式和高效的传输协议,实现了稳定、灵活的音视频播放体验。M3U8 文件提供了对媒体资源的详细描述,而 HLS 则通过分段传输和自适应比特率技术,保证了在各种网络条件下的流畅播放。随着流媒体应用的不断发展,M3U8 和 HLS 的使用场景将更加广泛,为用户提供更好的音视频服务。</p><link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-f23dff6052.css" rel="stylesheet"><link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-c216769e99.css" rel="stylesheet"> <!--end::Text--> </div> <!--end::Description--> <div class="mt-5"> <!--关键词搜索--> </div> <div class="mt-5"> <p class="fc-show-prev-next"> <strong>上一篇:</strong><a href="/dnzs/34418.html">Qt框架下实现商品库存管理系统</a><br> </p> <p class="fc-show-prev-next"> <strong>下一篇:</strong><a href="/dnzs/34420.html">4、设备树(DT)</a> </p> </div> <!--begin::Block--> <div class="d-flex flex-stack mb-2 mt-10"> <!--begin::Title--> <h3 class="text-dark fs-5 fw-bold text-gray-800">相关内容</h3> <!--end::Title--> </div> <div class="separator separator-dashed mb-9"></div> <!--end::Block--> <div class="row g-10"> </div> </div> <!--end::Table widget 14--> </div> <!--end::Col--> <!--begin::Col--> <div class="col-xl-4 mt-0"> <!--begin::Chart Widget 35--> <div class="card card-flush h-md-100"> <!--begin::Header--> <div class="card-header pt-5 "> <!--begin::Title--> <h3 class="card-title align-items-start flex-column"> <!--begin::Statistics--> <div class="d-flex align-items-center mb-2"> <!--begin::Currency--> <span class="fs-5 fw-bold text-gray-800 ">热门资讯</span> <!--end::Currency--> </div> <!--end::Statistics--> </h3> <!--end::Title--> </div> <!--end::Header--> <!--begin::Body--> <div class="card-body pt-3"> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/news/610644.html" class="text-dark fw-bold text-hover-primary fs-6">未来三年销售目标突破千亿元!京...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">上证报中国证券网讯(记者 刘暄)京东与荣耀4月2日签署战略合作协议,明确未来三年荣耀在京东全渠道销售...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/news/610643.html" class="text-dark fw-bold text-hover-primary fs-6">我国科研人员发现99个新物种</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">我国科研人员发现99个昆虫新物种 为青藏高原生物多样性再添新证 4月1日,我国科研人员在国际动物分类...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/news/610642.html" class="text-dark fw-bold text-hover-primary fs-6">兴源自动化取得电芯高效测漏设备...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">国家知识产权局信息显示,惠州市兴源自动化设备有限公司取得一项名为“一种电芯高效测漏设备”的专利,授权...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/news/610641.html" class="text-dark fw-bold text-hover-primary fs-6">量旋科技完成6亿元C+轮融资 ...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">本报讯 (记者张敏)4月3日,深圳量旋科技有限公司(以下简称“量旋科技”)宣布完成6亿元C+轮融资。...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/news/610640.html" class="text-dark fw-bold text-hover-primary fs-6">李云泽:推动构建与未来产业全生...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">上证报中国证券网讯 据金融监管总局4月3日消息,4月1日,金融监管总局举办党委理论学习中心组集体(扩...</span> </div> <!--end::Title--> </div> </div> <!--end::Body--> </div> <!--end::Chart Widget 35--> </div> <!--end::Col--> </div> </div> <!--end::Content container--> </div> <!--end::Content--> </div> <!--end::Content wrapper--> <!--begin::Footer--> <div id="kt_app_footer" class="app-footer"> <!--begin::Footer container--> <div class="app-container container-xxl d-flex flex-column flex-md-row flex-center flex-md-stack py-3"> <!--begin::Copyright--> <div class="text-dark order-2 order-md-1"> <span class="text-muted fw-semibold me-1">2026 ©</span> 泰达科技网<a href="http://tansuo.caiding5.cn/">财丁探索</a><a href="http://www.hgjy100.com/">汉高教育网</a><a href="http://www.bitekongjian.com/">比特空间</a><a href="http://www.tdroid.net/">太卓网</a><a href="http://www.nengyuan100.com/">能源100</a><a href="http://www.gangyiku.com/">易库网</a><a href="http://www.hcygmm.com/">汇川网</a><a href="http://www.dcglq.cn/">电池功率网</a><a href="http://ic.tdroid.net/">太卓IC网</a><a href="http://game.tdroid.net/">土豆游戏网</a> </div> <!--end::Copyright--> <!--begin::Menu--> <ul class="menu menu-gray-600 menu-hover-primary fw-semibold order-1"> <li class="menu-item"> <a href="/news/" target="_blank" class="menu-link px-2">科技资讯</a> </li> <li class="menu-item"> <a href="/dnzs/" target="_blank" class="menu-link px-2">电脑知识</a> </li> </ul> <!--end::Menu--> </div> <!--end::Footer container--> </div> <!--end::Footer--> </div> <!--end:::Main--> </div> <!--end::Wrapper--> </div> <!--end::Page--> </div> <!--end::App--> <div id="kt_scrolltop" class="scrolltop" data-kt-scrolltop="true"> <!--begin::Svg Icon | path: icons/duotune/arrows/arr066.svg--> <span class="svg-icon"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <rect opacity="0.5" x="13" y="6" width="13" height="2" rx="1" transform="rotate(90 13 6)" fill="currentColor"></rect> <path d="M12.5657 8.56569L16.75 12.75C17.1642 13.1642 17.8358 13.1642 18.25 12.75C18.6642 12.3358 18.6642 11.6642 18.25 11.25L12.7071 5.70711C12.3166 5.31658 11.6834 5.31658 11.2929 5.70711L5.75 11.25C5.33579 11.6642 5.33579 12.3358 5.75 12.75C6.16421 13.1642 6.83579 13.1642 7.25 12.75L11.4343 8.56569C11.7467 8.25327 12.2533 8.25327 12.5657 8.56569Z" fill="currentColor"></path> </svg> </span> <!--end::Svg Icon--> </div> <!--begin::Javascript--> <script>var hostUrl = "/static/default/pc/";</script> <!--begin::Global Javascript Bundle(mandatory for all pages)--> <script src="/static/default/pc/plugins/global/plugins.bundle.js"></script> <script src="/static/default/pc/js/scripts.bundle.js"></script> <!--end::Global Javascript Bundle--> <!--end::Javascript--> </body> <!--end::Body--> </html>