Я пытаюсь использовать libx264 для преобразования кадров YUV 420 в H264, согласно этому вопросу: ( Как можно кодировать серию изображений в H264 с помощью API x264 C? ), который я получил мои параметры энкодера настроены, и мой энкодер инициализирован, часть, которая меня смущает, - это как передать энкодеру данные YUV420, которые у меня есть? Приведенный выше вопрос показывает, как данные будут передаваться и преобразовываться из RGB в YUV420.
Меня также смущает вопрос о том, какие шаги, плоскости и nalls находятся в библиотеке x264, и любое их объяснение будет с благодарностью. Я очень новичок в C ++ и обработке видео в целом.
Код, который у меня есть в настоящее время, размещен ниже. Данные YUV420, которые я имею, представляют собой беззнаковый символ *, называемый данными, которые объявлены вне функции. Кроме того, текущее разрешение снимаемых кадров составляет 640x480
void encode(){
x264_param_t param;
x264_param_default_preset(¶m,"veryfast","zerolatency");
param.i_threads = 1;
param.i_width = camera.getWidth();
param.i_height = camera.getHeight();
param.i_fps_num = 30;
param.i_fps_den = 1;
// Intra refres:
param.i_keyint_max = 30;
param.b_intra_refresh = 1;
//Rate control:
param.rc.i_rc_method = X264_RC_CRF;
param.rc.f_rf_constant = 25;
param.rc.f_rf_constant_max = 35;
//For streaming:
param.b_repeat_headers = 1;
param.b_annexb = 1;
x264_param_apply_profile(¶m, "baseline");
x264_t *encoder = x264_encoder_open(¶m); //H.264 encoder object
x264_picture_t pic_in, pic_out;
x264_picture_alloc(&pic_in, X264_CSP_I420,camera.getWidth(), camera.getHeight());
x264_nal_t *nals; //What is the purpose of nals?
int i_nals;
//Im constantly getting frames captured from the camera that I need to encod
while(true){
//Im assuming the data would have to be placed within the pic_in pointer some how?
int frame_size = x264_encoder_encode(encoder, &nals, &i_nals, &pic_in, &pic_out);
if (frame_size >= 0) {
std::cout<<"Encoded frame to h264!" << std::endl;
}
}
}
Также, если кто-то может прокомментировать жизнеспособность этой настройки для потоковой передачи видео, конечным результатом этого проекта является потоковая передача захваченного и преобразованного h264. кадры по UDP для всего, что в сети для чтения и отображения.
Любая помощь будет принята с благодарностью!