iphone - 在 iPhone 应用程序中捕获 60fps

标签 iphone ios recording avcapturesession

我正在开展一个项目,我们将使用 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
捕获帧非常好,但可能您想保留它们。
正如布拉德在评论中指出的那样,将这些帧写入文件是另一回事。 遗憾的是,无论我尝试何种配置,通过 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/

相关文章:

iphone - 为什么 iOS 4.0 中的数组显示为 __NSArrayI(以及如何匹配它)?

ios - 如何检查应用程序是否在前台但在特定时间未访问 - iOS

android - 防止其他应用程序形成捕获/记录屏幕

iphone - 获取核心数据关系中的对象数量

iphone - 当 UIViewController 是文件所有者时,为什么我无法在 Interface Builder 中编辑 UIViewController 的属性?

iphone - 仅在 iOS 6.0 中,UIImagePickerController 关闭时将 View 向上推至 20 px

ios - 这可以从我的 WebView 中删除广告吗?

ios - 如何确定 View 是从 navigationController 中的 "More"还是从主选项卡加载的?

c++ - 如何将 Arduino 的模拟输入读数从草图转换为 .WAV

onedrive - 如何在 Teams 上下载只读录音