




















.m3u8 是 HLS(HTTP Live Streaming) 协议的索引文件,用于分割后的 TS 分片的播放调度。制作核心是 将 MP4 转码为 TS 分片 + 生成对应的 m3u8 索引,主流工具是 ffmpeg
ffmpeg:Linux 可通过 yum install ffmpeg(CentOS/Rocky Linux)或 apt install ffmpeg(Debian/Ubuntu);Windows 需下载编译包并配置环境变量。执行以下 ffmpeg 命令,即可生成 m3u8 和对应的 TS 分片:
ffmpeg -i input.mp4 \ -c:v h264 \ -c:a aac \ -hls_time 10 \ # 每个 TS 分片的时长(单位:秒) -hls_list_size 0 \ # 0 表示保留所有分片,非 0 则只保留最新 N 个 -hls_segment_filename "output_%03d.ts" \ # TS 分片命名规则 output.m3u8 # 生成的 m3u8 文件名
output.m3u8:核心索引文件,记录 TS 分片的顺序、时长、路径。output_001.ts、output_002.ts...:分割后的视频分片文件。 如果需要支持不同网速自动切换清晰度,可生成多套 TS 分片 + 一个主 m3u8:
# 生成低清(480p)分片 ffmpeg -i input.mp4 -c:v h264 -c:a aac -vf "scale=854:480" -hls_time 10 -hls_list_size 0 -hls_segment_filename "480p_%03d.ts" 480p.m3u8 # 生成高清(720p)分片 ffmpeg -i input.mp4 -c:v h264 -c:a aac -vf "scale=1280:720" -hls_time 10 -hls_list_size 0 -hls_segment_filename "720p_%03d.ts" 720p.m3u8 # 生成主 m3u8(索引多分辨率) echo "#EXTM3U #EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=854x480 480p.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=2000000,RESOLUTION=1280x720 720p.m3u8" > main.m3u8
服务器必须同时存放 .m3u8 文件和对应的 .ts 分片文件,缺一不可:
.m3u8 是索引文件,本身很小(几 KB),仅记录 TS 分片的路径、时长、编码信息。.ts 是实际的视频数据文件,播放器会先请求 m3u8,再根据索引逐个请求 TS 分片进行播放。存放结构建议(以 Nginx 为例):
/var/www/html/hls/
├─ output.m3u8 # 索引文件
├─ output_001.ts # TS 分片1
├─ output_002.ts # TS 分片2
└─ ...
Nginx 需配置支持 HLS 的 MIME 类型(在 nginx.conf 或站点配置中添加):
http { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } }
可以删除,但需满足一个前提:
已经成功生成了完整的
.m3u8和所有.ts分片,且验证播放正常。
原因:
.m3u8 和 .ts 文件,与原始 MP4 无任何关联。加密下一章介绍。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。