我正在做一个项目,我们将使用 iPhone 作为相机来捕捉场景。录制时,我们需要录制@60fps 而不是 30fps(本机支持)。所以我正在开发一个应用程序来做到这一点,因为 iPhone 4S 硬件支持 720p@60fps(如果你越狱你的手机,你可以实现这一点)。
有人知道如何在 iOS 上的 Objective-C 中做到这一点吗?今天我看到一个可以在非越狱手机上录制 60fps 的应用程序(slopro)。非常感谢任何建议或提示。
我正在做一个项目,我们将使用 iPhone 作为相机来捕捉场景。录制时,我们需要录制@60fps 而不是 30fps(本机支持)。所以我正在开发一个应用程序来做到这一点,因为 iPhone 4S 硬件支持 720p@60fps(如果你越狱你的手机,你可以实现这一点)。
有人知道如何在 iOS 上的 Objective-C 中做到这一点吗?今天我看到一个可以在非越狱手机上录制 60fps 的应用程序(slopro)。非常感谢任何建议或提示。
经过一番修补,这个答案分为两部分:
如何以 60fps 捕获帧
iPhone4s/5.1 上的 AVCaptureSessionPreset1280x720,帧持续时间设置为:
connection.videoMinFrameDuration = CMTimeMake(1, 60);*
connection.videoMaxFrameDuration = CMTimeMake(1, 60);
为您提供稳定、超流畅的捕捉。
如何将帧捕获到文件中@60fps
捕获帧都很好,但想必你想保留它们。
正如布拉德在评论中指出的那样,将这些帧写入文件是另一回事。可悲的是,无论我尝试什么配置,通过 对帧进行编码AVAssetWriter
都会导致捕获率下降到观察到的 ~37fps,并且任何摆弄alwaysDiscardsLateVideoFrames
都无法改变它。但是,在这种方法中,每一帧都会从 AVFoundation 复制到您的应用程序,然后再复制回来,这对公共汽车来说毫无意义且非常磨损。幸运的是,AVFoundation
有一门课程可以消除此往返行程:AVCaptureMovieFileOutput
.
如果您让AVFoundation
自己编写代码,那么 iPhone4S 可以毫不费力地以 60fps* 捕获帧 + 音频并将其编码为 .mov 文件(约 25% CPU)。
虽然 60fps 视频捕捉是一个很棒的功能,但我不禁感到有点失望,因为AVCaptureMovieFileOutput
排除了很多有趣的东西(例如,使用 GL 着色器的实时效果、录制开始/停止时不会丢失帧)。
蛋糕/吃它
*59 如果您仍在运行 iOS 5.0.1
I haven't try this before, maybe these are related:
videoMinFrameDuration
and videoMaxFrameDuration
in AVCaptureConnection Class ReferencevideoMaxFrameDuration
)