Я хочу удалить поврежденные кадры H.264, но мне не удалось этого добиться. Я пробовал устанавливать флаги после создания контекста, а также использовать параметры, но ни один из методов не сработал, и я все еще вижу поврежденные кадры. примеры в Интернете демонстрируют это с контекстом формата, но в моем случае я передаю байтовый поток непосредственно из сокета.
Версия с опциями
Код: Выделить всё
ffmpeg.av_dict_set(&options, "fflags", "discardcorrupt", 0);
var ret = ffmpeg.avcodec_open2(_CodecContext, _decodingCodec, &options);
ffmpeg.av_dict_free(&options);
Версия флагов
Код: Выделить всё
var ret = ffmpeg.avcodec_open2(_CodecContext, _decodingCodec, null);
_CodecContext->flags |= ffmpeg.AV_FRAME_FLAG_DISCARD;
Я хочу избежать таких ошибок, как:
Код: Выделить всё
[h264 @ 000001fb6302dfc0] decode_slice_header error
[h264 @ 000001fb6302dfc0] decode_slice_header error
[H264 Decoder @ 000001fb70778740] Broken frame packetizing
[h264 @ 000001fb6302dfc0] illegal short term buffer state detected
Либо avcodec_send_packet, либо avcodec_receive_frame возвращают ошибку, возвращаемое значение всегда равно 0. В настоящее время я не могу это уловить и не хочу использовать глобальную проверку журнала, потому что может случиться так, что у меня есть 16 экземпляров для моего декодер. (сетка видеонаблюдения). Я использую ffmpeg.autogen (С#)
Подробнее здесь:
https://stackoverflow.com/questions/791 ... odec-open2