在iPhone应用程序中捕获60fps
我正在开发一个项目,在那里我们将使用iPhone作为捕捉场景的摄像头。 录制时,我们需要logging@ 60fps而不是30fps(原生支持)。 所以我正在做一个应用程序来做到这一点,因为iPhone 4S硬件支持720p @ 60fps(如果你越狱你的手机,你可以做到这一点)。
有人知道如何在iOS上的Objective-C中做到这一点? 今天我看到一个应用程序(slopro),可以在非越狱手机上logging60fps。 任何意见或提示,非常感谢。
经过一番修改之后,这个答案分为两部分:
如何以60fps捕捉帧
iPhone4s / 5.1上的AVCaptureSessionPreset1280x720,帧持续时间设置为:
connection.videoMinFrameDuration = CMTimeMake(1, 60);* connection.videoMaxFrameDuration = CMTimeMake(1, 60);
给你一个稳定,超级顺利的捕获。
如何将帧捕获到@ 60fps的文件中
捕获帧是非常好的,但大概你想保留它们。
正如Brad在评论中指出的,将这些帧写入文件是另一回事。 可悲的是,无论我尝试了什么样的configuration,通过AVAssetWriter
对帧进行编码AVAssetWriter
导致捕获速率下降到观察的〜37fps,并且alwaysDiscardsLateVideoFrames
无法改变它。 然而,在这种方法中,每一个帧都从AVFoundation复制到你的应用程序,然后再回来,这是非常毫无意义,非常穿公共汽车。 幸运的是, AVFoundation
有一个类去掉了这个往返行程: AVCaptureMovieFileOutput
。
如果你让AVFoundation
为你写,那么iPhone4S可以在60fps *的情况下将帧+audio捕获和编码为.mov文件,而不会打破汗水( AVFoundation
%的CPU)。
虽然60fps的video拍摄是一个很棒的function,但是我不禁感到有些失望,因为AVCaptureMovieFileOutput
排除了许多有趣的事情(例如GL着色器的实时效果,录制开始/停止而没有帧丢失)。
蛋糕/吃吧
* 59如果你还在运行iOS 5.0.1
我没有尝试过,也许这些是相关的:
- 在iOS 5中使用AVFoundation设置最大帧速率
- AVCaptureConnection类参考中的
videoMinFrameDuration
和videoMaxFrameDuration
- CMTime参考 (需要设置
videoMaxFrameDuration
)