实现本地视频点播原理
主要命令:
ffmpeg -i input.mp4 \
-hls_time 10 \
-hls_key_info_file keyinfo.txt \
-hls_playlist_type vod \
output.m3u8
仔细分析一下这条 ffmpeg 命令,每个参数的作用都说明清楚:
ffmpeg -i input.mp4 \
-hls_time 10 \
-hls_key_info_file keyinfo.txt \
-hls_playlist_type vod \
output.m3u8
1️⃣ ffmpeg
- 调用
ffmpeg工具进行音视频处理和转码 - 可以处理 MP4、MKV、MOV 等各种视频格式
2️⃣ -i input.mp4
- 指定输入文件
input.mp4 - 这是你要转 HLS 的原始视频
3️⃣ -hls_time 10
- 每个 HLS 片段的时长,单位是秒
- 上例中设置为 10 秒 → 视频会被切成 10 秒一段的
.ts文件 - 切片太短:请求次数多,CPU/带宽压力大
- 切片太长:快进响应慢
4️⃣ -hls_key_info_file keyinfo.txt
- AES-128 加密的 key 信息
keyinfo.txt文件内容格式:
/absolute/path/to/local.key # 生成的 AES-128 key 文件在本地路径
http://your-server.com/key.key # 播放器请求 key 的 URL
iv=00000000000000000000000000000001 # 可选 IV(初始化向量)
- ffmpeg 会用这个 key 对生成的
.ts片段进行 AES-128 加密 - 播放器在播放
.m3u8时会通过key URI下载 key 解密
5️⃣ -hls_playlist_type vod
- 设置 HLS 播放列表类型为 点播(VOD)
- 生成完整
.m3u8列表,适合点播视频 - 如果是直播可以使用
-hls_playlist_type event或不指定
6️⃣ output.m3u8
- 输出播放列表文件(m3u8)
- 里面包含所有切片的路径信息(ts 文件)和加密 key URI
- 浏览器 / HLS 播放器会读取 m3u8,然后按顺序请求 ts 片段播放
🔹 输出文件示例
假设输入视频 30 秒,-hls_time 10,生成:
output.m3u8
segment0.ts
segment1.ts
segment2.ts
output.m3u8 内容类似:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-KEY:METHOD=AES-128,URI="http://your-server.com/key.key"
#EXTINF:10.0,
segment0.ts
#EXTINF:10.0,
segment1.ts
#EXTINF:10.0,
segment2.ts
#EXT-X-ENDLIST
#EXT-X-KEY:指定加密方式和 key URI#EXTINF:每个 ts 片段的时长- 播放器自动按顺序请求 ts 并解密播放
