Ios Swift-从CMSampleBuffer获取kCMSampleBufferAttachmentKey_DroppedFrameReason
我试图理解为什么我的AVCaptureOutput正在删除帧。在Ios Swift-从CMSampleBuffer获取kCMSampleBufferAttachmentKey_DroppedFrameReason,ios,swift,avfoundation,Ios,Swift,Avfoundation,我试图理解为什么我的AVCaptureOutput正在删除帧。在captureOutput(\uoutput:AVCaptureOutput,didDrop-sampleBuffer:CMSampleBuffer,from-connection:AVCaptureConnection)delegate方法中,我得到了一个CMSampleBuffer,它应该包含一个附件,解释删除帧的原因() 原因可能是以下原因之一: kCMSampleBufferDroppedFrameReason_FrameW
captureOutput(\uoutput:AVCaptureOutput,didDrop-sampleBuffer:CMSampleBuffer,from-connection:AVCaptureConnection)
delegate方法中,我得到了一个CMSampleBuffer
,它应该包含一个附件,解释删除帧的原因()
原因可能是以下原因之一:
kCMSampleBufferDroppedFrameReason_FrameWasLate // "FrameWasLate"
kCMSampleBufferDroppedFrameReason_OutOfBuffers // "OutOfBuffers"
kCMSampleBufferDroppedFrameReason_Discontinuity // "Discontinuity"
从文档中我们真的不清楚如何得到这个值。我尝试使用CMGetAttachment
,但这会返回CMAttachmentMode
akaUInt32
:
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常量匹配我愚蠢地没有看到正确的输出:
var mode: CMAttachmentMode = 0
let reason = CMGetAttachment(sampleBuffer, kCMSampleBufferAttachmentKey_DroppedFrameReason, &mode)
print("reason \(String(describing: reason))") // Optional(OutOfBuffers)