UIImagePickerController: получение изображения с видео

Я пытаюсь извлечь кадр из видео в качестве изображения. Видео записывается с использованием UIImagePickerController.

Когда видео было записано, я получаю его URL-адрес и загружаю его с помощью AVURLAsset. Затем я создаю AVAssetReader и AVAssetReaderTrackOutput для получения отдельных кадров.

Когда я получаю фреймы как CMSampleBufferRef, я передаю их методу imageFromSampleBuffer от Apple, который должен вернуть UIImage. Этот метод работал отлично, когда я получал кадры с использованием AVCaptureSession, но когда я использую видео, записанное через UIImagePickerController, тогда эта строка возвращает 0x0:

CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 

Где sampleBuffer – это CMSampleBufferRed, который я передаю.

Я проверил значение sampleBuffer через отладчик, и он выглядел нормально (не был 0x0). Есть ли причина, по которой CMSampleBufferGetImageBuffer вернет 0x0?

Или, альтернативно, есть другой способ извлечь один видеокадр из файла MOV и сохранить его как UIImage?

Благодарю.

Я нашел решение. Вы должны установить формат пикселей в настройках, переданных при инициализации AVAssetReaderTrackOutput.

Я передал следующий словарь настроек:

 NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey; NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]; NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key]; 

Надеюсь, это помогает кому-то другому.

Interesting Posts
Давайте будем гением компьютера.