【问题标题】:HLS audio stream fails to resume play after time in background (AVPlayer refuses to buffer)HLS 音频流在后台一段时间后无法恢复播放(AVPlayer 拒绝缓冲)
【发布时间】:2021-05-06 04:50:07
【问题描述】:

我有一个专门用于播放 HLS 音频流内容的 iOS 应用。

该应用支持时移 - 您可以向后跳过、向前跳过、向后/向前擦洗,以及暂停流和取消暂停到您离开的地方。

该应用在前台运行时运行良好。在后台积极播放时它也能正常工作(我正确设置了背景音频权限)。

但是,如果应用程序在音频暂停的情况下进入后台超过几分钟(似乎是 30 秒左右),或者 A) 用户取消暂停音频, 或 B) 用户将应用程序返回到前台并尝试从那里取消暂停,即使等待片刻,音频也不会播放。请注意,在此期间应用进程不会被终止。

要暂停和取消暂停,我使用AVPlayerpauseplay 方法。

在查看它时,我验证了缓冲区(通过查看loadedTimeRanges 确定)在正常播放期间已被填充,但在暂停的应用程序进入后台后很快就会被清空。如果应用程序足够快地返回到前台,则缓冲区会再次开始填充,并且可以恢复播放。否则 - 如果用户将应用程序移至后台约 30 秒 - 缓冲区根本不会重新填充并尝试再次播放失败直到AVPlayerItem重新-配置好了。

我意识到不能保证缓冲区总是有内容(即,它可以被清空以最小化内存占用,我怀疑这里就是这种情况),但希望AVPlayer 开始加载音频当播放恢复时,根据需要再次从中获取。即使它已经在后台运行了一段时间。

有人知道为什么会发生这种情况或如何解决它吗?

注意:我创建了一个简单的 iOS 14+ Xcode 示例项目,该项目使用已知的 HLS 流显示了该问题。点击“配置”以加载 URL,然后播放/暂停以显示问题(我添加了显示loadedTimeRanges 状态的控制台输出)。

https://tapestryapps.com/AudioTestbed.zip

谢谢。

【问题讨论】:

  • 你在 iOS 14.4 上试过了吗?它似乎在其他 iOS 14 版本上被破坏了,你必须在那里重新创建 AVPlayerItem

标签: ios swift avfoundation avplayer http-live-streaming


【解决方案1】:

该代码适用于我在 iOS 13.5.1 和 iOS 14.4 上,但在 14.0.1 上失败。 它看起来像一个iOS错误。您可以通过在受影响系统上返回前台时重新创建 AVPlayerItem 来解决此问题。

【讨论】:

  • 你能解释一下在什么情况下你会重新创建播放器项吗?
  • 当您在 [我认为] 14.4 之前的所有 iOS 14 版本上以暂停的音频返回前台时。
猜你喜欢
  • 1970-01-01
  • 2020-05-15
  • 2018-11-06
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多