嗨,我目前正在开发一个需要捕获视频的应用程序,同时应该能够获取帧来混合它们。我遇到的问题是我的帧来自:
函数捕获输出( 捕获输出:AVCaptureOutput!, didOutputSampleBuffer 样本缓冲区: CMSampleBuffer!, fromConnection 连接:AVCaptureConnection! )
混合大约 10-12 帧后会下降。我尝试每 10 帧混合一次,但在 10-12 帧混合后它仍然会下降。
我知道我应该复制 CVImageBuffer 以释放我使用以下方法获得的 imageBuffer:
let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
我也知道
函数 CMSampleBufferCreateCopy( _分配器:CFAllocator?, _ sbuf: CMSampleBuffer, _ sbufCopyOut: UnsafeMutablePointer ) -> 操作系统状态
只创建浅拷贝,无助于释放原始 imageBuffer
所以我的问题是:我怎样才能创建完整的 a CMSmapleBuffer
or深层副本CVImageBuffer
?我想使用:
函数 CMSampleBufferCreate( _分配器:CFAllocator?, _ dataBuffer: CMBlockBuffer?, _ 数据就绪:布尔, _ makeDataReadyCallback: CMSampleBufferMakeDataReadyCallback?, _ makeDataReadyRefcon: UnsafeMutablePointer, _ formatDescription: CMFormatDescription?, _ numSamples:CMItemCount, _ numSampleTimingEntries:CMItemCount, _ sampleTimingArray: UnsafePointer, _ numSampleSizeEntries:CMItemCount, _ sampleSizeArray: UnsafePointer, _ sBufOut: UnsafeMutablePointer ) -> 操作系统状态
但是功能有点压倒性,我不知道从哪里获得所有属性。我相信我可以从给定的CMSmapleBuffer
.
这几天我一直在寻找解决方案。如果您需要更多上下文,请随时询问。我希望有人能提供帮助。