Reference
- 《FFmpeg 从入门到精通》
FFmpeg 转封装 HLS 可配置的参数
参数 | 类型 | 说明 |
---|---|---|
start_number | 整数 | 设置 M3U8 列表中的第一片的序列数 |
hls_time | 浮点数 | 设置每一片时长 该切片规则采用的方式是从关键帧处开始切片,所以时间不一定不均匀,如果先转码再进行切片,则时间会比较均匀;或者使用 hls_flags 的 split_by_time(可能导致花屏等问题,因为第一帧不一定为关键帧) |
hls_list_size | 整数 | 设置 M3U8 中分片的个数 |
hls_ts_options | 字符串 | 设置 TS 切片的参数 |
hls_wrap | 整数 | 设置切片索引回滚的边界值 |
hls_allow_cache | 整数 | 设置 M3U8 中 EXT-X-ALLOW-CACHE 的标签 |
hls_base_url | 字符串 | 设置 M3U8 中每一片的前置路径 |
hls_segment_filename | 字符串 | 设置切片名模板 |
hls_key_info_file | 字符串 | 设置 M3U8 加密的 key 文件路径 |
hls_subtitle_path | 字符串 | 设置 M3U8 字幕路径 |
hls_flags | 标签(整数) | 设置 M3U8 文件列表的操作: single_file:生成一个媒体文件索引与字节范围 delete_segments:删除 M3U8 文件中不包含的过期的 TS 切片文件 round_durations:生成的 M3U8 切片信息的 duration 为整数 discont_start:生成 M3U8 的时候在列表前边加上 discontinuity 标签 omit_endlist:在 M3U8 末尾不追加 endlist 标签 |
use_localtime | 布尔 | 设置 M3U8 文件序号为本地时间戳 |
use_localtime_mkdir | 布尔 | 根据本地时间戳生成目录 |
hls_playlist_type | 整数 | 设置 M3U8 列表为事件或者点播列表 |
method | 字符串 | 设置 HTTP 属性 |
FFmpeg 转封装 HLS
MP4 转封装 HLS(不加多余参数)
1、输入命令:
|
|
2、输出结果:
3、输出的 M3U8 文件的内容:
|
|
4、生成的 ts 文件:
output0.ts~output14.ts
FLV 转封装 HLS
-bsf:v h264_mp4toannexb
的作用是将 MP4 中的 H264 编码格式的数据转换为 H264AnnexB 编码格式的数据,AnnexB 编码格式常见于实时传输流中。如果源文件为 FLV、TS 等可作为直播传输流的视频,则不需要这个参数。
不加多余参数
1、输入命令:
|
|
2、输出结果:
3、输出的 M3U8 文件的内容:
|
|
4、生成的 ts 文件:
output0.ts~output22.ts
start_number
比如设置 M3U8 列表中的第一片的序列数为 100。
1、输入命令:
|
|
2、输出结果:
3、输出的 M3U8 文件的内容:
|
|
4、生成的 ts 文件:
output100.ts~output122.ts
hls_time
比如设置每片长度为 10 秒。
该切片规则采用的方式是从关键帧处开始切片,所以时间不一定不均匀,如果先转码再进行切片,则时间会比较均匀;或者使用 hls_flags 的 split_by_time。
1、输入命令:
|
|
2、输出结果:
3、输出的 M3U8 文件的内容:
|
|
4、生成的 ts 文件:
output0.ts~output12.ts
hls_list_size
比如设置 M3U8 列表中 TS 切片的个数为 3。
1、输入命令:
|
|
2、输出结果:
3、输出的 M3U8 文件的内容:
|
|
4、生成的 ts 文件:
output0.ts~output22.ts
hls_wrap
比如设置 M3U8 列表中 TS 分片序号大于 2 时回滚为 0。
注意:该参数对 CDN 支持不友好,会引起兼容性问题,新版本会被弃用。
1、输入命令:
|
|
2、输出结果:
3、输出的 M3U8 文件的内容:
|
|
4、生成的 ts 文件:
output0.ts~output2.ts
hls_base_url
设置 M3U8 列表中的文件路径。
该路径可以为本地绝对路径、相对路径、网络路径(比如http://192.168.0.1/live/
)。
1、输入命令:
|
|
2、输出结果:
3、输出的 M3U8 文件的内容:
|
|
4、生成的 ts 文件:
output0.ts~output22.ts
hls_segment_filename
比如设置 M3U8 列表切片文件名以 live 开头。
1、输入命令:
|
|
2、输出结果:
3、输出的 M3U8 文件的内容:
|
|
4、生成的 ts 文件:
live-0.ts~live-22.ts
hls_flags
delete_segments
删除旧文件(以 hls_list_size 的 2 倍作为删除的依据)。
1、输入命令:
|
|
2、输出结果:
3、输出的 M3U8 文件的内容:
|
|
4、生成的 ts 文件:
output17.ts~output22.ts
round_durations
实现切片信息的 duration 为整型。
1、输入命令:
|
|
2、输出结果:
3、输出的 M3U8 文件的内容:
|
|
4、生成的 ts 文件:
output0.ts~output22.ts
discont_start
输出的 M3U8 在第一片(后续会刷掉) TS 信息的前面有一个 EXT-X-DISCONTINUTY 标签。
1、输入命令:
|
|
2、输出结果:
3、输出的 M3U8 文件的内容:
|
|
4、生成的 ts 文件:
output0.ts~output22.ts
omit_endlist
生成 M3U8 结束后不在文件末尾追加 endlist 标签。
1、输入命令:
|
|
2、输出结果:
3、输出的 M3U8 文件的内容:
|
|
4、生成的 ts 文件:
output0.ts~output22.ts
split_by_time
更精确地设置每一片时长(可能导致花屏等问题,因为第一帧不一定为关键帧)。
1、输入命令:
|
|
2、输出结果:
3、输出的 M3U8 文件的内容:
|
|
4、生成的 ts 文件:
output0.ts~output12.ts
use_localtime
以时间戳为切片文件名。
1、输入命令:
|
|
2、输出结果:
3、输出的 M3U8 文件的内容:
|
|
4、生成的 ts 文件:
22 个 output-时间戳.ts
method
将 M3U8 及 TS 文件上传至 HTTP 服务器。
配置 Nginx
|
|
测试
1、输入命令:
|
|
2、输出结果:
|
|
3、输出的 M3U8 文件的内容:
|
|
4、生成的 ts 文件:
|
|