大佬教程收集整理的这篇文章主要介绍了ios – AV Foundation:AVCaptureVideoPreviewLayer和帧持续时间,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我还有一个像这样的预览图层集:
AVCaptureVideoPreviewLayer *videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession]; [videoPreviewLayer setFrame:self.view.bounds]; videoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; [self.view.layer insertSublayer:videoPreviewLayer aTindex:0];@H_874_10@事实是,在我的帧处理中我不需要每秒30帧,而且无论如何我都无法如此快速地处理它们.所以我使用此代码来限制帧持续时间:
// videoOutput is AVCaptureVideoDataOutput set earlier AVCaptureConnection *conn = [videoOutput connectionWithMediaType:AVMediaTypeVideo]; [conn setVideoMinFrameDuration:CMTimeMake(1,10)]; [conn setVideoMaxFrameDuration:CMTimeMake(1,2)];@H_874_10@这工作正常,并限制captureOutput委托收到的帧.
但是,这也限制了预览图层上的每秒帧数,预览视频变得非常无响应.
我从文档中了解到,帧持续时间是在连接上独立设置的,而预览层确实有不同的AVCaptureConnection.检查[videoPreviewLayer连接]上的混合/最大帧持续时间表明它确实设置为默认值(1/30和1/24),并且与AVCaptureVideoDataOutput连接上设置的持续时间不同.
那么,是否可以仅在帧捕获输出上限制帧持续时间,并且仍然可以在预览视频上看到1 / 24-1 / 30帧持续时间?怎么样?
谢谢.
如果连接#1以(例如)五帧/秒的速率激活卷帘快门并且帧持续时间为1/5秒,则连接#2无法用帧同时激活快门30次/秒持续时间为1/30秒.
要获得你想要的效果需要两个相机!
接近你想要的唯一方法是遵循Kaelin Colclasure在3月22日回答中概述的方法.
但是,您可以选择在该方法中更复杂一些.例如,您可以使用计数器来决定丢弃哪些帧,而不是让线程休眠.您可以使该计数器响应即将到来的实际帧速率(您可以从进入captureOutput的元数据中获取:didOutputSampleBuffer:fromConnection:delegate以及图像数据,或者您可以通过手动计时自行计算框架).您甚至可以通过合成帧而不是丢弃它来非常合理地模仿更长时间的曝光 – 就像App Store中的一些“慢速快门”应用程序一样(抛开不同的细节 – 例如不同的卷帘快门假象 – 实际上并不是这样)在1/5秒扫描的一帧和在1/25秒扫描的五帧之间然后胶合在一起的差异很大.
是的,这是一项工作,但你正在尝试让一个摄像机像两个一样,实时 – 这永远不会那么容易.
以上是大佬教程为你收集整理的ios – AV Foundation:AVCaptureVideoPreviewLayer和帧持续时间全部内容,希望文章能够帮你解决ios – AV Foundation:AVCaptureVideoPreviewLayer和帧持续时间所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。