2013-04-17 4 views
0

Я использую библиотеку libX264 для кодирования. После того, как данные кодирования находятся в форме NAL Unit() ...... Это тот же формат (AVC), что мне нужно, но проблема заключается в том, что один кадр состоит из двух блоков Nal (один кадр = (длина, данные) + (длина, данные)), и мне нужно (один кадр = (длина, данные) в единичной единице). Пока я конвертирую в файл, тогда играю, он показывает первую верхнюю часть экрана, а затем ниже. Мой параметр конфигурации находится нижеX264 Декодер полный кадр не входит в один блок 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; 

ответ

0

Нужна дополнительная информация для получения полного ответа, но это всего лишь предположение. Если первый NALU является AUD (тип 9), вы можете его игнорировать. Или не генерировать их в первую очередь, установив b_aud = 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"); 

Это установит для вас множество параметров. Конечно, не забудьте установить разрешение :)