Декодирование H264 на iOS - почему kVTDecodeFrame_EnableAsynchronousDecompression дает искаженные изображения при использовании в VTDecompressionSessionDecodeFrame? - PullRequest
0 голосов
/ 08 апреля 2019

Я последовал прекрасному описанию NALU и примеру, чтобы декодировать поток h264, используя VTDecompressionSessionCreate и VTDecompressionSessionDecodeFrame, отсюда:

Как использовать VideoToolbox для распаковки видеопотока H.264

В целях тестирования я использую кодировщик так же, как использую декодер, поэтому я в основном подаю выход кодера прямо в декодер. Немного покопавшись с форматом, я заставил его работать, но есть одна неприятная проблема:

VTDecodeFrameFlags flags = kVTDecodeFrame_EnableAsynchronousDecompression;

создает искаженные изображения:

distorted

пока просто устанавливается флаг nil или что-то еще работает:

ok

У меня мало опыта работы с кодировщиками и декодерами, но я предполагаю, что флаг позволяет переупорядочивать NALU внутри, что вызывает некоторое плохое поведение. Это правильно и предназначено, и как правильно поступить с таким поведением? Или сформулировать это иначе: чего мне не хватает? Независимо от того, есть ли у меня этот флаг, мой декодер не выдает никакой ошибки и просто утверждает, что все в порядке.

...