无法从捕获输出中获取AudioStreamBasicDescription

时间:2015-07-29 07:30:59

标签: video-capture swift2 xcode7-beta3 cmsamplebuffer

我正在尝试访问mSampleRate和mChannelsPerFrame并将值分配给全局变量。

方式:

func setAudioFormat(format: CMFormatDescriptionRef) {
    let asbd: UnsafePointer<AudioStreamBasicDescription> = CMAudioFormatDescriptionGetStreamBasicDescription(format)

    sampleRate = asbd.memory.mSampleRate // breakpoint
    channels = asbd.memory.mChannelsPerFrame

}

方法调用:

func captureOutput(captureOutput: AVCaptureOutput!, var didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) {
    ...

    let format: CMFormatDescriptionRef = CMSampleBufferGetFormatDescription(sampleBuffer)!
    self.setAudioFormat(format)

    ...
}
我做错了什么?有没有更好的方法从捕获输出samplebuffer

获取AudioStreamBasicDescription

修改

格式保存这些值:

<CMAudioFormatDescription 0x14516150 [0x346c08a0]> {
mediaType:'soun' 
mediaSubType:'lpcm' 
mediaSpecific: {
    ASBD: {
        mSampleRate: 44100.000000 
        mFormatID: 'lpcm' 
        mFormatFlags: 0xc 
        mBytesPerPacket: 2 
        mFramesPerPacket: 1 
        mBytesPerFrame: 2 
        mChannelsPerFrame: 1 
        mBitsPerChannel: 16     } 
    cookie: {(null)} 
    ACL: {(null)} 
} 
extensions: {(null)}
}

1 个答案:

答案 0 :(得分:0)

获得CMFormatDescriptionRef实例后,您可以使用此代码(在Objective-C中,抱歉)检索ASBD数据:

const AudioFormatListItem *audioFormatListItem = CMAudioFormatDescriptionGetFormatList(formatDescription, nil);
AudioStreamBasicDescription asbd = audioFormatListItem->mASBD;
float sampleRate = asbd.mSampleRate;