我正在做一个项目,我们将使用iPhones作为捕捉场景的相机。录制时,我们需要录制@60fps,而不是30fps (本机支持)。因此,我正在开发一个应用程序来实现这一点,因为iPhone 4S硬件支持720p@60fps (如果你越狱你的手机就可以做到这一点)。
有没有人知道如何在iOS的Objective-C中做到这一点?今天我看到了一款应用程序(slopro),它可以在没有越狱的手机上记录60fps。任何建议或建议都是非常感谢的。
发布于 2012-05-01 03:03:09
经过一些修修补补,这个答案分成了两部分:
如何以60fps捕获帧
iPhone4s/5.1上的AVCaptureSessionPreset1280x720,帧持续时间设置为:
connection.videoMinFrameDuration = CMTimeMake(1, 60);*
connection.videoMaxFrameDuration = CMTimeMake(1, 60);
给你一个稳定的,超级流畅的捕捉。
如何将帧捕获到文件中@60fps
捕获帧是很好的,但您可能想要保留它们。
正如Brad在评论中指出的那样,将这些帧写入文件是另一回事。遗憾的是,无论我尝试什么配置,通过AVAssetWriter
对帧进行编码都会导致捕获速率下降到观察到的~37fps,再多的alwaysDiscardsLateVideoFrames
操作也无法改变它。然而,在这种方法中,每一帧都是从AVFoundation复制到你的应用程序,然后再复制回来,这对公交车来说是非常没有意义的,而且非常累人。幸运的是,AVFoundation
有一个类可以消除这种往返过程:AVCaptureMovieFileOutput
。
如果您让AVFoundation
为您编写,那么iPhone4S可以捕获帧+音频并以60fps*的速度将其编码为.mov文件,而无需费力(约25%的CPU)。
虽然60fps的视频捕获是一个很棒的功能,但我还是忍不住感到有点失望,因为AVCaptureMovieFileOutput
排除了很多有趣的东西(例如,使用GL着色器的实时效果,没有帧丢失的录制开始/停止)。
蛋糕/吃掉它
*59如果您仍在运行iOS 5.0.1
发布于 2012-04-27 12:28:15
我以前没有尝试过,也许这些是相关的:
AVCaptureConnection Class Reference
videoMinFrameDuration
和videoMaxFrameDuration
(设置videoMaxFrameDuration
)时需要
https://stackoverflow.com/questions/10344637
复制相似问题