如何在生成 HLS 段的同时优化 FFMPEG h264/aac 转换

Posted

技术标签:

【中文标题】如何在生成 HLS 段的同时优化 FFMPEG h264/aac 转换【英文标题】:How to optimize the FFMPEG h264/aac conversion while generating HLS segments too 【发布时间】:2014-01-24 19:16:38 【问题描述】:

我正在使用 FFMPEG 生成 HLS 段。这是我正在使用的命令:

ffmpeg -i "rtmp://localhost/oflaDemo/33/hlsopt3 live=1" -y -c:v libx264 -b:v 1000k -vprofile baseline -preset medium -x264opts level=41 -threads 4 -s 480x360 -map 0:v -c:a libfaac -b:a 160000 -ac 1 -hls_time 3 -hls_list_size 3 -hls_wrap 10 -start_number 1 hlsopt3.m3u8

我正在使用 Ubuntu 12.04 并使用 RED5 1.0.2 作为我的流媒体服务器,我想在 androidios 设备上流式传输视频。但是设备上的播放非常不稳定,它们播放视频并不流畅。我的服务器的 CPU 利用率也超过 100%。

经过大量研究,我发现 CPU 使用率是由于 H264/mp​​eg-4 aac 转换造成的,但如果不进行转换,它将无法在 Ios 和 android 设备上播放。

所以请给我建议任何解决方案。如何在移动设备上流畅播放并节省 CPU 使用率。

请帮帮我,我在这方面已经快 10 天了。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我找到了 FFMPEG 使用 100% 的 CPU 以及为什么设备上显示的视频不流畅的原因。因为我没有提到帧率。

-r 24

ffmpeg -i "rtmp://localhost/oflaDemo/33/hlsopt6 live=1" -y -c:v libx264 \
 -b:v 1000k -r 24 -vprofile baseline -preset medium -x264opts level=41 \
 -threads 4 -s 480x360 -map 0:v -c:a libfaac -b:a 160000 -ac 1 -hls_time 3 \
 -hls_list_size 2 -hls_wrap 10 -start_number 1 hlsopt6.m3u8

现在它可以在所有设备上流畅播放,而且 FFMPEG 占用的 CPU 更少。

【讨论】:

您通常不需要声明输出帧速率:输出将简单地使用与输入相同的帧速率。 ffmpeg 将简单地丢弃或复制帧以达到您想要的输出帧速率。 是的,你是对的,但是如果通过 RED5 进行流式传输,如果我们在将 RTMP 流式视频转换为 H264/MPEG-4 Aac 时没有设置帧速率,那么视频的播放就会很不稳定。这就是为什么需要在 FFMPEG 中定义输出帧率。 我测试了你的命令。它的输出在文件上。有没有办法将 hls 输出作为提要发送到网络广播服务器? @sajad 刚刚放入您的网络服务器公用文件夹示例“/var/www/html

以上是关于如何在生成 HLS 段的同时优化 FFMPEG h264/aac 转换的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg如何存储hls文件

基于ffmpeg生成hls(代码)

ffmpeg hls_time选项不适用于h264_nvenc

使用 FFMPEG 创建 HLS 变体

将视频转换为 HLS(HTTP Live Streaming) 协议格式文件

使用 FFMPEG 下载 HLS 视频时,它不会下载音频