13

所以我使用 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 之外的所有设备。有谁知道这可能是什么原因造成的?

4

3 回答 3

28

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

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

仍然不确定为什么只有 iPhone 5S 才会出现这种情况。同样,我已经在运行 iOS6 和 iOS7 的所有其他设备上进行了测试,旧的设置字典在除 5S 之外的所有设备上都可以正常工作。现在我已经删除了 AVEncoderBitRateKey 和值,它也适用于 5S。

于 2013-10-17T23:02:50.733 回答
0

看起来它实际上是 和 之间的AVNumberOfChannelsKey交互AVEncoderBitRateKey。当频道数 = 1 时,我似乎无法录制高于 64000Kbps,但当它 = 2 时,我可以使用 128000 ...

于 2013-11-01T06:32:42.643 回答
0

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

于 2014-08-25T03:05:08.133 回答