2011-03-24 74 views
3

我想找出一種方法來在iOS應用程序的背景中錄製音頻,並將其傳輸到服務器。在後臺錄製分塊的音頻iOS

我幾乎得到了這個工作,當應用程序在前臺。我使用AVAudioRecorder記錄輸入X秒。一旦我得到了這個完成的回調,我再記錄X秒。每個記錄會話都存儲到不同的文件,並將這些文件異步發送到服務器。

但是,這似乎並沒有工作,而我的應用程序進入後臺模式。

當進入後臺時,當前記錄會話將繼續記錄,直到X秒結束,但是我的應用程序被暫停,然後才能開始另一個記錄會話。

任何想法?

下面是我的回調代碼:

- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)aRecorder successfully:(BOOL)flag { 
    NSLog(@"hello"); 

    [self initRecorder]; 

    [recorder recordForDuration:5]; 

} 

回答

6

您不能重新啓動在後臺記錄。

因此,請改用音頻隊列或音頻單元RemoteIO API,這樣可以在不停止錄音的情況下爲您提供更小的「塊」(回調緩衝區塊)。

如果您的網絡協議需要,將小音頻回調塊連接成更大的文件塊。

+0

THanks - 在深入瞭解文檔之前瞭解Audio Queue的所有優秀教程? – aloo 2011-03-24 16:18:06

+0

@aloo - 查看Apple的SpeakHere示例iOS應用程序的源代碼。 – hotpaw2 2011-03-24 16:20:07

+0

SpeakHere無法在背景中記錄,但我會仔細觀察一下,看看我能從中學到什麼。感謝 – aloo 2011-03-24 16:53:38

1

後臺音頻播放支持多任務處理,但背景音頻記錄不是很清楚。但是,我沒有嘗試過。音頻單元API可以讓您在應用程序處於後臺時繼續錄製音頻。然而,這是一種詭計,我想可能會在某個時候被剔除。

+1

我懷疑這個功能是否會被刪除。它是音頻單元的組成部分。有一些設置會在應用程序進入後臺時自動更改緩衝區長度,以節省電量。該設置可以在音頻會話中被覆蓋。 – 2011-12-10 13:56:52