0

我正在使用 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;
4

2 回答 2

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");

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

于 2013-10-08T10:01:17.483 回答
0

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

于 2013-07-12T23:59:30.840 回答