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

Did some more digging and I apparently found the solution. I simply got rid of AVEncoderBitRateKey and everything works fine. So now my recordSettings dictionary looks like this:

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

Still not sure why this would be the case only on an iPhone 5S. Again, I've tested on all other devices running iOS6 and iOS7, and the old settings dictionary works fine on everything except for the 5S. Now that I've removed the AVEncoderBitRateKey and value, it also works on the 5S.

于 2013-10-17T23:02:50.733 に答える
0

私はこれと同じ問題を抱えていました - そして答えは AVAudioSession に関連していることが証明されました。オーディオ セッション カテゴリを PlayAndRecord に設定する必要がありました。私のアプリケーションの他の部分は、それをアンビエントに設定していました。この投稿https://stackoverflow.com/a/10287793/1009125が答えをくれました。これが誰かの役に立てば幸いです。私はこれで日曜日を失いました。

于 2014-08-25T03:05:08.133 に答える