在Swift 2.0中创build一个CMSampleBuffer的副本

这已经被问过了,但是自从被问到以后,Swift肯定会发生一些变化。 我试图存储从AVCaptureSession返回的CMSampleBuffer对象稍后处理。 经过一番实验,我发现AVCaptureSession必须重用其CMSampleBuffer引用。 当我试图保持超过15个会话挂起。 所以我想我会制作样本缓冲区的副本。 但我似乎无法得到它的工作。 这是我写的:

 var allocator: Unmanaged<CFAllocator>! = CFAllocatorGetDefault() var bufferCopy: UnsafeMutablePointer<CMSampleBuffer?> let err = CMSampleBufferCreateCopy(allocator.takeRetainedValue(), sampleBuffer, bufferCopy) if err == noErr { bufferArray.append(bufferCopy.memory!) } else { NSLog("Failed to copy buffer. Error: \(err)") } 

这将不会被编译,因为它说Variable 'bufferCopy' used before being initializedVariable 'bufferCopy' used before being initialized 。 我看了很多例子,他们会编译或不工作,否则他们不会编译。

有人看到我在这里做错了吗?

从字面上看,您正试图在初始化之前使用variablesbufferCopy。

你已经为它声明了一个types,但是没有分配它指向的内存。

您应该使用以下调用创buildCMSampleBuffers https://developer.apple.com/library/tvos/documentation/CoreMedia/Reference/CMSampleBuffer/index.html#//apple_ref/c/func/CMSampleBufferCreate

您应该可以将缓冲区复制到此缓冲区(只要缓冲区的格式与您正在复制的缓冲区的格式相匹配即可)。

你可以简单地通过一个CMSampleBuffer? variables(作为一个可选项,用nil隐含地初始化)

 var bufferCopy : CMSampleBuffer? let err = CMSampleBufferCreateCopy(kCFAllocatorDefault, buffer, &bufferCopy) if err == noErr { // ... }