Захват 60 кадров в секунду в приложении для iPhone - программирование
Подтвердить что ты не робот

Захват 60 кадров в секунду в приложении для iPhone

Я работаю над проектом, в котором мы будем использовать iPhones как камеры для захвата сцены. При записи нам нужно записывать @60 кадров в секунду, а не 30 кадров в секунду (как поддерживается на месте). Поэтому я работаю над приложением, чтобы сделать это, поскольку аппаратное обеспечение iPhone 4S поддерживает 720p @60fps (если вы джейлбрейк вашего телефона, вы можете достичь этого).

Кто-нибудь знает, как это сделать в Objective-C на iOS? Сегодня я увидел приложение там (slopro), которое может записывать 60 кадров в секунду на не с jailbroken телефонами. Любые советы или советы очень ценятся.

4b9b3361

Ответ 1

После некоторого вовлечения этот ответ разделился на две части:

Как захватить фреймы со скоростью 60 кадров в секунду

AVCaptureSessionPreset1280x720 на iPhone4s/5.1 с длительностью кадров, установленной на:

connection.videoMinFrameDuration = CMTimeMake(1, 60);*
connection.videoMaxFrameDuration = CMTimeMake(1, 60);

дает вам стабильный, супер гладкий захват.

Как захватить фреймы в файл @60fps
Захват кадров - все очень хорошо, но, по-видимому, вы хотите их сохранить.
Как отметил Брэд в комментариях, запись этих кадров в файл - это еще одна история. К сожалению, независимо от того, какие конфигурации я пытался, кодирование фреймов с помощью AVAssetWriter заставило скорость захвата упасть до наблюдаемого ~ 37 кадров в секунду, и никакое количество возиться с alwaysDiscardsLateVideoFrames не могло его изменить. Тем не менее, в этом подходе каждый отдельный кадр копируется из AVFoundation в ваше приложение, а затем обратно, что совершенно бессмысленно и очень носят для шины. К счастью, AVFoundation имеет класс, который удаляет это путешествие в оба конца: AVCaptureMovieFileOutput.

Если вы дадите AVFoundation сделать запись для вас, тогда iPhone4S сможет захватывать и кодировать кадры + аудио в файл .mov со скоростью 60 кадров в секунду *, не разбивая пот (~ 25% CPU).

В то время как видеозахват 60 кадров в секунду - отличная функция, я не могу не чувствовать себя немного разочарованным, поскольку AVCaptureMovieFileOutput исключает массу забавных вещей (например, эффекты в реальном времени с GL-шейдерами, начало/останов записи записи без потери кадров).

торт/съесть его

* 59, если вы все еще используете iOS 5.0.1