ffmpeg的转码延时测试与设置优化
2016-07-13 22:12
344 查看
我测试了下ffmpeg直播流的转码延时,这些参数对文件的转码也是通用的;
测试环境:
. ffmpeg 版本为v3.0.2
. 从同一台服务器拉流,转码再推送到同一台服务器上,这样减少了服务器与网络影响;
. 播放器使用实时模式,不缓冲
1. 设置slow参数
$ ./ffmpeg -i rtmp://192.168.1.12/live/src -vcodec libx264 -preset slow -b:v 400k -s 720x576 -r 25
-acodec libfaac -b:a 64k -f flv rtmp://192.168.1.12/live/dst
设置了这个参数(-preset slow)后,延时大概在10.6 -- 12.1 秒,
但它的图像质量会好
Fig-1 slow-3
2. 不设置优化参数
ffmpeg命令行:
$ ./ffmpeg -i rtmp://192.168.1.12/live/src -vcodec libx264 -b:v 400k -s 720x576 -r 25
-acodec libfaac -b:a 64k -f flv rtmp://192.168.1.12/live/dst
延时大概在1.6 -- 2.6秒
Fig-2 no-setting-3
3.设置fast参数
ffmpeg命令行:
$ ./ffmpeg -i rtmp://192.168.1.12/live/src -vcodec libx264 -preset fast -b:v 400k -s 720x576 -r 25
-acodec libfaac -b:a 64k -f flv rtmp://192.168.1.12/live/dst
延时大概在2.1 -- 2.2秒
Fig-3 fast-2
4. 设置ultrafast参数
ffmpeg命令行:
$ ./ffmpeg -i rtmp://192.168.1.12/live/src -vcodec libx264 -preset ultrafast -b:v 400k -s 720x576 -r 25
-acodec libfaac -b:a 64k -f flv rtmp://192.168.1.12/live/dst
这样设置后延时会大大减小,但图像质量会变差得很明显;
延时大概在0.6 -- 0.8 秒
Fig-4 ultrafast-3
5. 设置zerolatency和ultrafast参数
ffmpeg命令行:
$ ./ffmpeg -i rtmp://192.168.1.12/live/src -tune zerolatency -vcodec libx264 -preset ultrafast -b:v 400k -s 720x576 -r 25
-acodec libfaac -b:a 64k -f flv rtmp://192.168.1.12/live/dst
这样设置后延时还会减小,但图像质量会变差得很明显;
延时大概在0.2 -- 0.6 秒
Fig-5 zerolatency-ultrafast-2
总结:
ffmpeg设置转码延时的参数和步骤如下:
. 关闭sync-lookahead
. 降低rc-lookahead,但别小于10,默认是-1
. 降低threads(比如从12降到6)
. 禁用rc-lookahead
. 禁用b-frames
. 缩小GOP,
. 开启x264的 -preset fast/faster/verfast/superfast/ultrafast参数
. 使用-tune zerolatency 参数
测试环境:
. ffmpeg 版本为v3.0.2
. 从同一台服务器拉流,转码再推送到同一台服务器上,这样减少了服务器与网络影响;
. 播放器使用实时模式,不缓冲
1. 设置slow参数
$ ./ffmpeg -i rtmp://192.168.1.12/live/src -vcodec libx264 -preset slow -b:v 400k -s 720x576 -r 25
-acodec libfaac -b:a 64k -f flv rtmp://192.168.1.12/live/dst
设置了这个参数(-preset slow)后,延时大概在10.6 -- 12.1 秒,
但它的图像质量会好
Fig-1 slow-3
2. 不设置优化参数
ffmpeg命令行:
$ ./ffmpeg -i rtmp://192.168.1.12/live/src -vcodec libx264 -b:v 400k -s 720x576 -r 25
-acodec libfaac -b:a 64k -f flv rtmp://192.168.1.12/live/dst
延时大概在1.6 -- 2.6秒
Fig-2 no-setting-3
3.设置fast参数
ffmpeg命令行:
$ ./ffmpeg -i rtmp://192.168.1.12/live/src -vcodec libx264 -preset fast -b:v 400k -s 720x576 -r 25
-acodec libfaac -b:a 64k -f flv rtmp://192.168.1.12/live/dst
延时大概在2.1 -- 2.2秒
Fig-3 fast-2
4. 设置ultrafast参数
ffmpeg命令行:
$ ./ffmpeg -i rtmp://192.168.1.12/live/src -vcodec libx264 -preset ultrafast -b:v 400k -s 720x576 -r 25
-acodec libfaac -b:a 64k -f flv rtmp://192.168.1.12/live/dst
这样设置后延时会大大减小,但图像质量会变差得很明显;
延时大概在0.6 -- 0.8 秒
Fig-4 ultrafast-3
5. 设置zerolatency和ultrafast参数
ffmpeg命令行:
$ ./ffmpeg -i rtmp://192.168.1.12/live/src -tune zerolatency -vcodec libx264 -preset ultrafast -b:v 400k -s 720x576 -r 25
-acodec libfaac -b:a 64k -f flv rtmp://192.168.1.12/live/dst
这样设置后延时还会减小,但图像质量会变差得很明显;
延时大概在0.2 -- 0.6 秒
Fig-5 zerolatency-ultrafast-2
总结:
ffmpeg设置转码延时的参数和步骤如下:
. 关闭sync-lookahead
. 降低rc-lookahead,但别小于10,默认是-1
. 降低threads(比如从12降到6)
. 禁用rc-lookahead
. 禁用b-frames
. 缩小GOP,
. 开启x264的 -preset fast/faster/verfast/superfast/ultrafast参数
. 使用-tune zerolatency 参数
相关文章推荐
- 使用Python控制IE访问网站
- 关于提升留存率,你需要知道这些
- Spring mvc整合freemarker详解
- Spring mvc整合freemarker详解
- Spring mvc整合freemarker详解
- struts2 模型驱动
- iOS开发遇到的错误 -- Label显示多行文字导致宽度和高度的问题
- 工作
- H5截取当前网页
- IOS OC声明变量在@interface括号中与使用@property的区别
- VB程序学习代码记录20160713
- poj3254
- UIScrollView添加子控件约束的一些小总结
- 如何玩转andriod远控(androrat)
- L2-005. 集合相似度(set)
- (6) ebj学习:ejb使用jpa注解
- 剑指offer 3题 【数组】二维数组中的查找
- Python扫描指定目录下(包括子目录)的文件
- 公开课视频-《第07章 部署-VMware-应用程序虚拟化-ThinApp 5.1.1》
- Java多线程-生产消费者2