X264解码器完整帧不在一个NAL单元中

时间:2013-04-17 10:52:36

标签: video h.264 libx264

我使用libX264库进行编码。编码后的数据是以NAL单位().....的形式。这是我需要的相同格式(AVC)但问题是一帧进入两个Nal单位(一帧=(长度,数据)+(长度,数据))我需要(单帧=(长度,数据)单个单位)。当我转换成文件然后播放时,它显示屏幕的第一个上半部分然后降低。我的配置参数在

之下
param.i_width = 1680//;
param.i_height = 948;
param.i_fps_num = some no;
param.i_fps_den = 1;
param.i_keyint_max = 1 ;
param.rc.i_rc_method = //;
param.rc.f_rf_constant = //;
param.rc.f_rf_constant_max = //;
param.rc.b_mb_tree = 1;
param.rc.i_vbv_max_bitrate = ; // Convert to Kbps
param.rc.i_vbv_buffer_size = param.rc.i_vbv_max_bitrate / param.i_fps_num;
param.b_repeat_headers = 0;
param.b_annexb = 0;

2 个答案:

答案 0 :(得分:1)

您能发送编码器代码吗?通常你应该有以下代码:

naluSize=x264_encoder_encode(h, &nal, &i_nal, pic, &pic_out);
if(naluSize_size>0)
{
    memcpy(Framebuffer, nal[0].p_payload, frame_naluSize);
    FrameBufferSize= frame_naluSize;
}

因此,您将在Framebuffer中拥有编码帧,其大小在FrameBufferSize中。这在我的应用程序中就像一个魅力。

另一个建议是不要触及任何你不了解的参数(至少在你解决问题之前)。只需使用

x264_param_default_preset(&param, "ultrafast", "zerolatency");

这将为您设置许多参数。当然,不要忘记设置分辨率:)

答案 1 :(得分:0)

需要更多信息以获得完整的答案,但只是一个猜测。如果第一个NALU是AUD(类型9),您可以忽略它。或者不要通过设置b_aud = 0来生成它们。