Код ошибки -8969, -12909 при декодировании h264 в iOS 8 с помощью панели инструментов для видео

У меня есть формат h264 в формате InAnnex B и следуйте этой ссылке здесь, чтобы реализовать декодирование h264 с помощью iOS8 videoToolBox.

Я проверяю OSStatus на каждом шагу.

  • использовать CMVideoFormatDescriptionCreateFromH264ParameterSets с данными SPS и PPS для создания CMFormatDescription. (status == noErr)

  • создать VTDecompressionSession, используя VTDecompressionSessionCreate. (статус == noErr)

  • захватить полезную нагрузку NALUnit в CMBlockBuffer, убедившись, что замените стартовый код на
    код длины байта. (статус == noErr)

  • создать CMSampleBuffer. (статус == noErr)

  • используйте VTDecompressionSessionDecodeFrame и получите код ошибки -8969 (симулятор), -12909 (устройство) в функция обратного вызова.

Я сомневаюсь, что я сделал что-то неправильно на шаге 3, я не совсем уверен, что означает код длины. Я просто следую за видеозаписью WWDC, заменяя каждый начальный код NALUnit 00 00 00 01 00 00 80 00. Правильно это или нет? или я должен проверить что-то еще?? спасибо

Ответ 1

Наконец, теперь он работает. Итак, я расскажу о том, как использовать videoToolbox для декодирования данных потока h.264, чем показ на экране.

  • получить SPS, PPS формировать данные потока H.264.
  • создать CMFormatDescription с помощью CMVideoFormatDescriptionCreateFromH264ParameterSets.
  • создайте VTDecompressionSession, используя VTDecompressionSessionCreate.
  • получить полезную нагрузку NALUnit в CMBlockBuffer.
  • замените начальный код на 4-байтовый код длины. (ps: length = NALUnit length - длина начального кода)
  • создать CMSampleBuffer с помощью CMSampleBufferCreate.
  • используйте VTDecompressionSessionDecodeFrame и получите результат от обратного вызова.

тогда вы должны использовать dispatch_semaphore_t для управления декодированием кадра и показом. Я загружаю образец проекта на моем git. надеемся помочь кому-то другому.