草庐IT

关于 iphone:Multipeer Connectivity 音频流停止在后台工作

codeneng 2023-03-28 原文

Multipeer Connectivity audio streaming stop work on background

我正在使用 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,但它不播放音频,它只是显示歌曲文件的图像和信息。你能建议我你是如何实施的吗?


关于在后台播放音频的 Apple 文档(向下滚动一点)。一些相关段落:

When the UIBackgroundModes key contains the audio value, the system’s media frameworks automatically prevent the corresponding app from being suspended when it moves to the background. As long as it is playing audio or video content or recording audio content, the app continues to run in the background. However, if recording or playback stops, the system suspends the app.

You can use any of the system audio frameworks to work with background audio content, and the process for using those frameworks is unchanged.

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

Because your app is not suspended while playing media files, callbacks operate normally while your app is in the background. In your callbacks, though, you should do only the work necessary to provide data for playback. For example, a streaming audio app would need to download the music stream data from its server and push the current audio samples out for playback. Apps should not perform any extraneous tasks that are unrelated to playback.

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

请务必阅读有关该主题的完整文档,尤其是有关音频会话的文档。

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


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

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

  • 在后台向用户播放有声内容的应用程序,例如音乐播放器应用程序
  • 在后台录制音频内容的应用程序。
  • 让用户随时了解其位置的应用程序,例如导航应用程序
  • 支持互联网协议语音 (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)中。不过,它值得一试。
  • 是的,我正在考虑设备上的网络服务器选项(CocoaHTTPServer),并通过 http 或类似的方式传输数据,但我需要为此生成一个本地主机? ,我正在阅读这个,但在一些苹果文档中,说从代码中执行此操作是不可能的,并且这种方式会消耗大量电池,我想这样做的唯一方法是由用户手动执行。你怎么看?
  • Standby :D Joel 的答案不应该让你放弃大部分工作。

有关关于 iphone:Multipeer Connectivity 音频流停止在后台工作的更多相关文章

  1. ruby-on-rails - 关于 Ruby 的一般问题 - 2

    我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia

  2. ruby - 使用 Ruby Daemons gem 检测停止 - 2

    我正在使用rubydaemongem。想知道如何向停止操作添加一些额外的步骤?希望我能检测到停止被调用,并向其添加一些额外的代码。任何人都知道我如何才能做到这一点? 最佳答案 查看守护程序gem代码,它似乎没有用于此目的的明显扩展点。但是,我想知道(在守护进程中)您是否可以捕获守护进程在发生“停止”时发送的KILL/TERM信号...?trap("TERM")do#executeyourextracodehereend或者你可以安装一个at_exit钩子(Hook):-at_exitdo#executeyourextracodehe

  3. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  4. ruby - 关于 Ruby 中 Dir[] 和 File.join() 的混淆 - 2

    我在Ruby中遇到了一个关于Dir[]和File.join()的简单程序,blobs_dir='/path/to/dir'Dir[File.join(blobs_dir,"**","*")].eachdo|file|FileUtils.rm_rf(file)ifFile.symlink?(file)我有两个困惑:首先,File.join(@blobs_dir,"**","*")中的第二个和第三个参数是什么意思?其次,Dir[]在Ruby中有什么用?我只知道它等价于Dir.glob(),但是,我对Dir.glob()确实不是很清楚。 最佳答案

  5. ruby - 如何停止 jekyll 本地服务器 - 2

    我刚刚在本地设置了我的第一个Jekyll项目。我已经让服务器运行,但我忘了使用自动标志。所以现在我想停止服务器并使用标志重新启动。但是,在我启动服务器后的命令行中,我没有得到新的提示,所以我无法输入任何新命令。我不太习惯命令行,所以我真的很感激知道我应该做什么!我正在使用MacOSX和terminal.app,如果有区别的话! 最佳答案 psaux|grepjekyll|awk'{print$2}'|xargskill-9 关于ruby-如何停止jekyll本地服务器,我们在StackO

  6. elasticsearch源码关于TransportSearchAction【阶段三】 - 2

    1.回顾.TransportServicepublicclassTransportServiceextendsAbstractLifecycleComponentTransportService:方法:1publicfinalTextendsTransportResponse>voidsendRequest(finalTransport.Connectionconnection,finalStringaction,finalTransportRequestrequest,finalTransportRequestOptionsoptions,TransportResponseHandlerT>

  7. 关于Qt程序打包后运行库依赖的常见问题分析及解决方法 - 2

    目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'

  8. ruby-on-rails - EC2 实例在负载均衡器中停止服务 - 2

    我有一个EC2实例正在运行。我有一个负载均衡器,它与EC2实例相关联。PingTarget:HTTP:3001/healthCheckTimeout:5secondsInterval:24secondsUnhealthythreshold:2Healthythreshold:10现在该实例显示为OutofService。我什至尝试更改监听端口等等。一切正常,直到重新启动我的EC2实例。任何帮助将不胜感激。仅供引用:我有一个在端口3001上运行的Rails应用程序,我有一个用于HTTP:80(loadbalancer)到HTTP:3001的监听器。我还在终端中通过ssh检查了正在运行的应

  9. c - ruby的rb_raise如何停止调用它的c函数的执行? - 2

    如果你在C中将一个ruby​​方法写成一个使用rb_raise的函数,调用后的函数部分将不会被执行,程序将停止,你会认为rb_raise使用了exit()。但是如果你在ruby​​中拯救异常,比如:beginmethod_that_raises_an_exceptionrescueendputs'Youwilstillgethere.'ruby代码将继续,但您的函数将停止执行。rb_raise如何实现这一目标? 最佳答案 推测它使用了setjmp(在调用方法之前)和longjmp(在rb_raise中)。

  10. ruby - 停止分布式 Ruby 服务 - 2

    我有一个启动DRb服务的脚本,然后生成处理程序对象并通过DRb.thread.join等待。我希望脚本一直运行直到被明确杀死,所以我添加了trap"INT"doDRb.stop_serviceend在Ruby1.8下成功停止DRb服务并退出,但在1.9下似乎死锁(在OSX10.6.7上)。对该进程进行采样显示在semaphore_wait_signal_trap中有几个线程在旋转。我假设我在调用stop_service时做错了什么,但我不确定是什么。谁能给我任何关于如何正确处理它的指示? 最佳答案 好的,我想我已经找到了解决方案。如

随机推荐