所以我正在使用AVAudioRecorder在录制视频的AVCaptureSession旁边录制音频(我知道这很奇怪,但对于我的情况,我需要单独录制它们。)
除了我的iPhone 5S之外,所有设备上的一切都运行良好。它记录没有错误,但保存到磁盘的文件已损坏或其他。当我在我的Mac上访问文件系统并尝试使用VLC或Quicktime播放m4a文件时,我得到“无法检测到文件的格式”错误。以下是我初始化AVAudioRecorder和录制音频的方法:
// 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之外的所有设备。任何人都知道可能导致这种情况的原因吗?
答案 0 :(得分:28)
进行了一些挖掘,我显然找到了解决方案。我只是摆脱了AVEncoderBitRateKey,一切正常。所以现在我的recordSettings字典看起来像这样:
// Setup audio recording
NSDictionary *recordSettings = @{AVFormatIDKey: @(kAudioFormatMPEG4AAC),
AVEncoderAudioQualityKey: @(AVAudioQualityLow),
AVNumberOfChannelsKey: @1,
AVSampleRateKey: @22050.0f};
仍然不确定为什么只有iPhone 5S会出现这种情况。同样,我已经在运行iOS6和iOS7的所有其他设备上进行了测试,并且旧设置字典在除5S之外的所有设备上都能正常工作。现在我已经删除了AVEncoderBitRateKey和值,它也适用于5S。
答案 1 :(得分:0)
看起来它实际上是AVNumberOfChannelsKey
和AVEncoderBitRateKey
之间的互动。当#of channels = 1时,我似乎无法记录64000Kbps以上,但当它= 2时,我可以使用128000 ......
答案 2 :(得分:0)
我遇到了同样的问题 - 答案证明与AVAudioSession有关。我需要将音频会话类别设置为PlayAndRecord。我的应用程序的其他部分是将其设置为Ambient。这篇文章https://stackoverflow.com/a/10287793/1009125给了我答案。希望这有助于某人,我在这个星期天失去了一个星期天。