2013-10-04 25 views
13

AVAudioRecorderを使用して、ビデオを録画しているAVCaptureSessionと一緒にオーディオを録音しています(これは奇妙なことですが、自分の状況では別に録音する必要があります)。AVAudioRecorderがiPhone 5Sで動作しない

私の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

あなたの携帯電話またはそのOSに問題がないことを確認するために、別の5Sを試しましたか? – HalR

+0

はい、これは私がテストした5Sごとに発生します。 – codyko

+0

はい、5Sを試しましたが、動作していません。私のiPad2(ios7)iPhone4(IOS7)はうまくいきます。これは本当に奇妙です。 – user418751

答えて

28

もう少し掘り出して、明らかに解決策を見つけましたか?私は単にAVEncoderBitRateKeyを取り除き、すべて正常に動作します。これで、私のrecordSettings辞書は次のようになります:

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

これはなぜiPhone 5Sの場合にしか当てはまりませんか。ここでも、iOS6とiOS7を実行している他のすべてのデバイスでテストしました。古い設定の辞書は、5S以外のすべてでうまく動作します。 AVEncoderBitRateKeyと値を削除したので、5Sでも動作します。

+2

これはかなり戸惑うものですが、実際にはこれを行うには効果がありますが、なぜですか? – Rob

+0

@Rob私は完全に同意します。私はそれが問題を解決するため、私自身の答えを答えとして受け入れました。しかし、なぜこれが当てはまるのか、私も気に入っていることに同意します。 – codyko

+1

私は同様の状況に陥っていますが、網膜のiPad mini上で動作しています。 'AVEncoderBitRateKey'または' AVFormatIDKey'を取り除くと、それが記録されます。それらの両方を残すと、それはできません。理由は分かりません。私はこのコードが第3世代のiPadで動作したと信じています。 *多分* 64ビットプロセッサと何か関係がありますか? – swilliams

0

実際にはAVNumberOfChannelsKeyAVEncoderBitRateKeyの間のやりとりのようです。チャネル数= 1のときは64000Kbpsを超えて記録することはできませんが、2のときは128000を使用できます。

0

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

関連する問題