news 2026/9/4 0:39:27

HLS协议中m3u8列表及ts文件的由来

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HLS协议中m3u8列表及ts文件的由来

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD
如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。
😊 座右铭:不想当开发的测试,不是一个好测试✌️。
如果感觉博主的文章还不错的话,还请点赞、收藏哦!👍

文章目录

  • 协议概述
  • 架构及工作流程
  • 怎么分段成 .ts 文件

协议概述

HLS(HTTP Live Streaming)是由苹果公司于2009年推出的自适应比特率流媒体传输协议。它基于标准的 HTTP 协议,通过将视频流切片成一系列小的 TS 文件,并使用 M3U8 播放列表进行索引,实现跨平台、可自适应的流媒体传输。

架构及工作流程

原始视频 → 编码器 → 分段器 → Web服务器 → 客户端播放器 (H.264/HEVC) (生成.ts + .m3u8) (HTTP服务) (解析播放)

使用通俗的语言介绍

hls 就类似于去餐厅吃饭,厨师每做完一小碟就端出来,你可以边吃边等下一碟

  1. 编码分段:把一个大视频切成很多小片段,一个片段就是一个.ts文件,一个 ts 文件时长大概 2-10s 左右,具体要看业务要求。
  2. 生成播放列表M3U8:这个列表通常展示有哪些.ts 文件,以及会按照什么顺序播放
  3. CDN 分发: 把所有的 .ts 文件和 .m3u8 放到CDN服务器上
  4. 播放器播放:根据.m3u8 列表进行顺序播放。在直播时会实时查看 m3u8 列表有没有新的 .ts 文件

怎么分段成 .ts 文件

我们通过一个命令来介绍
ffmpeg -i input.mp4 -c copy -f hls -hls_time 5 output.m3u8

点播文件:http://pili-vod.devtest.qbox.net/test.m3u8

  • -f hls: 表示为 hls 格式
  • -hls_time 5:每段5s
  • output.m3u8为播放列表

执行命令后,在当前目录下会生成很多.ts 文件,随便点开几个ts文件播放,ts 文件时长为5s,当然也有为3s和4s的

但是直接执行output.m3u8文件列表,是从output122.ts开始播放,这到底是为什么???

打开output.m3u8 文件列表简介查看,因为m3u8列表中的#EXT-X-MEDIA-SEQUENCE标签指定了播放的起始序列编号,同时 FFmpeg 生成 HLS 时默认会延续历史序列编号。

在 HLS 规范中,#EXT-X-MEDIA-SEQUENCE是一个强制标签,它定义了当前m3u8列表中第一个媒体段(.ts 文件)的序列号

但是为什么序列编号从 122 开始?

FFmpeg 生成 HLS 时,默认会延续历史序列编号,不会自动重置为 0,常见场景是:

  • 你之前已经生成过同名的output.m3u8和对应的.ts文件(比如之前生成到了output121.ts);
  • 本次执行命令时,没有删除旧的m3u8.ts文件,FFmpeg 会读取旧m3u8的最后一个序列编号,自动从122开始继续生成新的片段。

如何从第一个切片开始播放

  1. 失败方式一❌

在 FFmpeg 命令中添加-start_number参数,指定起始序号(比如从 0 开始):

但是在执行之前需要删除旧的output.m3u8和所有output*.ts文件,避免新旧片段混杂。

ffmpeg -i input.mp4 -c copy -f hls -hls_time 5 -start_number 0 output.m3u8

但是,#EXT-X-MEDIA-SEQUENCE:122依然没有从 0 开始,查了一些资料说是依然延用了之前的序列,没有彻底删除。但是我换了一个目录进行操作,但是还是没有从第一个切片开始播放

补充下:**验证 FFmpeg 是否真的识别-start_number,**可以执行命令查看
ffmpeg -h muxer=hls

  1. 失败方式二❌:重新编码

ffmpeg -i bbb_30fps_gop_60_3mbps.mp4 -c:v libx264 -c:a aac -f hls -hls_time 5 -start_number 0 output.m3u8

但是最终结果:#EXT-X-MEDIA-SEQUENCE:110执行这个命令需要等待一段时间。即使换一个目录重新执行还是没有从切片0 开始播放。

  1. 成功方式三 ✅

直接修改m3u8文件列表,用文本编辑器打开或者vim 命令,手动指定#EXT-X-MEDIA-SEQUENCE:0,后面的ts文件名都要修改。

手动修改的方式可以从第一个切片开始播放

强制禁用序列延续 + 重置临时状态(推荐)

ffmpeg -i ../bbb_30fps_gop_60_3mbps.mp4 -c copy -f hls -hls_time 5 -start_number 0 -hls_flags single_file+delete_segments output.m3u8

执行这个命令后(执行完成时间较快),会看到生成一个ts文件


留一个问题:切片时长是指定的,怎么最终的切片时长 长短不一

要成功不需要什么特别的才能,只要把你能做的小事做得好就行了。——维龙‬

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 21:36:39

8 个降AI率工具推荐,本科生高效降AIGC指南

8 个降AI率工具推荐,本科生高效降AIGC指南 AI降重工具:高效降低AIGC率的利器 随着人工智能技术的飞速发展,越来越多的本科生在撰写论文时开始依赖AI工具。然而,使用AI生成的内容往往带有明显的“AI痕迹”,导致AIGC率偏…

作者头像 李华
网站建设 2026/9/2 21:23:50

Canoe在新能源汽车BMS测试中的实战案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个新能源汽车BMS测试案例展示页面。要求:1. 模拟CANoe测试环境 2. 展示电池电压/温度监控测试场景 3. 实现故障注入测试功能 4. 可视化测试结果统计 5. 包含测试报…

作者头像 李华
网站建设 2026/9/4 4:25:51

用PyCharm快捷键10分钟搭建数据可视化原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个快速数据可视化原型项目,使用PyCharm快捷键(如CtrlAltV提取变量、CtrlShiftF全局搜索)加速开发流程。项目应从CSV文件读取数据&#xff…

作者头像 李华
网站建设 2026/9/4 3:35:11

AI如何帮你解决‘找不到或无法加载主类‘错误

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个Java项目诊断工具,能够自动检测找不到或无法加载主类错误的原因。工具应能:1. 分析项目目录结构 2. 检查classpath配置 3. 验证manifest文件 4. 检测…

作者头像 李华
网站建设 2026/9/4 1:58:32

Keysight MSOS804A 是德MSOS804A大屏示波器

Keysight是德科技MSOS804A高清晰度示波器,8 GHz 带宽,4 个模拟通道和 16 个数字通道。是德Infiniium S 系列示波器采用了旨在提供卓越测量的创新技术。尖端硬件和广泛的软件套件协同工作,为您提供无与伦比的测量能力。我们的 10 位 ADC 和低噪…

作者头像 李华
网站建设 2026/9/2 21:56:34

Kotaemon能否用于学术论文润色?写作辅助功能探讨

Kotaemon能否用于学术论文润色?写作辅助功能探讨 在当今科研竞争日益激烈的环境下,非英语母语的研究者常常面临一个尴尬的现实:创新性的研究成果却因语言表达不够地道、逻辑结构松散或术语使用不规范,在投稿时被审稿人质疑。传统依…

作者头像 李华