iOS AVPlayer 在应用程序后台然后屏幕锁定后不播放播放列表中的下一首歌曲

iOS AVPlayer Does Not Play the Next Song in a Playlist After App is Backgrounded Then Screen is Locked

我正在开发这个 iOS 应用程序,它可以播放来自 URL 的音乐。目前,当应用处于前台、后台甚至屏幕锁定时通过播放列表播放都没有问题,仅当应用在锁定前处于前台时。

如果应用程序在后台运行然后锁屏,下一首歌曲将加载,但不会播放。

我的问题是:当应用程序处于后台且屏幕被锁定时,如何让 AVPlayer 播放列表中的下一首歌曲?

下面是我用来加载和播放歌曲的代码...

- (void)loadNextSong {
    if (self.playlistIndex < self.playlist.count-1) { //check to see if the next track is in bounds of the playlist array
        self.playlistIndex++;
        [self.player pause];
        [self serviceDidFetchSong:self.playlist[self.playlistIndex]];
        [self.player play];

    } else { //play the first song if we reach the end of the playlist
        self.playlistIndex = 0;
        [self.player pause];
        [self serviceDidFetchSong:self.playlist[self.playlistIndex]];
        [self.player play];
        }
    }

- (void)serviceDidFetchSong:(Song *)song {
    if (song.audioFileURL != nil) {

        if (![self.song.audioFileURL isEqual:song.audioFileURL]) {
            if (self.timeIntervalObserver) {
                [self.player removeTimeObserver:self.timeIntervalObserver];
            }

            AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:song.audioFileURL options:0];
            AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithAsset:asset];

            self.player = [[AVPlayer alloc] initWithPlayerItem:playerItem];

            //this is just for a visual of the song progress
            __block __weak SongPlayerViewController *blockSelf = self;
            self.timeIntervalObserver = [self.player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds((1.0f/5.0f), NSEC_PER_SEC)
                                                                                  queue:NULL
                                                                             usingBlock:^(CMTime time){
                                                                                 [blockSelf updateProgressBar];
                                                                             }];
        }

        self.song = song;
    }
}

在尝试使用一些控制台日志和断点进行调试后,我已验证肯定会调用 [self.player play] 并且每次都会加载正确的 URL。

我的 info.plist 文件为所需的背景模式启用了音频和提取。

当应用程序已后台且屏幕已锁定时,下一首歌曲似乎根本无法播放。

如有任何见解或建议,我们将不胜感激。谢谢。

编辑 这似乎是一个间歇性问题,自 iOS 9.3 发布以来出现频率大大降低,这让我相信这可能与 OS...?

有关

玩两遍就可以了

玩家?.play()

玩家?.play()