x264: использование ограничения размера NAL разрушает поток

Я использую x264 для сжатия видеопотока с веб-камеры с такими настройками:

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

param.i_threads = 1;
param.i_fps_den = 1;
param.b_annexb = 1;

param.i_keyint_max = 30;
param.rc.i_rc_method = X264_RC_CRF;
param.rc.f_rf_constant = 25;
param.rc.f_rf_constant_max = 35;

param.b_repeat_headers = 1;
x264_param_apply_profile(&param, "baseline");

param.i_slice_max_size = X264_NAL_MAX_SIZE;

Я хотел бы вписать NAL в размер MTU, но если я установлю небольшой максимальный размер, поток будет разрушен — он будет случайным образом мигать между черным и белым с некоторыми подсказками исходного изображения на заднем плане. Чем больше max_size, тем менее вероятно, что поток будет разрушен. Итак, мой вопрос — можем ли мы иметь небольшие NALU и правильный поток видео?

UPD: я использую FFmpeg в качестве декодера.

4

Решение

Проблема на самом деле не была с x264. Я предположил, что с x264 все в порядке и проверил все остальные части конвейера. Проблема была в том, что я обычно отправлял NAL по сети на декодер avcodec, что точно не может быть обработан декодером (объяснение). Мне понадобилось время, чтобы понять это.

Как только я скомпоновал блоки NAL в исходные группы, основанные на тех же кадрах, проблема исчезла. Это также объясняет, почему проблему легче воспроизвести с помощью комбинации небольших NAL и большого количества перемещений — она ​​вызвала множество отдельных NAL, которые avcodec не смог правильно декодировать.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]