我正在一个项目中,我们将使用iPhone作为相机来捕捉场景。录制时,我们需要录制@ 60fps而不是30fps( native 支持)。因此,我正在开发一个应用程序来执行此操作,因为iPhone 4S硬件支持720p @ 60fps(如果您越狱了,您可以实现此功能)。

有人知道如何在iOS的Objective-C中执行此操作吗?今天,我看到那里有一个应用程序(slopro),可以在未越狱的手机上以60fps的速度录制。任何建议或提示,不胜感激。

最佳答案

经过一番修补后,此答案分为两个部分:

如何以60fps捕获帧

iPhone4s/5.1上的AVCaptureSessionPreset1280x720,帧时长设置为:

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

为您提供稳定, super 流畅的拍摄效果。

如何将帧捕获到@ 60fps的文件中
捕获帧非常好,但是想必您要保留它们。
正如布拉德(Brad)在评论中指出的那样,将这些框架写入文件是另一回事。
可悲的是,无论我尝试了哪种配置,通过AVAssetWriter编码帧都会导致捕获率降至观察到的〜37fps,并且对alwaysDiscardsLateVideoFrames的摆弄也无法改变它。但是,通过这种方法,每个帧都从AVFoundation复制到您的应用程序,然后再复制回去,这对于巴士来说是毫无意义的,而且非常耗时。幸运的是,AVFoundation有一个删除往返的类:AVCaptureMovieFileOutput

如果让AVFoundation为您完成编写工作,那么iPhone4S可以以60fps *的速度将帧+音频捕获并编码为.mov文件,而不会费劲(〜25%CPU)。

虽然60fps视频捕获是一个很棒的功能,但是我不禁感到有点失望,因为AVCaptureMovieFileOutput排除了很多有趣的事情(例如,使用GL着色器的实时效果,记录开始/停止而不会丢失帧)。

蛋糕/吃它

* 59如果您仍在运行iOS 5.0.1

关于iphone - 在iPhone应用中捕获60fps,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10344637/

10-09 18:46