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/IV

    key_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

    在播放的段已经过了持续时间后就删除掉对应的文件。

posted on 2021-01-26 16:42  回忆唯U你  阅读(2810)  评论(0编辑  收藏  举报