2012-04-27 11 views
16

Estoy trabajando en un proyecto en el que utilizaremos iPhones como cámaras para capturar una escena. Cuando grabemos, necesitamos grabar a 60fps y no a 30 fps (como soporte nativo). Así que estoy trabajando en una aplicación para hacer esto, ya que el hardware del iPhone 4S admite 720p a 60 fps (si haces jailbreak en tu teléfono, puedes lograrlo).Capturar 60 fps en la aplicación para iPhone

¿Alguien sabe cómo hacer esto en Objective-C en iOS? Hoy vi una aplicación (slopro) que puede grabar 60 fps en teléfonos sin jailbreak. Cualquier consejo o consejo es muy apreciado.

+3

No sé por qué esta pregunta se votó a ser cerrado? Parece una buena pregunta no duplicada después de una buena investigación. Seguro que el OP no sabe por dónde empezar, pero al menos dice que lo que está buscando es posible y ya lo han hecho otras aplicaciones en teléfonos que no tienen jailbreak. – Krishnabhadra

+1

Sí, para aclarar, no quiero Jailbreak. Existen algunas aplicaciones de cámara lenta para iPhone (TimeFreeze, slopro). Entonces sé que es posible. – Michel

Respuesta

7

no he probar esto antes, tal vez estos están relacionados:

+0

Muy bien, lo echaré un vistazo.¿Alguien sabe cuáles son los valores máximos admitidos para estas propiedades? – Michel

+0

Acabo de darme cuenta de que di algunos enlaces incorrectos (para Mac OS) en mi respuesta. Lo siento y he eliminado los equivocados. – Hailei

+0

Hola, alguien tuvo suerte con esto? – Odrakir

15

Después de algún retoque, esta respuesta se ha dividido en dos partes:

cómo capturar fotogramas a 60 fps

El AVCaptureSessionPreset1280x720 en el iPhone4s/5.1, con duraciones marco establecido a:

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

le da una captura estable, muy suave.

Cómo capturar imágenes en un archivo @ 60fps
La captura de fotogramas está muy bien, pero se supone que desea mantenerlas.
Como señaló Brad en los comentarios, escribir esos cuadros en un archivo es otra historia. Lamentablemente, independientemente de las configuraciones que intenté, la codificación de los marcos a través de AVAssetWriter causó que la tasa de captura cayera a los ~ 37 fps observados y ninguna cantidad de manipulación con alwaysDiscardsLateVideoFrames podría cambiarla. Sin embargo, en este enfoque, cada fotograma se copia de AVFoundation a su aplicación, y luego de vuelta, lo cual es bastante inútil y muy desgastante para el bus. Afortunadamente, AVFoundation tiene una clase que elimina este viaje redondo: AVCaptureMovieFileOutput.

Si deja que AVFoundation le escriban, el iPhone4S puede capturar y codificar cuadros + audio en un archivo .mov a 60 fps * sin perder un ápice (~ 25% de CPU).

Aunque la captura de video a 60 fps es una gran característica, no puedo evitar sentirme un poco decepcionado ya que AVCaptureMovieFileOutput descarta muchas cosas divertidas (por ejemplo, efectos en tiempo real con sombreadores GL, grabación de inicio/detención sin pérdida de fotogramas).

torta/comerlo

* 59 si todavía está ejecutando IOS 5.0.1

+0

puedo confirmar que forzar a la tasa de fotogramas a 60 fps (que de hecho puede utilizar 60 en lugar de 59 en el código anterior) funciona en el iPhone 4S, aunque no es el nuevo (Retina) iPad, pero solo funciona para un preajuste de 720p, no para 640x480 o 1080p. Pude capturar y grabar una película a 59.87 FPS (solté un par de fotogramas al principio), aunque tuve que soltar el audio y bajar la resolución del video a 640x480 para permitir que AVAssetWriter se mantuviera actualizado en mi implementación. Grabó a 37 FPS con grabación de audio y cuadros completos de 720p. –

+0

En iOS 5.0.1 59fps parece ser la única tarifa que funciona para mí. Actualizaré mi respuesta después de algunas pruebas más. –

+0

Mis pruebas fueron en 5.1, y 'CMTimeMake (1, 60)' entregado como se anunció allí. Dado que esto no está exactamente documentado, muy bien podría haber diferencias entre las actualizaciones de puntos. –

Cuestiones relacionadas