ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -2 -f hls output.m3u8
默认的每片长度为2秒,m3u8文件中默认只保存最新的5条片的信息,导致最后播放的时候只能播最后的一小部分。
-hls_time n: 设置每片的长度,默认值为2。单位为秒
-hls_list_size n:设置播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5
-hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0.这个选项能够避免在磁盘上存储过多的 片,而且能够限制写入磁盘的最多的片的数量
-hls_start_number n:设置播放列表中sequence number的值为number,默认值为0
注意:播放列表的sequence number 对每个segment来说都必须是唯一的,而且它不能和片的文件名(当使用wrap选项时,文件名有可能会重复使用)混淆
hls
Apple HTTP 直播流混合器,它根据HTTP直播流(HLS)规范进行MPEG-TS分割
它创建一个播放列表文件,包括1个或者多个分段文件,输出文件为指定的播放列表文件。
默认混合器对每段创建一个文件,这些文件有相同的基于播放列表的文件名,段索引数和.tx扩展名
例如,转一个输入文件:
ffmpeg -i in.nut out.m3u8
这将根据产品播放列表文件out.m3u8产生分段文件:out0.ts out1.ts out2.ts 等等
参考[segment]混合器,它提供了更多可用于HTL分割的常规处理和修正介绍
hls选项
这个混合器支持如下选项
-
hls_time seconds
设置段长度,单位秒,默认为2
-
hls_list_size size
设置播放列表中字段最大数。如果为0,则包含所有分段。默认为5
-
hls_ts_options options_list
设置输出格式选项,使用'-'分割的
key=value
参数对,如果包括特殊字符需要被转义处理 -
hls_wrap wrap
一种循环机制,设置数量后以0-设定数形成一个环依次循环使用作为输出段号.为0表示不限制, 默认为0
选项可避免磁盘被多个段文件填满,并限制写入磁盘的最大文件数
-
start_number number
设置播放列表中最先播放的索引号,默认 0.
-
hls_allow_cache allowcache
设置客户端是否:可能(1) 或 必须不 (0) 缓冲媒体段
-
hls_base_url baseurl
对每个列表中的记录添加一个基本的URL,一般用于采用相对路径描述的列表
注意列表序号必须是每段独特的,不可分割的文件名和序列号,序列号是可循环的,则可能会引起困惑,例如hls_wrap选项设置了
-
hls_segment_filename filename
设置段文件名。除非
hls_flags
single_file
被设置,设置这个文件名可以用于段命名格式化(依据段序数):ffmpeg in.nut -hls_segment_filename 'file%03d.ts' out.m3u8
这个例子中,段文件会输出为: file000.ts, file001.ts, file002.ts, 等等,而不是默认的out0.ts out1.ts out2.ts 等等
-
hls_key_info_file key_info_file
使用key_info_file对段进行加密。
key_info_file
中的第一行指定一个URI,是写入播放列表的,这个key URL被用于存放播放期访问的加密密钥。第二行指定用于加密过程中的key文件路径。key文件作为一个单一排列的16进制数组以二进制格式数据读入。可选的第三行则指定初始化向量(IV,一个十六进制字符串用于代替部分序列(默认)进行加密)。改变key_info_file将导致段加密采用新的key/IV 以及播放列表中任意条目采用新的 URI/IVkey_info_file 格式:
key URI
key file path
IV (optional)
key URIs 例子:
http://server/file.key
/path/to/file.key
file.key
key文件路径例子:
file.key
/path/to/file.key
IV例子:
0123456789ABCDEF0123456789ABCDEF
完整key_info_file 示例:
http://server/file.key
/path/to/file.key
0123456789ABCDEF0123456789ABCDEF
shell脚本例子:
#!/bin/sh
BASE_URL=${1:-'.'}
openssl rand 16 > file.key
echo $BASE_URL/file.key > file.keyinfo
echo file.key >> file.keyinfo
echo $(openssl rand -hex 16) >> file.keyinfo
ffmpeg -f lavfi -re -i testsrc -c:v h264 -hls_flags delete_segments \
-hls_key_info_file file.keyinfo out.m3u8
-
hls_flags single_file
如果这个标记被设置,则会把所有段存储到一个MPEG-TS文件中,且在播放列表中使用字节范围。 HLS播放列表在版本4中支持这种方法:
ffmpeg -i in.nut -hls_flags single_file out.m3u8
这里所有的输出都放置在out.ts中了
-
hls_flags delete_segments
在播放的段已经过了持续时间后就删除掉对应的文件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库