Чтение видео по кадрам под iOS - PullRequest
11 голосов
/ 22 июля 2011

Я ищу способ извлечения отдельных кадров видео с помощью iOS API.Я пытался использовать AVAssetImageGenerator, но, похоже, он предоставляет только кадр с точностью до секунды, что слишком грубо для моего использования.

Из того, что я понимаю в документации, конвейер AVAssetReader, AVAssetReaderOutput и CMSampleBufferGetImageBuffer Я должен бытьв состоянии что-то сделать, но я застрял с CVImageBufferRef.В связи с этим я ищу способ получить CGImageRef или UIImage, но не нашел его.

Реальное время не требуется, и чем больше я могу придерживаться предоставленного API, тем лучше.

Большое спасибо!

Редактировать: На основе этого сайта: http://www.7twenty7.com/blog/2010/11/video-processing-with-av-foundation и этот вопрос: как конвертировать CVImageBufferRef в UIImage Я близок к решению,Проблема в том, что AVAssetReader перестает читать после первой copyNextSampleBuffer, ничего не давая мне (sampleBuffer имеет значение NULL).

Видео доступно для чтения с помощью MPMoviePlayerController.Я не понимаю, что не так.

Ответы [ 3 ]

1 голос
/ 07 сентября 2012

AVAssetImageGenerator имеет очень слабые допуски по умолчанию для точного времени захвата кадра. У него есть два свойства, которые определяют допуск: requestedTimeToleranceBefore и requestedTimeToleranceAfter. Эти допуски по умолчанию равны kCMTimePositiveInfinity, поэтому, если вы хотите точное время, установите их на kCMTimeZero, чтобы получить точные кадры.

(Точные кадры могут занять больше времени, чем приблизительные, но вы заявляете, что в реальном времени это не проблема.)

1 голос
/ 26 июля 2011

Две ссылки выше на самом деле отвечают на мой вопрос, и пустое copyNextBufferSample - это проблема с iOS SDK 5.0b3, она работает на устройстве.

0 голосов
/ 22 июля 2014

Использовать AVReaderWriter . Хотя это пример кода OS X Apple, AVFoundation доступен на обеих платформах с небольшими изменениями.

...