1

嗨,我目前正在开发一个需要捕获视频的应用程序,同时应该能够获取帧来混合它们。我遇到的问题是我的帧来自:

函数捕获输出(
     捕获输出:AVCaptureOutput!,
     didOutputSampleBuffer 样本缓冲区:
     CMSampleBuffer!,
     fromConnection 连接:AVCaptureConnection!
)

混合大约 10-12 帧后会下降。我尝试每 10 帧混合一次,但在 10-12 帧混合后它仍然会下降。

我知道我应该复制 CVImageBuffer 以释放我使用以下方法获得的 imageBuffer: let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)

我也知道

函数 CMSampleBufferCreateCopy(
     _分配器:CFAllocator?,
     _ sbuf: CMSampleBuffer,
     _ sbufCopyOut: UnsafeMutablePointer
) -> 操作系统状态

只创建浅拷贝,无助于释放原始 imageBuffer

所以我的问题是:我怎样才能创建完整的 a CMSmapleBufferor深层副本CVImageBuffer?我想使用:

函数 CMSampleBufferCreate(
     _分配器:CFAllocator?,
     _ dataBuffer: CMBlockBuffer?,
     _ 数据就绪:布尔,
     _ makeDataReadyCallback: CMSampleBufferMakeDataReadyCallback?,
     _ makeDataReadyRefcon: UnsafeMutablePointer,
     _ formatDescription: CMFormatDescription?,
     _ numSamples:CMItemCount,
     _ numSampleTimingEntries:CMItemCount,
     _ sampleTimingArray: UnsafePointer,
     _ numSampleSizeEntries:CMItemCount,
     _ sampleSizeArray: UnsafePointer,
     _ sBufOut: UnsafeMutablePointer
) -> 操作系统状态

但是功能有点压倒性,我不知道从哪里获得所有属性。我相信我可以从给定的CMSmapleBuffer.

这几天我一直在寻找解决方案。如果您需要更多上下文,请随时询问。我希望有人能提供帮助。

4

0 回答 0