AVAudioRecorder不适用于iPhone 5S

所以我使用的AVAudioRecorderloggingAVCaptureSession录音video旁边(我知道这很奇怪,但对于我的情况,我需要单独logging)。

除了我的iPhone 5S之外,所有设备上的一切正常。 它logging没有错误,但保存到磁盘的文件已损坏或什么的。 当我访问我的Mac上的文件系统,尝试使用VLC或Quicktime播放m4a文件时,出现“无法检测到文件的格式”错误。 这是我如何初始化我的AVAudioRecorder和录制我的audio:

// Prepare the audio session [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:nil]; [[AVAudioSession sharedInstance] setMode:AVAudioSessionModeVideoRecording error:nil]; // Setup audio recording NSDictionary *recordSettings = @{AVFormatIDKey: @(kAudioFormatMPEG4AAC), AVEncoderAudioQualityKey: @(AVAudioQualityLow), AVEncoderBitRateKey: @16, AVNumberOfChannelsKey: @1, AVSampleRateKey: @22050.0f}; NSError *audioRecorderError; NSURL *audioFileURL = [[self.outputFileURL URLByDeletingPathExtension] URLByAppendingPathExtension:@"m4a"]; self.audioRecorder = [[AVAudioRecorder alloc] initWithURL:audioFileURL settings:recordSettings error:&audioRecorderError]; self.audioRecorder.delegate = self; if (audioRecorderError) { CCLog(@"Error while initializing the audio recorder... Skipping sound recording!"); } else { if (![self.audioRecorder prepareToRecord]) { CCLog(@"Error preparing to record"); } if (![self.audioRecorder record]) { CCLog(@"Error recording"); } } 

再说一遍,除了5S之外,它可以在所有设备上运行。 任何人都知道可能是由什么造成的?

做了更多的挖掘,我显然find了解决办法。 我只是摆脱了AVEncoderBitRateKey,一切正常。 所以现在我的recordSettings字典看起来像这样:

 // Setup audio recording NSDictionary *recordSettings = @{AVFormatIDKey: @(kAudioFormatMPEG4AAC), AVEncoderAudioQualityKey: @(AVAudioQualityLow), AVNumberOfChannelsKey: @1, AVSampleRateKey: @22050.0f}; 

仍然不知道为什么这只会在iPhone 5S的情况下。 再次,我已经testing了运行iOS6和iOS7的所有其他设备,旧的设置字典在除了5S之外的所有设备上都能正常工作。 现在我已经删除了AVEncoderBitRateKey和value,它也适用于5S。

它看起来像是AVNumberOfChannelsKeyAVEncoderBitRateKey之间的交互。 当通道数量= 1时,我似乎无法logging在64000Kbps以上,但当它= 2时,我可以使用128000 …

我有同样的问题 – 答案被certificate与AVAudioSession有关。 我需要将audio会话类别设置为PlayAndRecord。 我的应用程序的其他部分将其设置为Ambient。 这篇文章https://stackoverflow.com/a/10287793/1009125给了我答案。 希望这有助于某人,我失去了这个星期天。