我已经搜索了很多关于如何在后台录制音频的文档,并得出结论,在plist文件中指定'audio'可能有效。但是,因为iOS 4会在内存不足时终止后台应用程序,所以当我们转换到后台时,我们还必须采取一些措施来减少内存使用量。我们如何减少内存使用量?
另外,有没有人知道在iOS上背景录制音频的确定方法?
我取消选中Info.plist文件中的“应用程序无法在后台运行”的框,并添加了
<key> UIBackgroundModes </ key> < array> < string> audio</ string></ array>
Info.plist
中的。但是,只要按下“HOME”按钮,录音就会停止。
我们实现了哪些回调以了解应用程序已转到后台? 请指教。
答案 0 :(得分:4)
以防万一其他人在这里寻找答案,我通过将UIBackgroundModes数组添加到plist,将'audio'添加为Item 0来实现我的工作。
我在退出时释放所有内存/控制器,就像退出应用程序一样,所以剩下的就是应用程序使用的缓冲区(我已分配大约1Mb虽然这让我有点紧张,但似乎有工作!)我想降低保真度也会有所帮助,但似乎按原样工作。
在我的核心音频设置中,我必须将缓冲区大小从1024更改为4096或明确设置缓冲区大小...我选择了后者,因为延迟是一个问题。
NSTimeInterval iobuffersize = (float)1024.0f/SAMPLE_RATE);
sizeofdata = sizeof(iobuffersize);
AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, &sizeofdata, &iobuffersize);
我还必须确保它不会在退出时通过不启用“不在后台运行”选项来杀死应用程序,但是无论如何这应该默认关闭。
因此,我猜这是为了让其他任何人都安心回答这个问题,毕竟它确实没有太多设置。
然而我遇到蓝牙设置问题,我想这是因为缓冲区大小再次改变但是无法解决这个问题...只是通过recordingCallback渲染数据时得到-50 =无效属性警告。我猜它是频率/样本大小,但谁知道......稍后会看,但现在看起来像背景了。
答案 1 :(得分:1)
除了在plist文件中指定后台录制外,我们还可以实现applicationDidEnterBackground,它将告诉我们应用程序何时进入后台。在这里,我们应该停止对UI的任何更新,因为这会消耗内存,例如更新计时器和均衡器。
调用applicationWillEnterForeground将在app返回前台之前调用,这样我们就可以恢复停止的任何内容。
录制然后在后台进行。它也有助于实现一个中断监听器(这也适用于背景),这样你就不会丢失录音。