ffmpeg转HLS参数介绍(ffmpeg转m3u8参数)

2024-01-08 09:29:08

参考文章:.m3u8播放列表文件(索引格式文件)、HLS(HTTP Live Streaming)协议介绍

参考文章:ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第三章:FFmpeg转封装——视频文件转M3U8(转HLS)

FFmpeg转HLS参数详解

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。本文中,我们将介绍使用FFmpeg进行HLS (HTTP Live Streaming) 转码的相关参数。

1. 基础命令

在介绍参数之前,需要理解基础的FFmpeg命令行语法:

ffmpeg -i input.mp4 output.m3u8

这是一个最简单的示例,将MP4文件转换为HLS流。-i 是输入文件的标志,后面紧跟着的是输入文件的路径。

2. HLS相关参数

以下是一些与HLS转换相关的重要参数:

-hls_time

此选项设置每个HLS分片的最大持续时间(以秒为单位)。默认值为2秒。例如,-hls_time 10 将使每个分片的持续时间为10秒。

-hls_list_size

此选项设置播放列表中保存的最大分段数量。默认情况下,所有分段都会保留。如果设置为0,那么将不再生成新的播放列表文件,而是覆盖旧的文件。例如,-hls_list_size 5 将只保留最新的5个分段。

-hls_wrap

此选项确定当分段索引达到hls_list_size所设置的大小时,是否开始覆盖旧的分段文件。例如,-hls_wrap 10 将在生成10个分段后开始覆盖最早的分段。

-hls_flags

此选项允许用户设置各种HLS标志。例如:

  • delete_segments:删除过时的分段。
  • append_list:在现有列表而不是新列表中添加新分段。

3. 高级参数

一些高级的FFmpeg参数可以更精细地控制HLS流的转换:

-start_number

此选项用于设置播放列表中首个媒体分段的序列号。例如,-start_number 100 将使首个分段的序列号为100。

-start_number是ffmpeg在转换视频到HLS格式时使用的一个参数。这个参数主要用来指定生成的HLS切片的起始索引号。

例如,如果你设定 -start_number 0,那么生成的第一段切片文件名可能会是fileSequence0.ts,然后是fileSequence1.ts,以此类推。

如果你设定 -start_number 100,那么生成的第一段切片文件名可能会是fileSequence100.ts,然后是fileSequence101.ts,以此类推。

这个参数对于某些特定场景非常有用,比如你希望继续一个已经存在的HLS流,并且不希望覆盖已经存在的切片。

-hls_allow_cache

此选项指定是否允许客户端缓存媒体分段。例如,-hls_allow_cache 0 将禁止客户端缓存分段。(但事实上似乎无法禁用,用户想缓存时仍然可以缓存)

-hls_key_info_file

如果你需要对HLS进行加密,这个参数可以指定一个包含秘钥信息的文件。例如,-hls_key_info_file key_info.txt 将使用该文本文件中的秘钥信息对HLS流进行加密。

-hls_base_url

此选项可以为所有分段URL添加一个前缀。例如,-hls_base_url http://myserver.com/ 将会把这个URL加到m3u8文件中每个分片的前面。

使用场景

-hls_base_url http://myserver.com/

这个有什么用?如果我用nginx代理,根本不需要网络url前缀啊,这个是在什么场景下需要把网络url拼凑在前面?

-hls_base_url 参数在一些特殊的应用场景下会很有用。其主要作用是在生成的 .m3u8 文件中,为每个分片的 URI 添加一个基础 URL 前缀。

假设你的流媒体服务器和你的内容分发网络(CDN)不在同一个地方,或者你需要将 HLS 分片放在不同的域名或服务器上,这时候 -hls_base_url 就非常有用了。例如,你可以把所有的 .ts 文件上传到 CDN 或者云存储服务,然后在 .m3u8 播放列表文件中,使用完整的 URL(包含 http://mycdn.com/ 前缀)来引用这些 .ts 文件。这样,客户端播放器就可以直接从 CDN 或云服务上获取分片,而不是从你的原始流媒体服务器获取。

另外,如果你的应用需要跨域访问 HLS 流,那么 -hls_base_url 参数也会非常有用。因为在同源策略下,Web
页面只能获取和其自身同源的资源,如果需要获取其他源的资源,就需要使用完整的 URL。

所以,即使你使用 nginx 代理,有些情况下也可能需要使用 -hls_base_url 参数。

-hls_playlist_type

此选项设置播放列表类型。例如,-hls_playlist_type vod 将生成点播(VOD)样式的播放列表。另一个选项是 event,它将生成一个"live"样式的播放列表,但如果新的分片被添加,旧的不会被删除。

-hls_segment_filename

此选项允许用户指定分段文件的命名模式。例如,-hls_segment_filename 'segment%d.ts' 将使用给定的模式为分段文件命名。

-hls_flags single_file

此选项使得所有媒体数据都被写入一个单独的分段文件,同时生成一个与之配套的索引文件。这可以避免产生大量的小文件。

-hls_flags independent_segments

此选项强制每个分段文件都从新的关键帧开始,这样可以确保每个分段文件都可以独立解码。

-hls_flags discont_start

此选项使播放列表以EXT-X-DISCONTINUITY标签开始,这在有广告插入等情况下可能很有用。

文章来源:https://blog.csdn.net/Dontla/article/details/135429127
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。