我尝试在旅途中处理CMSampleBuffers,但即使我正在复制样本并处理副本,我也很快停止接收样本。
我使用AVCaptureAudioDataOutputSampleBufferDelegate获取样本并按照以下方式处理:
func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) {
if (bufferCopy != nil) {
bufferCopy == nil
}
if CMSampleBufferCreateCopy(kCFAllocatorDefault, sampleBuffer, &bufferCopy) == noErr {
let encodedSamples = self.encoder.encodeSample(bufferCopy?.takeRetainedValue())
println(encodedSamples.count)
CMSampleBufferInvalidate(sampleBuffer)
// println("Copy: \(bufferCopy!.takeRetainedValue())")
}
else {
println("Failed to copy sampleBuffer")
}
}
Objective-C解决方案也可以。
我还用这个例子创建了一个GitHub仓库:https://github.com/Devxhkl/SwiftAudioStreamingOggOpus