public func captureOutput( captureOutput: AVCaptureOutput!,dIDOutputSampleBuffer sampleBuffer: CMSampleBuffer!,fromConnection connection: AVCaptureConnection!) { let samplesInBuffer = CMSampleBufferGetNumSamples(sampleBuffer) var audiobufferlist: audiobufferlist var buffer: Unmanaged<CMBlockBuffer>? = nil CMSampleBufferGetaudiobufferlistWithRetainedBlockBuffer( sampleBuffer,nil,&audiobufferlist,UInt(sizeof(audiobufferlist.dynamicType)),UInt32(kCMSampleBufferFlag_audiobufferlist_Assure16Bytealignment),&buffer ) // do stuff}
编译器抱怨第3和第4个参数:
Address of variable ‘audiobufferlist’ taken before it is initialized
和
Variable ‘audiobufferlist’ used before being initialized
那我该怎么办呢?
我正在使用this StackOverflow answer,但它是Objective-C.我正试图将其翻译成Swift,但遇到了这个问题.
或者是否有更好的方法?我需要从缓冲区读取数据,一次一个样本,所以我基本上试图得到一些我可以迭代的样本数组.
解决方法 免责声明:我刚刚尝试将代码从 Reading audio samples via AVAssetReader转换为Swift,并验证它是否已编译.我还没有测试它是否真的有效.
// Needs to be initialized somehow,even if we take only the addressvar audiobufferlist = audiobufferlist(mNumberBuffers: 1,mBuffers: AudioBuffer(mNumberChannels: 0,mDataByteSize: 0,mData: nil))var buffer: Unmanaged<CMBlockBuffer>? = nilCMSampleBufferGetaudiobufferlistWithRetainedBlockBuffer( sampleBuffer,&buffer)// Ensure that the buffer is released automatically.let buf = buffer!.takeRetainedValue() // Create UnsafeBufferPointer from the variable length array starting at audiobufferlist.mBufferslet audioBuffers = UnsafeBufferPointer<AudioBuffer>(start: &audiobufferlist.mBuffers,count: Int(audiobufferlist.mNumberBuffers))for audioBuffer in audioBuffers { // Create UnsafeBufferPointer<Int16> from the buffer data pointer var samples = UnsafeMutableBufferPointer<Int16>(start: UnsafeMutablePointer(audioBuffer.mData),count: Int(audioBuffer.mDataByteSize)/sizeof(Int16)) for sample in samples { // .... }}总结
以上是内存溢出为你收集整理的如何调用CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer?全部内容,希望文章能够帮你解决如何调用CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)