iOS 后台录音

问题描述 投票:0回答:3

我知道,如果我在前台启动音频录制会话,并在功能 -> 后台模式中激活音频、Airplay 和画中画;即使在后台,我也可以继续录制,但前提是我在前台开始录制会话,然后进入后台。

我的问题是我想从后台启动录音会话,这可能看起来不太好,不是苹果想要的,但用例是这样的:

我有一个带有按钮和 iOS 应用程序的蓝牙 LE 设备。这两个设备已配对(蓝牙 LE 设备和运行 iOS 应用程序的 iPhone),并且 iOS 应用程序正在侦听蓝牙 LE 设备上的事件,例如按下按钮等事件。

现在,当用户点击蓝牙 LE 设备上的按钮时,iOS 应用程序会捕获该事件,即使应用程序处于后台,我也可以运行代码,但无法开始录音。

我的问题是:这可能吗?要从后台开始录音?即使我们在这里进行用户交互,不是在 iOS 应用程序上,而是在蓝牙 LE 上,所以录音不会在后台开始并且用户没有意识到,他按下了蓝牙 LE 设备上的按钮,他知道他在做什么。

任何帮助、文档、Apple 工程师的推文,任何东西都将不胜感激。谢谢。

更新:不需要 MFI。 https://mfi.apple.com/MFiWeb/getFAQ.action#1-2

如果您查看该部分:

“哪些类型的配件和技术不属于 MFi 计划的一部分?”

你会看到:

“仅使用蓝牙低功耗 (BTLE) 的配件(注意:支持 BTLE 的 HomeKit 配件和支持 BTLE 的 MFi 助听器属于 MFi 计划的一部分)”

被提及,这意味着MFI在这种情况下不是必需的

ios objective-c bluetooth background avfoundation
3个回答
6
投票

来自苹果文档

连续播放或录制音频的应用程序(即使该应用程序处于运行状态) 在后台运行)可以注册以执行这些任务 背景。您可以从后台模式部分启用音频支持 Xcode 项目中的“功能”选项卡。 (您还可以启用 通过在音频中包含 UIBackgroundModes 键来实现此支持 应用程序的 Info.plist 文件中的值。)播放音频内容的应用程序 背景必须播放有声内容而不是静音。

后台音频应用程序的典型示例包括:

音乐播放器应用程序 录音应用程序 支持音频或音频的应用程序 通过 AirPlay VoIP 应用程序播放视频

对于需要更多执行时间来实现的任务,您必须 请求特定权限以在后台运行它们,而无需 他们被停职。在 iOS 中,只允许特定的应用程序类型 在后台运行:

  • 在后台录制音频内容的应用程序

编辑:

还有关于您的“蓝牙设备”:

查看 ExternalAccessory 的文档。

请注意,您需要申请并获得特殊开发人员计划的批准才能创建外部配件。


1
投票

有用的提示::

事实证明,如果您只需将音频多任务标志添加到信息中,经过一些修改的 Apple 的 SpeakHere 示例代码将开始在后台录制音频。您可能会在 https://github.com/benvium/SpeakHere 寻找 SpeakHere 的更新版本,因为 Apple 已经有一段时间没有更新它了。


0
投票

我在这个话题上苦苦思索了好几个星期。当应用程序在后台运行时,Apple 不希望您听人说话。 当应用程序移至后台时,我最终立即激活了麦克风。

这个想法是用空代码激活麦克风 - 这意味着在您需要收听之前不会浪费电池,然后用真正的收听者替换麦克风回调。

这是我在 React Native 中构建的一个示例 并不是说下面的函数 - backgroundMicEmptyListener() 创建一个空监听器,除了调用该函数并返回之外,不使用任何 CPU。

const handleAppStateChange = (nextAppState) => {
  console.log("handleAppStateChange(): ", nextAppState);
  
  if (nextAppState === 'background') {
      console.log("nextAppState === 'background'");
      BackgroundJob.start(backgroundMicEmptyListener, backgroundOptions)
      .then(() => {
          console.log('Background job started successfully');
      })
      .catch((err) => {
          console.error('Error starting background job:', err);
      });
  }
 

我知道这不是最好的解决方案,但却是我找到的唯一解决方案。

我将其用于 VAD 和唤醒词检测,效果非常好。

© www.soinside.com 2019 - 2024. All rights reserved.