ffmpeg+x264应该如何降低编码时延呢?

mstlq 2011-10-08 05:07:21

原来我使用ffmpeg FULL SDK V3.2进行h264编码的时候,发现avcodec_encode_video函数输出的延时仅仅跟max_b_frames的设置有关,我想进行实时编码,将max_b_frames设置为0便没有编码延时了。

最近使用ffmpeg0.8.1+x264(115版本),却发现当bframes=3 thread=1时,编码器会有41帧的时延。请问是否可以通过对AVCodecContext进行设置的方式来降低时延现象?

附上av_dump_format的输出
[libx264 @ 003D6700] Default settings detected, using medium profile
[libx264 @ 003D6700] using cpu capabilities: MMX2 SSE2Fast FastShuffle SSEMisali
gn LZCNT
[libx264 @ 003D6700] profile High, level 1.3
[libx264 @ 003D6700] 264 - core 115 r2008 4c552d8 - H.264/MPEG-4 AVC codec - Cop
yleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deb
lock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 m
e_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chro
ma_qp_offset=-2 threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_c
ompat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 we
ightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=
0 rc_lookahead=40 rc=cbr mbtree=1 bitrate=100 ratetol=1.0 qcomp=0.60 qpmin=0 qpm
ax=69 qpstep=4 vbv_maxrate=100 vbv_bufsize=100 nal_hrd=none ip_ratio=1.40 aq=1:1
.00


此外我还遇到gop_size与max_b_frames设置无效的怪现象,还请各位不吝解惑
http://topic.csdn.net/u/20111008/16/3b662155-261e-4ab6-a83c-fdac27170ea9.html?3380
...全文
3259 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhing0 2014-03-04
  • 打赏
  • 举报
回复
引用 9 楼 houyuxin2011 的回复:
[quote=引用 5 楼 toshiba689 的回复:] 缓存40来帧大概也是延迟1.6秒,延时不算太长,最主要是怎么保证音视频同步。
5#兄弟,你说的这个,怎么解决啊?谢谢[/quote] 看下这篇文章应该对你有帮助 http://blog.csdn.net/ymsdu2004/article/details/8565822
houyuxin2011 2014-03-04
  • 打赏
  • 举报
回复
引用 5 楼 toshiba689 的回复:
缓存40来帧大概也是延迟1.6秒,延时不算太长,最主要是怎么保证音视频同步。
5#兄弟,你说的这个,怎么解决啊?谢谢
mstlq 2013-06-25
  • 打赏
  • 举报
回复
居然忘了这帖子还没结,回6楼,当初我是靠改ffmpeg中libx264.c的代码实现的 7楼的方法可行,比我直接修改ffmpeg源码更好 不过我当时用的ffmpeg是0.8版,对应的api是av_set_string3
KeequenLiu 2013-06-18
  • 打赏
  • 举报
回复
/** * ultrafast,superfast, veryfast, faster, fast, medium * slow, slower, veryslow, placebo. 这是x264编码速度的选项 */ av_opt_set(m_context->priv_data,"preset","ultrafast",0);
老衲爱上树 2013-06-03
  • 打赏
  • 举报
回复
请问楼主如何解决这个问题的
toshiba689 2012-05-18
  • 打赏
  • 举报
回复
缓存40来帧大概也是延迟1.6秒,延时不算太长,最主要是怎么保证音视频同步。
fancycow 2011-12-14
  • 打赏
  • 举报
回复
楼主是高手,最近被h264搞的郁闷。看看楼主的文章,有点启发,继续调
mstlq 2011-10-11
  • 打赏
  • 举报
回复
经过调试,发现是rc-lookahead参数导致
关于实时编码的参数设置,请问大家有什么好的经验吗
快乐的小菜鸟 2011-10-08
  • 打赏
  • 举报
回复
汗 没注意 是mstlq大牛 帮顶 菜鸟也只能帮忙顶一下了
mstlq 2011-10-08
  • 打赏
  • 举报
回复
http://x264-settings.wikispaces.com/x264_Encoding_Suggestions
于上面网页得到下面的介绍:
[Quote]
降低x264的延时是可能的,但是会降低质量。若需零延时,设置--tune zerolatency。若小延时(如小于1秒)可以接受,最好还是允许延时。下列步骤可以降低延迟,当延迟足够小时,就别再进行后续步骤了:

从初始值开始
关闭sync-lookahead
降低rc-lookahead,但别小于10
降低threads(比如从12降到6)
使用切片线程(sliced threads)
禁用rc-lookahead
禁用b-frames
实在不行,就用--tune zerolatency
[/Quote]

请问有直接在代码中修改ffmpeg中的AVCodecContext的方案吗?

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧