繁体   English   中英

用ffmpeg解码h264流会引入延迟,如何避免?

[英]Decode h264 stream with ffmpeg introduces a delay, how to avoid?

我正在处理一些编码视频提要的代码,然后通过UDP将其发送到客户端,然后对流进行解码。 使用x264编码器可以正常工作,我唯一的问题是,当我在传入帧上调用avcodec_decode_video2时,解码器会引入延迟,就好像它具有内部缓冲区一样。 我如何避免这种情况? 是什么控制了这种行为? 是应该更改编码器,还是在解码器上下文中缺少设置? 目前,我只是使用默认的avcodec_get_context_defaults3创建解码器上下文。

编码器具有以下参数:

x264_param_t param;
x264_param_default_preset(&param, preset.c_str(), "zerolatency");
param.i_frame_reference = 1;

param.i_threads = 1;
param.b_sliced_threads = 5;
param.i_slice_max_size = 8192;
param.i_width = width;
param.i_height = height;
param.i_fps_num = 30;
param.i_fps_den = 1;
param.i_sync_lookahead = 0;

param.i_bframe = 0;
// Intra refres:
param.i_keyint_max = 30;
param.b_intra_refresh = 1;
//Rate control:
param.rc.i_rc_method = X264_RC_CRF;
param.rc.i_lookahead = 0;
param.rc.i_bitrate = bitrate;
param.rc.i_vbv_max_bitrate = bitrate;
param.rc.i_vbv_buffer_size = bitrate/30;

//For streaming:
param.b_repeat_headers = 1;
param.b_annexb = 1;

可能是您在解码过程中使用了帧线程,而这导致了帧缓冲。 我知道的唯一其他原因是使用B帧,但是您在编码过程中禁用了它。 顺便说一句“ param.b_sliced_threads = 5;” 知道b_sliced_threads是布尔值,看起来很奇怪。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM