【问题标题】:Capture 60fps in iPhone app在 iPhone 应用程序中捕获 60fps
【发布时间】:2012-05-07 20:20:57
【问题描述】:

我正在开展一个项目,我们将使用 iPhone 作为相机来捕捉场景。录制时,我们需要录制 @60fps 而不是 30fps(本机支持)。所以我正在开发一个应用程序来做到这一点,因为 iPhone 4S 硬件支持 720p@60fps(如果你越狱你的手机你可以做到这一点)。

有人知道如何在 iOS 上的 Objective-C 中做到这一点吗?今天我看到了一个可以在非越狱手机上录制 60fps 的应用程序(slopro)。非常感谢任何建议或提示。

【问题讨论】:

  • 不知道为什么这个问题被投票关闭?经过良好的研究,这似乎是一个很好的、不重复的问题。当然 OP 不知道从哪里开始,但至少他说他正在寻找的东西是可能的,并且已经被非越狱手机上的其他应用程序完成。
  • 是的,澄清一下,我不想越狱。有一些适用于 iPhone 的慢动作应用程序(TimeFreeze、slopro)。所以我知道这是可能的。

标签: iphone ios recording avcapturesession


【解决方案1】:

经过一番修改,这个答案分为两部分:

如何以 60fps 捕捉帧

iPhone4s/5.1 上的 AVCaptureSessionPreset1280x720,帧持续时间设置为:

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

为您提供稳定、超流畅的捕捉。

如何将帧捕获到文件中 @60fps
捕捉帧都很好,但大概你想保留它们。
正如 Brad 在 cmets 中指出的那样,将这些帧写入文件是另一回事。 可悲的是,无论我尝试什么配置,通过AVAssetWriter 对帧进行编码都会导致捕获率下降到观察到的~37fps,并且对alwaysDiscardsLateVideoFrames 的任何摆弄都无法改变它。但是,在这种方法中,每一帧都会从 AVFoundation 复制到您的应用程序,然后再复制回来,这对公共汽车来说毫无意义且非常耗损。幸运的是,AVFoundation 有一个类可以删除此往返:AVCaptureMovieFileOutput

如果您让AVFoundation 为您编写代码,那么 iPhone4S 可以毫不费力地以 60fps* 捕获帧 + 音频并将其编码为 .mov 文件(~25% CPU)。

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

蛋糕/吃它

*59 如果您仍在运行 iOS 5.0.1

【讨论】:

  • 我可以确认强制帧速率为 60 FPS(您确实可以在上面的代码中使用 60 而不是 59)适用于 iPhone 4S,虽然不是新的 (Retina) iPad,但它只适用于 720p 预设,不适用于 640x480 或 1080p。我能够以 59.87 FPS 的速度捕获和录制电影(在开始时丢弃了几帧),尽管我不得不丢弃音频并将视频下采样到 640x480 以允许 AVAssetWriter 跟上我的实现。它以 37 FPS 的速度录制,带有音频录制和完整的 720p 帧。
  • 在 iOS 5.0.1 59fps 似乎是唯一适合我的速率。我会在更多测试后更新我的答案。
  • 我的测试是在 5.1 上进行的,CMTimeMake(1, 60) 按照那里的广告发布。鉴于这没有完全记录在案,点更新之间很可能存在差异。
  • 我想我已经弄明白了,但我觉得被骗了。
  • 我今天刚刚在 iPhone 4S 上做了一些测试,输入为:AVCaptureDeviceInput,输出为:AVCaptureMovieFileOutput。即使设置:connection.videoMinFrameDuration = CMTimeMake(1, 60); connection.videoMaxFrameDuration = CMTimeMake(1, 60);它似乎不想记录超过 30fps(使用 AVCaptureSessionPreset1280x720)。
【解决方案2】:

这个我没试过,可能是相关的:

【讨论】:

  • 好的,我去看看。有人知道这些属性的最大支持值是多少吗?
  • 我刚刚注意到我在回答中提供了一些不正确的链接(对于 Mac OS)。抱歉,我删除了错误的。
  • 嗨,有人遇到过这个问题吗?
  • 我已经使用这些 api 来设置帧速率,不知道它有多高,但它是你正在寻找的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
相关资源
最近更新 更多