Код ошибки -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. надеемся помочь кому-то другому.