AVAudioRecorder不支持iPhone 5S

时间:2013-10-04 23:35:01

标签: iphone ios objective-c avaudiorecorder

所以我正在使用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之外的所有设备。任何人都知道可能导致这种情况的原因吗?

3 个答案:

答案 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)

看起来它实际上是AVNumberOfChannelsKeyAVEncoderBitRateKey之间的互动。当#of channels = 1时,我似乎无法记录64000Kbps以上,但当它= 2时,我可以使用128000 ......

答案 2 :(得分:0)

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