2012-04-27 11 views
16

Ich arbeite an einem Projekt, wo wir iPhones als Kameras für die Aufnahme einer Szene verwenden werden. Bei der Aufnahme müssen wir @ 60fps und nicht 30fps (wie nativ unterstützt) aufnehmen. Also arbeite ich an einer App, um dies zu tun, wie die iPhone 4S Hardware 720p @ 60fps unterstützt (wenn Sie Ihr Telefon jailbreak können Sie dies erreichen).Capture 60fps in iPhone App

Weiß jemand, wie man das in Objective-C auf iOS macht? Heute sah ich eine App (Slopro), die 60 fps auf nicht jailbroken Telefonen aufzeichnen kann. Irgendwelche Ratschläge oder Tipps werden sehr geschätzt.

+3

Sie wissen nicht, laufen, warum diese Frage geschlossen werden soll, abgestimmt? Es scheint eine gute, nicht duplizierte Frage nach guter Forschung zu sein. Sicherlich weiß das OP nicht, wo es anfangen soll, aber zumindest sagt er, was er sucht, ist möglich und wurde bereits von anderen Apps auf nicht-jailbroken Telefonen erledigt. – Krishnabhadra

+1

Ja, um klarzustellen, ich möchte nicht jailbreak. Es gibt einige Zeitlupen-Anwendungen für das iPhone (TimeFreeze, Slopro). Ich weiß, dass es möglich ist. – Michel

Antwort

7

Ich habe nicht vor versuchen, vielleicht werden diese bezogen werden:

+0

Okay, ich werde es mir ansehen.Weiß jemand, was die maximal unterstützten Werte für diese Eigenschaften sind? – Michel

+0

Ich habe gerade festgestellt, dass ich in meiner Antwort einige falsche Links (für Mac OS) angegeben habe. Entschuldigung und ich habe die falschen entfernt. – Hailei

+0

Hallo, hatte irgendjemand Glück dabei? – Odrakir

15

Nach einigen Basteln, diese Antwort hat sich in zwei Teile geteilt:

Wie Frames bei 60fps aufnehmen

Die AVCaptureSessionPreset1280x720 auf dem iPhone4s/5.1, mit Rahmendauern auf:

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

gibt Ihnen eine stabile, superglatte Erfassung.

Wie Frames in einer Datei zu erfassen @ 60fps
Rahmen Capturing alles sehr gut ist, aber vermutlich wollen, um sie zu halten.
Wie Brad in den Kommentaren bemerkte, ist das Schreiben dieser Frames in eine Datei eine andere Geschichte. Leider, egal welche Konfigurationen ich versuchte, die Encodierung der Frames über eine AVAssetWriter verursacht die Erfassungsrate zu den beobachteten ~ 37fps fallen und keine Menge der Fiedeln mit alwaysDiscardsLateVideoFrames könnte es ändern. Bei diesem Ansatz wird jedoch jeder einzelne Frame von AVFoundation in Ihre App und dann wieder zurück kopiert, was für den Bus ziemlich sinnlos und sehr anstrengend ist. Zum Glück hat AVFoundation eine Klasse, die diese Rundreise entfernt: AVCaptureMovieFileOutput.

Wenn Sie AVFoundation das Schreiben für Sie machen, dann kann das iPhone4S Frames + Audio in eine .mov-Datei mit 60fps * aufnehmen und codieren, ohne ins Schwitzen zu kommen (~ 25% CPU).

Während 60fps Videoaufnahme ist eine großartige Funktion, kann ich nicht helfen, aber ein wenig enttäuscht, da AVCaptureMovieFileOutput eine Menge Spaß Dinge ausschließt (z. B. Echtzeit-Effekte mit GL-Shadern, Aufnahme Start/Stopp ohne Rahmenverlust).

Kuchen/essen

* 59, wenn Sie immer noch iOS 5.0.1

+0

Ich kann bestätigen, dass die Framerate auf 60 FPS (Sie können tatsächlich 60 statt 59 im obigen Code verwenden) funktioniert auf dem iPhone 4S, obwohl nicht das neue (Retina) iPad, aber es funktioniert nur für eine 720p-Voreinstellung, nicht für 640x480 oder 1080p. Ich konnte einen Film mit 59,87 FPS aufnehmen und aufzeichnen (am Anfang fielen ein paar Frames), obwohl ich das Audio löschen und das Video auf 640x480 runtersampeln musste, damit der AVAssetWriter in meiner Implementierung mithalten konnte. Es wurde mit 37 FPS mit Audioaufnahme und vollen 720p-Frames aufgenommen. –

+0

Auf iOS 5.0.1 scheint 59 fps die einzige Rate zu sein, die für mich funktioniert. Ich werde meine Antwort nach einigen weiteren Tests aktualisieren. –

+0

Meine Tests wurden auf 5.1 und 'CMTimeMake (1, 60)' geliefert, wie dort angekündigt. Da dies nicht genau dokumentiert ist, könnte es durchaus Unterschiede zwischen den Punktupdates geben. –