LINUX.ORG.RU

[ffmpeg] убрать сообщения об ошибках

 


0

1

Возможно кто-то использовал API библиотеки ffmpeg напрямую из C/C++ или как утилиту командной строки, и сталкивался с проблемой что иногда когда приходит кадр в неправильном порядке - и сыпется тонна сообщений об ошибках и сильно замедляется работа программы или потока. Например:

[h264 @ 0xf33400] Missing reference picture
[h264 @ 0xf33400] decode_slice_header error
[h264 @ 0xf33400] concealing 300 DC, 300 AC, 300 MV errors
а то и вовсе на десятки экранов...

Вопрос: как отключить сообщения об ошибках и как заставить ffmpeg возвращать ошибку декодирования сразу при первой проблеме, и не пытаться что-либо делать с кадром далее?

Или иное решение - как не допустить декодирование без предшествующего ключевого кадра? Как в потоке без контейнера определить что кадр ключевой? Я кодирую при помощи libx264 и x264_param_t param; param.b_annexb = 1; - т.е. с характерными заголовками.

Ответ на: комментарий от bk_

Ты вызываешь через ffmpeg_main(...) или дергаешь sws_* и avcodec_*?

хм... а что такое ffmpeg_main? ок, значит я использую sws_* и avcodec_* - это действительно так

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Некоторые хитрые хакеры, в том числе и я ;) встраивали весь ffmpeg в программу, а не только libav* и libsws*. И дергали изнутри функцию main() из ffmpeg.c, предварительно переименовав ее в ffmpeg_main.

bk_ ★★
()
Ответ на: комментарий от bk_

Тебе разве соответствующая функция avcodec_decode-чототам не возвращает код ошибки?

да, возвращает, но предварительно удобрив консоль тучами ошибок типа [h264 @ 0xf33400] Missing reference picture - почему бы функции decode сразу не вернуть ошибку при первой же проблеме и не тормозить выполнение кода?

далее, вопрос - как определить что кадр ключевой? я тогда просто буду ждать ключевой кадр в потоке и подобных ошибок больше я не увижу

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от bk_

Я бы просто изменил код libavcodec и убрал там логи - я так уже делал.

это вариант, только жутко хацкерский )))

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от bk_

вот смотри какая беда:

[h264 @ 0x26b7680] decode_slice_header error
[h264 @ 0x26b7680] non-existing PPS 29 referenced
[h264 @ 0x26b7680] decode_slice_header error
[h264 @ 0x26b7680] non-existing PPS 29 referenced
[h264 @ 0x26b7680] decode_slice_header error
[h264 @ 0x26b7680] non-existing PPS 29 referenced
[h264 @ 0x26b7680] decode_slice_header error
и так на десятки секунд, чуть ли не для каждого блочика оно ошибку пишет - а мне надо так: показал пару строк ошибку - и вышел, хватит пытаться декодировать

но скорее всего я буду разбираться с поиском ключевого кадра... так правильнее будет

I-Love-Microsoft ★★★★★
() автор топика

Насколько я знаю, именно эти warning-и в возврат ошибки декодирования превратить нельзя.

Далее. «Поток без контейнера». А откуда он у тебя такой, опиши. Принципиальным решением будет ессно передавать их в нормальном контейнере, и там у тебя будет AVPacket.flags AV_PKT_FLAG_KEY после демуксирования. И начинать декодить с первого ключевого кадра.

ЗЫ Лучше такие вопросы не на лоре задавать, а на IRC и в мейллисте ффмпега.

Krieger_Od ★★
()

Отключи сообщения av_log_set_level(AV_LOG_QUIET) или обрабатывай их сам av_log_set_callback(void (*)(void*, int, const char*, va_list)).

fopen ★★
()
Ответ на: комментарий от fopen

спасибо! отметил тему как решенную, скорее всего на 99% это решает мою проблему

I-Love-Microsoft ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.