【问题标题】:background audio recording in iOSiOS中的后台录音
【发布时间】:2011-06-28 20:11:43
【问题描述】:

我已经广泛搜索了有关如何在后台录制音频的文档,并得出结论,在 plist 文件中指定“音频”可能有效。但是,由于 iOS 4 会在内存不足时终止后台应用程序,因此我们还必须采取一些措施来减少在过渡到后台时的内存使用量。我们如何减少内存使用量?

另外,有人知道在 iOS 上录制音频的可靠方法吗??

我取消选中 Info.plist 文件中“应用程序不在后台运行”的框,并添加了

<key> UIBackgroundModes </ key> < array> < string> audio</ string></ array>

Info.plist。但是,只要我按下“HOME”按钮,录制就会停止。

我们实现了哪些回调来知道应用程序已经进入后台? 请指教。

【问题讨论】:

  • 我自己正在寻找这个问题的答案......你设法让它工作了吗?

标签: ios ios4 background multitasking audio-recording


【解决方案1】:

以防万一其他人在这里寻找答案,我通过将 UIBackgroundModes 数组添加到 plist 并添加“音频”作为项目 0 来开始工作。

我在退出时释放了所有内存/控制器,就像您通过退出应用程序一样,所以剩下的就是应用程序使用的缓冲区(我分配了大约 1Mb,虽然这让我有点紧张,但它似乎有工作!)我想降低保真度也会有所帮助,但它似乎可以正常工作。

在我的核心音频设置中,我必须将缓冲区大小从 1024 更改为 4096 或明确设置缓冲区大小...我选择了后者,因为延迟是一个问题。

NSTimeInterval iobuffersize = (float)1024.0f/SAMPLE_RATE);
sizeofdata = sizeof(iobuffersize);
AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, &sizeofdata, &iobuffersize);

我还必须确保它不会通过不启用“不在后台运行”选项而在退出时杀死应用程序,但是无论如何默认情况下这应该是关闭的。

所以我想我回答这个问题是为了让其他人放心,毕竟它不需要太多设置。

然而,我在蓝牙设置方面遇到了问题,我猜这是因为缓冲区大小再次发生变化,但无法弄清楚这一点……通过recordingCallback 呈现数据时,只需得到-50 = 无效属性警告。我猜这是频率/样本大小,但谁知道...稍后再看,但似乎背景现在可以工作了。

【讨论】:

  • 是的,BT 问题是由于采样频率变为 8KHz 并且需要调整缓冲区以匹配。
【解决方案2】:

除了在 plist 文件中指定后台录制外,我们还可以实现 applicationDidEnterBackground,它会告诉我们应用程序何时进入后台。在这里,我们应该停止对 UI 的任何更新,因为这会消耗内存,例如更新计时器和均衡器。

调用 applicationWillEnterForeground 将在应用程序返回前台之前调用,因此我们可以恢复我们停止的任何内容。

然后在后台进行录制。它还有助于实现一个中断监听器(这也适用于背景),这样您就不会丢失您的录音。

【讨论】:

  • 能否提供一些编码示例或链接。我也需要这样做。
猜你喜欢
  • 2012-09-14
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多