首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift -从CMSampleBuffer获取kCMSampleBufferAttachmentKey_DroppedFrameReason

Swift -从CMSampleBuffer获取kCMSampleBufferAttachmentKey_DroppedFrameReason
EN

Stack Overflow用户
提问于 2017-07-27 04:06:06
回答 1查看 782关注 0票数 5

我想知道为什么我的AVCaptureOutput会丢帧。在captureOutput(_ output: AVCaptureOutput, didDrop sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection)委托方法中,我得到了一个CMSampleBuffer,它应该包含一个附件,解释帧被丢弃的原因(doc)

原因预计是其中之一的CFString:

代码语言:javascript
复制
kCMSampleBufferDroppedFrameReason_FrameWasLate // "FrameWasLate"
kCMSampleBufferDroppedFrameReason_OutOfBuffers // "OutOfBuffers"
kCMSampleBufferDroppedFrameReason_Discontinuity // "Discontinuity"

从文档中看,真的不清楚如何获得这个值。我尝试过使用CMGetAttachment,但这返回了一个CMAttachmentMode,也就是UInt32

代码语言:javascript
复制
func captureOutput(_ output: AVCaptureOutput, didDrop sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
  var reason: CMAttachmentMode = 0
  CMGetAttachment(sampleBuffer, kCMSampleBufferAttachmentKey_DroppedFrameReason, &reason)
  print("reason \(reason)") // 1
}

我真的不知道如何将这个UInt32与CFString常量相匹配

EN

回答 1

Stack Overflow用户

发布于 2017-07-27 05:21:35

我愚蠢地没有看到正确的输出:

代码语言:javascript
复制
var mode: CMAttachmentMode = 0
let reason = CMGetAttachment(sampleBuffer, kCMSampleBufferAttachmentKey_DroppedFrameReason, &mode)
print("reason \(String(describing: reason))") // Optional(OutOfBuffers)
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45336425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档