当查看GLCameraRipple示例时,以这样一种方式设置AVCaptureVideoDataOutput:无论何时从iPhone摄像头收到新帧,都会调用回调(captureOutput)。
但是,将“sleep(1)”放在“drawInRect”函数(用于OpenGL绘图)的开头,该回调每秒仅被调用1次,而不是每秒30次。
谁能告诉我为什么iPhone相机的帧速率与OpenGL绘图调用的帧速率相关联?
更新:重现步骤
NSLog(@"Got Frame");
。运行它会生成很多“Got Frame”消息(大约每秒30条消息)sleep(1);
。现在每秒仅显示一条消息。 最佳答案
当AVCaptureVideoDataOutput调用委托方法captureOutput:didOutputSampleBuffer:fromConnection:来使程序员能够编辑或记录来自摄像机的图像时,此方法从主线程调用。并且,通常我们应该编写直接通过主线程与用户界面交互的代码,以及为什么OpenGL之所以喜欢AVCaptureVideoDataOutput,因为从摄像头到绘制到屏幕的方法都在主线程中运行。
如果iPhone无法处理captureOutput:didOutputSampleBuffer:fromConnection:如处理时间超过1/30秒的下一帧的时间结束,则AVCaptureVideoDataOutput类和AVCaptureVideoDataOutput类可以删除图像,将忽略您可以使用captureOutput:didDropSampleBuffer:fromConnection:方法收集数据