gpt4 book ai didi

ios - AVPlayer 不在后台切换 AVPlayerItems

转载 作者:行者123 更新时间:2023-11-28 06:12:58 26 4
gpt4 key购买 nike

我正在尝试为 SoundCloud 制作一个自定义播放器,因为在 Swift-iOS(向前和向后)功能中没有对完整播放器的本地支持;然后我决定使用 AVPlayer 而不是 AVQueuePlayer。

我有一个 Tracks 类,其中包含有关我的轨道(Url)的相关信息。一个 TracksQueue,其中包含有关队列的相关信息 - 多个轨道以及是否可以通过检查轨道数组的数组索引来转发或反转逻辑。

我还在 App 设置中启用了后台模式,并添加了以下代码,正如许多人建议的那样,当 App 在我的 ViewController 的 viewDidLoad() 中启动时这样做

UIApplication.shared.beginReceivingRemoteControlEvents()

一切都按预期工作,但唯一的问题是轨道在背景中会发生变化,但不会播放。

我所做的就是从 AVPlayer 中删除观察者并启动一个新观察者,并在收到 NSNotification.Name.AVPlayerItemDidPlayToEndTime 通知后用新的 AVPlayerItem 替换当前项目。

fileprivate func restartCurrentTrack() {
if (player != nil) {
player?.removeObserver(self, forKeyPath: Keys.Status, context: &PGAudioPlayerManagetKVOContext)
}

if let _currentTrack = queue.currentTrack {
player = AVPlayer()
player.addObserver(self, forKeyPath: Keys.Status, options: NSKeyValueObservingOptions.new, context: &PGAudioPlayerManagetKVOContext)
if let _playerItem = _currentTrack.getPlayerItem() {
player?.replaceCurrentItem(with: _playerItem)
}
}
}

编辑 1:我找到了当应用程序进入后台时游戏没有发生的一个原因。我有 KVO,它通过检查播放器的状态告诉我播放器何时准备播放。只有当我收到同样的东西时,我才开始

player.play()

但是当应用程序处于后台时,它不再收到此通知。有没有什么方法可以让我在应用程序处于后台时也能收到通知?

编辑 2:澄清一下,如果音乐从前台开始播放,应用程序会播放音乐。问题是在后台更改轨道是当播放器就绪的 KVO 永远不会被触发时,除非我将应用程序带到前台。

最佳答案

我在下面的帖子中使用了 SO 上提供的信息

  1. AVPlayer Not Loading Media In Background

关于ios - AVPlayer 不在后台切换 AVPlayerItems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45967489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com