2013-10-04 38 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

你有沒有嘗試過不同的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和value,它也適用於5S。

+2

這很令人不安,它實際上確實能夠做到這一點,但爲什麼? – Rob

+0

@Rob我完全同意。我接受了自己的回答,因爲它解決了問題。但我同意我也很想知道爲什麼會出現這種情況。 – codyko

+1

我遇到了類似的情況,但在視網膜iPad mini上。如果我刪除'AVEncoderBitRateKey'或'AVFormatIDKey',它會記錄。如果我將這兩個人都離開,那不會。不知道爲什麼。我相信這個代碼在第三代iPad上工作。 *也許*與64位處理器有關? – swilliams

0

看起來它實際上是AVNumberOfChannelsKeyAVEncoderBitRateKey之間的交互。當通道數量= 1時,我似乎無法記錄64000Kbps以上,但是當它= 2時,我可以使用128000 ...

0

我有同樣的問題 - 答案證明與AVAudioSession有關。我需要將音頻會話類別設置爲PlayAndRecord。我的應用程序的其他部分將其設置爲Ambient。這篇文章https://stackoverflow.com/a/10287793/1009125給了我答案。希望這有助於某人,我在這個星期天失去了一個星期天。

相關問題