在iOS 5中使用AVFoundation设置最大帧速率

chr*_*838 18 avfoundation ios

我相信过去常常这样做captureOutput.minFrameDuration.但是,这在iOS 5中已弃用.

相反,我显然需要使用AVCaptureConnection's video.minFrameDuration.所以我有我的输入,我的输出,我将它们添加到捕获会话 - 我在哪里可以访问捕获连接?我认为它是由会议创建的,但在哪里?

我可以尝试使用addInputWithNoConnections和添加I/O addOutputWithNoConnections,然后手动创建连接.但是,设置最大帧速率似乎有点麻烦.另外,Xcode抱怨这些方法不存在.

Jos*_*fer 28

克里斯,我想我已经解决了这个问题:

(编辑 - 请参阅下面的Tomas Camin的评论,检查是否支持videoMinFrameDuration videoMaxFrameDuration的正确方法,尽管下面的代码在发布时工作正常)

下面的行可以访问与AVCaptureConnection对象关联的AVCaptureVideoDataOutput对象:

AVCaptureConnection *conn = [output connectionWithMediaType:AVMediaTypeVideo];


CMTimeShow(conn.videoMinFrameDuration);
CMTimeShow(conn.videoMaxFrameDuration);

if (conn.isVideoMinFrameDurationSupported)
    conn.videoMinFrameDuration = CMTimeMake(1, CAPTURE_FRAMES_PER_SECOND);
if (conn.isVideoMaxFrameDurationSupported)
    conn.videoMaxFrameDuration = CMTimeMake(1, CAPTURE_FRAMES_PER_SECOND);

CMTimeShow(conn.videoMinFrameDuration);
CMTimeShow(conn.videoMaxFrameDuration);
Run Code Online (Sandbox Code Playgroud)

如果您正在使用(就像我一样)didOutputSampleBuffer委托,您可以确认fromConnection传入代理的AVCaptureConnection*值中的视频帧速率已被上述代码正确设置和"记住".

请注意,您需要设置 videoMinFrameDurationvideoMaxFrameDuration相同的值,成功钳制帧速率-设置自身分钟似乎并没有在iPhone 4S测试时工作.这似乎没有记录.

玩笑

  • 我正在使用iOS SDK 5.1:`[AVCaptureConnection isVideoMinFrameDurationSupported]`和`[AVCaptureConnection isVideoMaxFrameDurationSupported]`不存在,而是属性`conn.isVideoMinFrameDurationSupported`和`conn.isVideoMaxFrameDurationSupported`. (2认同)

Kir*_*ran 5

AVCaptureConnection videoMinFrameDuration已弃用.使用 AVCaptureDevice activeVideoMinFrameDuration/ activeVideoMaxFrameDuration.AVCaptureDevice类引用中的第一个代码片段回答了这个问题.