Я последовал прекрасному описанию NALU и примеру, чтобы декодировать поток h264, используя VTDecompressionSessionCreate
и VTDecompressionSessionDecodeFrame
, отсюда:
Как использовать VideoToolbox для распаковки видеопотока H.264
В целях тестирования я использую кодировщик так же, как использую декодер, поэтому я в основном подаю выход кодера прямо в декодер. Немного покопавшись с форматом, я заставил его работать, но есть одна неприятная проблема:
VTDecodeFrameFlags flags = kVTDecodeFrame_EnableAsynchronousDecompression;
создает искаженные изображения:
пока просто устанавливается флаг nil
или что-то еще работает:
У меня мало опыта работы с кодировщиками и декодерами, но я предполагаю, что флаг позволяет переупорядочивать NALU внутри, что вызывает некоторое плохое поведение. Это правильно и предназначено, и как правильно поступить с таким поведением? Или сформулировать это иначе: чего мне не хватает? Независимо от того, есть ли у меня этот флаг, мой декодер не выдает никакой ошибки и просто утверждает, что все в порядке.