Как установить AV_FRAME_FLAG_DISCARD с помощью avcodec_open2C#

Место общения программистов C#
Ответить
Anonymous
 Как установить AV_FRAME_FLAG_DISCARD с помощью avcodec_open2

Сообщение Anonymous »

Я хочу удалить поврежденные кадры 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»