惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
WordPress大学
WordPress大学
S
Schneier on Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
AWS News Blog
AWS News Blog
The Cloudflare Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
NISL@THU
NISL@THU
T
Tor Project blog
L
Lohrmann on Cybersecurity
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
Microsoft Azure Blog
Microsoft Azure Blog
P
Proofpoint News Feed
G
GRAHAM CLULEY
博客园_首页
K
Kaspersky official blog
GbyAI
GbyAI
P
Privacy & Cybersecurity Law Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
AI
AI
爱范儿
爱范儿
Cloudbric
Cloudbric
MongoDB | Blog
MongoDB | Blog
Martin Fowler
Martin Fowler
aimingoo的专栏
aimingoo的专栏
I
InfoQ
腾讯CDC
O
OpenAI News
F
Full Disclosure
P
Privacy International News Feed
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Webroot Blog
Webroot Blog
Forbes - Security
Forbes - Security
MyScale Blog
MyScale Blog
L
LangChain Blog
H
Help Net Security
C
CERT Recently Published Vulnerability Notes
C
Cisco Blogs
人人都是产品经理
人人都是产品经理
S
Security @ Cisco Blogs
T
Tenable Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
News and Events Feed by Topic
博客园 - 三生石上(FineUI控件)
Attack and Defense Labs
Attack and Defense Labs
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - 与f

微软的人机验证 docker运行hermes agent python使用docx库对在word中的表格合并操作 Python 项目创建+依赖管理+版本控制 百度飞桨PaddleOCR-VL识别发票图片输出json格式 大模型微调后导出,部署服务然后后端调用 openclaw的一些聊天配置 docker 部署 openclaw llama.cpp编译 微信小程序显示ai返回的markdown或html C#多端桌面程序(可跨平台) 主流 MySQL 热备份方案 基于SRS(Simple Realtime Server)+ CDN边缘节点加速3个nginx做文件分发1个nginx做负载均衡 一份基于SRS(Simple Realtime Server)+ CDN边缘节点srs edge加速的万人级直播部署清单 HLS(HTTP Live Streaming)标准的视频及加密和解密播放 使用Dockerfile创建一个hyperf容器做为开发环境 docker的hyperf框架docker-compose一键安装 通过vm虚拟中的docker 环境做开发 ubuntu 安装后ssh 连接到服务器 lvm的概念和操作(linux) PHP Attributes 注解 centos 服务器查找一些字符串 Centos8网络配置小工具 Keepalive实现一个高可用负载均衡场景 Keepalived详解:原理、编译安装与高可用集群配置
HLS(HTTP Live Streaming)标准的视频及加密
与f · 2026-01-20 · via 博客园 - 与f

.m3u8 是 HLS(HTTP Live Streaming) 协议的索引文件,用于分割后的 TS 分片的播放调度。制作核心是 将 MP4 转码为 TS 分片 + 生成对应的 m3u8 索引,主流工具是 ffmpeg

1. 前置准备

  • 安装 ffmpeg:Linux 可通过 yum install ffmpeg(CentOS/Rocky Linux)或 apt install ffmpeg(Debian/Ubuntu);Windows 需下载编译包并配置环境变量。
  • 准备待处理的 MP4 文件(建议先确保 MP4 编码为 H.264 + AAC,兼容性最佳)。

2. 单分辨率 HLS 转换(基础命令)

执行以下 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.tsoutput_002.ts...:分割后的视频分片文件。 

3. 多分辨率 HLS 转换(自适应码率,可选)

如果需要支持不同网速自动切换清晰度,可生成多套 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;
    }
}

三、原始 MP4 文件可以删除吗?

可以删除,但需满足一个前提:

已经成功生成了完整的 .m3u8 和所有 .ts 分片,且验证播放正常。

原因:

  • 播放 HLS 流时,播放器只依赖 .m3u8.ts 文件,与原始 MP4 无任何关联。
  • 若后续需要重新生成 HLS(如调整分片时长、增加分辨率),则需要保留原始 MP4;否则删除后无法再基于原视频重新转换。

加密下一章介绍。