我们正在为 10.7.5 及更高版本开发录音应用程序。我们AVCaptureAudioDataOutput
用来捕捉音频和数据是使用AVAssetWriterInput
.
属性设置AVAssetWriterInput
如下:
AVFormatIDKey : kAudioFormatMPEG4AAC
AVSampleRateKey : 此值取自使用以下代码的设备
AudioStreamBasicDescription streanDesc;
UInt32 propSize = sizeof(AudioStreamBasicDescription);
AudioDeviceGetProperty(mInputDevice, 0, YES, kAudioDevicePropertyStreamFormat, &propSize,&streanDesc);
AVNumberOfChannelsKey :取自 AudioStreamBasicDescription。
AVEncoderBitRateKey :这是硬编码为 96000。
这适用于大多数音频设备,除了采样率为 32khz 的 USB 麦克风和采样率为 48khz 的 iSight 设备。当我们将这两个设备用作输入音频设备时,在写入音频数据时,我们收到以下错误 -
Error Domain=AVFoundationErrorDomain Code=-11821 "Cannot Decode" UserInfo=0x279470 {NSLocalizedFailureReason=The media data could not be decoded. It may be damaged., NSUnderlyingError=0x292370 "The operation couldn’t be completed. (OSStatus error 560226676.)", NSLocalizedDescription=Cannot Decode}".
但是,如果我们将 USB 麦克风硬编码AVSampleRateKey
到 44100,它可以正常工作,但不适用于 iSight 设备。
提供什么正确的价值AVSampleRateKey
?谁能帮我解决这个问题。