【问题标题】:AudioQueueServices playback in background not workingAudioQueueServices 在后台播放不起作用
【发布时间】:2018-12-31 20:11:02
【问题描述】:

使用 AudioQueueServices 播放流式 MP3 文件,当应用切换到后台时播放器停止。

我有:

  • 在“Capabilities”项目设置页面的“Background Modes”面板中,我开启了“Audio, AirPlay and Picture in Picture”和“Background fetch”
  • 在“信息”页面的“自定义 iOS 目标属性”下,添加了“必需的背景模式”节点,其中包含“应用程序使用 AirPlay 播放音频或流式传输音频/视频”和“应用程序从网络”

  • 在播放器模块的初始化代码中,我包含以下调用:

    [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &error];

    在没有错误信号的情况下完成。

根据我的日志,一旦应用切换到后台,我就停止接收任何回调,因此播放几乎立即停止。我需要做什么才能让它继续?

【问题讨论】:

  • 您是否尝试播放捆绑包中的音频是否有效?
  • 尝试设置AVAudioSessionCategoryPlayAndRecord
  • @PrashantTukadiya - 我没有尝试从捆绑包中播放,但根本看不出这会有什么不同 - 系统不知道音频数据来自哪里,因为我将它加载到内存中,然后通过缓冲区播放;从我自己的内部缓冲区重新填充音频队列缓冲区的回调永远不会被调用。更改类别没有效果。
  • 更改类别没有任何效果......除了在手机上使用时导致播放通过接收器而不是扬声器(但在模拟器上没有变化)。

标签: ios audioqueueservices ios-background-mode


【解决方案1】:
  1. 检查 AVAudioSession 是否处于活动状态
  2. 检查 AudioQueueRef 是否正在运行:

    UInt32 isRuning = NO;
    UInt32 size = sizeof(isRuning);
    AudioQueueGetProperty(inAQ, kAudioQueueProperty_IsRunning, &isRuning, &size);
    

【讨论】:

  • 在我的播放操作期间添加对AVAudioSession.sharedInstance().setActive(true) 的调用无效,因此会话似乎处于活动状态(或者无论如何还有另一个问题)。队列肯定正在运行,并在前台播放(并在应用返回前台时自动恢复播放)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多