如何在生成 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 作为我的流媒体服务器,我想在 android 和 ios 设备上流式传输视频。但是设备上的播放非常不稳定,它们播放视频并不流畅。我的服务器的 CPU 利用率也超过 100%。
经过大量研究,我发现 CPU 使用率是由于 H264/mpeg-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_time选项不适用于h264_nvenc