X264 : Как получить доступ к блокам NAL из кодировщика?

Когда я звоню

frame_size = x264_encoder_encode(encoder, &nals, &i_nals, &pic_in, &pic_out);

и впоследствии запишите каждый NAL в такой файл:

     if (frame_size >= 0)
     {
        int i;
        int j;

        for (i = 0; i < i_nals; i++)
        {
           printf("******************* NAL %d (%d bytes) *******************\n", i, nals[i].i_payload);
           fwrite(&(nals[i].p_payload[0]), 1, nals[i].i_payload, fid);
        }
     }

тогда я понимаю это

Начало файла NAL

Мои вопросы:

1) Это нормально, что в начале файла есть читаемые параметры?

2) Как настроить кодировщик X264, чтобы кодировщик возвращал кадры, которые я могу отправлять по UDP без фрагментации пакета (размер должен быть ниже 1390 или где-то около этого).

3) С помощью x264.exe я передаю следующие параметры:

"--threads 1 --profile baseline --level 3.2 --preset ultrafast --bframes 0 --force-cfr --no-mbtree --sync-lookahead 0 --rc-lookahead 0 --keyint 1000 --intra-refresh" 

Как сопоставить их с настройками в структуре параметров X264? (x264_param_t)

4) Мне сказали, что статическая библиотека x264 не поддерживает ввод растрового изображения в кодировщик и что я должен использовать libswscale для преобразования входного 24-битного растрового изображения RGB в YUV2. Кодер, якобы, принимает на вход только YUV2? Это правда? Если да, то как мне собрать libswscale для статической библиотеки x264?


person user1884325    schedule 18.04.2014    source источник


Ответы (1)


1) Да. x264 включает автоматически. Это кусочек SEI, и вы можете его выбросить, если хотите.

2) установить i_slice_max_size = 1390

3) Взгляните на x264_param_t в x264.h. Настройки достаточно понятны. Что касается настройки профиля и предустановленного вызова int x264_param_apply_profile( x264_param_t *, const char *profile ) и int x264_param_default_preset( x264_param_t *, const char *preset, const char *tune )

4) Да, это правда, я хочу соврать, когда сказал это. Посмотрите в Интернете/на переполнении стека есть миллион ресурсов по компиляции ffmpeg. На самом деле, если вы скомпилировали x264 с поддержкой avcodec, он уже есть в вашей системе.

5) Да!, вы должны быть хорошим гражданином переполнения стека, голосовать и принимать ответы от людей, которые жертвуют там свободное время и знания (на приобретение которых уходят годы), чтобы помочь вам.

person szatmary    schedule 18.04.2014
comment
Спасибо!! Я ценю ваши ответы, поскольку вы, кажется, очень хорошо разбираетесь в x264. Я не смог проголосовать за ваши предыдущие ответы, так как они были комментариями (а не ответами)... но я проголосовал за ваш ответ здесь :-) Когда я установил для i_slice_max_size значение 1390, вызов кодировщика приводит к исключению. Не могли бы вы привести пример того, как должны быть установлены параметры, чтобы кодировщик выдавал кадры длиной не более 1390? Я хочу транслировать видео X264 через UDP. А также, не могли бы вы указать мне на некоторые документы, которые объясняют, как скомпилировать статическую библиотеку x264 с поддержкой avcodec? - person user1884325; 19.04.2014
comment
Если я скомпилирую x264 с поддержкой avcodec, будет ли статическая библиотека иметь встроенную функцию swscale api? (Я не вижу заголовочного файла для этого нигде в исходном архиве x264.) ... Извините, я новичок в этом деле. - person user1884325; 19.04.2014