【问题标题】:Multipeer Connectivity audio streaming stop work on backgroundMultipeer Connectivity 音频流停止在后台工作
【发布时间】:2014-03-18 09:29:56
【问题描述】:

我正在使用 iOS 7 的 Multipeer Connectivity 框架进行一些音频流传输。流式传输运行良好,但当我将应用置于后台时,它停止工作。

有人可以告诉我这是框架限制,还是我做错了什么?

  • 如果是框架限制,是否可以采取措施避免这种情况?

  • 我可以使用后台任务来保持流媒体和音乐在后台运行吗?

  • 可以这样做吗?如果不可能,在 iOS 设备之间是否存在 MultiPeer 音频流的替代方案?

我正在使用这个例子:https://github.com/tonyd256/TDAudioStreamer

在此页面上解释:http://robots.thoughtbot.com/streaming-audio-to-multiple-listeners-via-ios-multipeer-connectivity

非常感谢!

【问题讨论】:

  • 关于这个主题的任何更新?您的应用在审核期间被拒绝了吗?我阅读了至少一个示例应用程序,该应用程序将音频流式传输到多个 iOS 设备并从 App Store 中删除。
  • 我用过 TDAudioStreamer 但它不播放音频它只是显示歌曲文件的图像和信息。你能告诉我你是如何实施的吗?

标签: iphone objective-c ios7 audio-streaming multipeer-connectivity


【解决方案1】:

Apple documentation for playing audio in the background 上(向下滚动一点)。一些相关段落:

当 UIBackgroundModes 键包含音频值时,系统的媒体框架会自动阻止相应的应用程序在移动到后台时被挂起。只要它正在播放音频或视频内容或录制音频内容,应用程序就会继续在后台运行。但是,如果录制或播放停止,系统会暂停应用程序。

您可以使用任何系统音频框架来处理背景音频内容,并且使用这些框架的过程没有改变。

这意味着,只要您正确配置了应用以在后台播放音频,iOS 就应该识别出您正在通过 Core Audio 播放音频,并让您的应用保持未暂停状态。

因为您的应用在播放媒体文件时没有暂停,所以当您的应用在后台时,回调正常运行。但是,在您的回调中,您应该只做为回放提供数据所需的工作。例如,流式音频应用程序需要从其服务器下载音乐流数据并将当前音频样本推送出去以进行播放。应用不应执行任何与播放无关的无关任务。

只要您的应用仍在播放音频,您就应该能够正常运行,并且可以执行所需的操作以继续播放音频。这意味着您应该能够在后台继续使用 MPC 来接收并播放音频数据。

请务必阅读有关该主题的完整文档,尤其是有关 Audio Sessions 的文档。

【讨论】:

  • 你有所有的理由,真的谢谢!。嗯,我需要等待 19 小时才能获得您的积分:D!
  • 这在 2019 年仍然准确吗?我的理解是,如果没有 UIBackgroundModes 中的“voip”键,网络活动(使用 MultipeerConnectivity)可能会在后台操作约 10 分钟后被阻止。
【解决方案2】:

iOS 设备在被用户设置为后台时,会因明确目的而获得有限的 cpu 周期。

根据Apple's documentation关于多任务和后台执行,支持以下类型的应用程序,但必须明确声明:

  • 在后台向用户播放有声内容的应用,例如音乐播放器应用
  • 在后台录制音频内容的应用程序。
  • 让用户随时了解其位置的应用,例如导航应用
  • 支持互联网协议语音 (VoIP) 的应用
  • 需要定期下载和处理新内容的应用
  • 从外部附件接收定期更新的应用

您的案件属于Apps that play audible content to the user while in the background, such as a music player app。您可以从上面提供的链接中找到更多信息。

【讨论】:

  • 您描述的后台模式是通过网络进行后台下载以保持数据最新。它不适用于多点流媒体之类的东西。这只会每隔几个小时调用一次,以使应用程序中的内容保持最新,不定期且由 iOS 系统本身确定。
  • 谢谢,但如果 MultiPeer Connectivity 框架无法实现,我还能做什么?同时将音乐流式传输到多个设备还有其他替代方案吗?我读了很多书,但我找不到正确的方法。
  • 数据是否总是来自一台设备?
  • 这个想法是为连接到多对等会话的任何设备生成数据,但是如果您知道从一台设备执行此操作的一种方法,无论如何,这对我很有用。
  • 好吧,如果您可以只从一台设备发起,那么您可以在“主机”设备上使用网络服务器。否则,我认为您可能对 MPC 不走运。您可以尝试使用音频背景模式,但您的应用似乎并未属于涵盖的用例(本地、URL、Airplay)。不过值得一试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多