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?

Благодарю.

One Solution collect form web for “UIImagePickerController: получение изображения с видео”

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

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

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

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

  • AVPlayer seekToTime: не использует буфер
  • AVPlayerItem не может быть связан с несколькими экземплярами AVPlayer '
  • Декодирование видео с помощью CoreMedia.framework на iOS
  • Запись пользовательского наложения на iPhone
  • Как загрузить видео на Vine программно на iOS?
  • copyNextSampleBuffer после того, как приложение вернется с фона на iPhone
  • Это хорошая идея использовать HLS для коротких видеороликов (максимум 15 секунд)?
  • Воспроизведение видеофайла с сервера в Swift
  • RTMP-поток на iOS
  • Можно ли программно захватить видео с замедленным движением iPhone 5S?
  • Используйте фон «Видео как Landing» (как показано в Spotify, Twitter или Vine)
  • Interesting Posts

    Обрезать конец строки в swift, получить ошибку во время выполнения

    Изменить изображение на MKMapView в Swift

    Неопределенные символы для архитектуры i386 при построении приложения Cordova 3.4

    Включение кнопки завершения после вставки одного символа в текстовое поле: textFieldDidEndEditing: или textFieldShouldBeginEditing: или?

    Сохранение фильма UIImagePickerController в каталоге temp

    wkwebview solvePolicyForNavigationAction – вызов после того,

    Представление UIImageJPEG и представление UIImagePNGR являются медленными

    Наследование протоколов + делегаты в Swift

    Проблема с памятью ZBarReaderViewController в iOS 7

    startMonitoringForRegion в iPhone Simulator

    clipsToBounds заставляет UIImage не отображаться в iOS10 и XCode 8

    Компиляция реализации heimdal kerberos 5 в статическую библиотеку C для iOS

    Переопределить AppleLanguages ​​в NSUserDefaults

    Как я могу получить переменную окружения из Xcode в моем приложении

    Получить содержимое XML с помощью библиотеки AFNetworking

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.