如何调用CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer?

如何调用CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer?,第1张

概述我试图弄清楚如何在 Swift中调用这个AVFoundation函数.我花了很多时间摆弄声明和语法,并且做到了这一点.编译器大部分都很开心,但我最后还是陷入了困境. public func captureOutput( captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffe 我试图弄清楚如何在 Swift中调用这个AVFoundation函数.我花了很多时间摆弄声明和语法,并且做到了这一点.编译器大部分都很开心,但我最后还是陷入了困境.

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?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1008465.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存