Вопрос по iphone, avcapturesession, ios, recording – Захват 60 кадров в секунду в приложении iPhone

16

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

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

Не знаете, почему этот вопрос признан закрытым? Кажется, хороший, не повторяющийся вопрос, заданный после хорошего исследования. Конечно, ОП не знает, с чего начать, но, по крайней мере, он говорит, что то, что он ищет, возможно и уже сделано другими приложениями на не взломанных телефонах. Krishnabhadra
Да, чтобы уточнить, я не хочу Jailbreak. Для iPhone есть несколько приложений с замедленным движением (TimeFreeze, slopro). Так что я знаю, что это возможно. Michel

Ваш Ответ

2   ответа
7

Set maximum frame rate with AVFoundation in iOS 5 videoMinFrameDuration and videoMaxFrameDuration in AVCaptureConnection Class Reference CMTime Reference (needed for setting videoMaxFrameDuration)
Привет, кому-нибудь повезло с этим?
Хорошо, я посмотрю на это. Кто-нибудь знает, каковы максимальные поддерживаемые значения для этих свойств? Michel
Я только что заметил, что дал несколько неправильных ссылок (для Mac OS) в своем ответе. Извините, и я удалил не те.
Я использовал эти apis для установки частоты кадров, не знаю, как высоко он идет, но это то, что вы ищете
15

How to capture frames at 60fps

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

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

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

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

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

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

торт / съешь это

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

На iOS 5.0.1 59fps, кажется, единственная скорость, которая работает для меня. Я обновлю свой ответ после еще нескольких тестов.
Мои тесты были на 5.1, иCMTimeMake(1, 60) доставлено как там рекламируется. Учитывая, что это не совсем задокументировано, между точечными обновлениями вполне могут быть различия.
Я только что провел несколько тестов сегодня на iPhone 4S с входными данными как: AVCaptureDeviceInput и выходными данными как: AVCaptureMovieFileOutput. Даже при установке: connection.videoMinFrameDuration = CMTimeMake (1, 60); connection.videoMaxFrameDuration = CMTimeMake (1, 60); Кажется, он не хочет записывать более 30 кадров в секунду (с AVCaptureSessionPreset1280x720). Michel
Я думаю, что я понял это, но я чувствую себя обманутым.
Я могу подтвердить, что увеличение частоты кадров до 60 кадров в секунду (вы действительно можете использовать 60 вместо 59 в приведенном выше коде) работает на iPhone 4S, хотя не на новом (Retina) iPad, но работает только для предустановки 720p, а не для 640x480 или 1080p. Мне удалось записать и записать фильм со скоростью 59,87 кадров в секунду (вначале было пропущено несколько кадров), хотя мне пришлось отбросить звук и уменьшить частоту видео до 640x480, чтобы AVAssetWriter оставался в моей реализации. Он записал со скоростью 37 кадров в секунду с записью звука и полными 720p кадрами.

Похожие вопросы