【问题标题】:Getting correct first frame from AVCaptureVideoDataOutput - AVFoundation从 AVCaptureVideoDataOutput 获取正确的第一帧 - AVFoundation
【发布时间】:2016-03-24 05:04:11
【问题描述】:

我正在使用 AVFoundation 从后置摄像头捕捉视频,并希望在按下开始按钮时处理帧。问题是,当我按下开始按钮的那一刻,我从样本缓冲区中抓取帧并处理它,但似乎我得到的帧是过去的帧,这意味着不是我想要的当前帧。

我了解样本缓冲区的出现时间会有所延迟。我尝试使用示例缓冲区的演示时间戳,但似乎无法使其同步。有没有人遇到过类似的问题?任何帮助或建议将不胜感激。

(void)captureOutput:(AVCaptureOutput *)captureOutput
        didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
        fromConnection:(AVCaptureConnection *)connection;

那是我获取相框的地方。

【问题讨论】:

    标签: ios avfoundation


    【解决方案1】:

    我设法找到解决方案,以防其他人面临同样的问题。

    据我了解,Apple 不保证在您按下捕获按钮的那一刻您将获得该帧,因为它们在您设置的串行队列缓冲区中排队。你肯定会按顺序得到它,但不是实时的。为了在您按下按钮之前忽略过去的帧,我使用 NSDate 来测量我开始运行捕获会话所用的时间(startTime)以及在捕获输出委托中处理第一帧的时间(endTime)

    所以,所用时间 = endTime-startTime

    有了这个时间,我们可以计算帧延迟,在我的例子中,我以 24FPS 捕获帧延迟是 3 帧,所以当用户按下捕获按钮时,我不会存储/处理前 3 帧以便结果可以与用户捕获的内容同步。

    希望对您有所帮助,并随时提供更好的建议和编辑。

    【讨论】:

      猜你喜欢
      • 2013-07-18
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多