由于间隙,AVPlayer流在后台停止

时间:2013-01-02 00:09:59

标签: ios audio-streaming avplayer

当应用处于后台模式时,由于iOS空闲AVPlayer,我正试图实现无间隙播放。

在回答之前,是的,我已经正确设置了plist修改,音频会话,一切都很好,但是我相信,我的问题本质上是不同的。

所以,起初我在我的课程中有一个方法来在每次跟踪URL改变时初始化一个新的AVPlayer,它运行良好,但在背景上并没有那么多,我虽然每次创建一个全新的AVPlayer实例不会工作所以我切换到其他几个范例,比如replaceCurrentItemWithPlayerItem保持AVPlayer实例活着,甚至AVQueuePlayer

我面临的问题是,在iOS 6上,音频停止的那一刻,因为一首曲目已经完成而另一首仍然需要加载,iPhone会在后台冻结我的应用程序。 如果我再次将我的应用程序放到前台,播放将恢复正常。

由于我没有连续流,而是要点击以开始流式传输的各个网址,我虽然使用AVPlayerQueueinsertItem:next / advanceToNextItem策略,但试图不让任何最小化音频中断以在后台冻结应用程序。

然而问题仍然存在,因为我必须按需在队列中添加新轨道,并且当缓冲iOS已经认为我的应用程序值得停止时。所以我需要在应用程序生命周期中适当的时间insertItem

然后我试着听这个KVO通知:

[self.player.currentItem addObserver:self forKeyPath:@"playbackBufferFull" options:0 context:MyPlayerItemContext];

但它永远不会被召唤。我的想法是在currentItem上跟踪缓冲区已满,并在播放列表中附加下一个缓冲区,以便AVQueuePlayer 可能尝试预缓冲它。

由于playbackBufferFull永远不会被调用,因此另一个想法是尝试并获取当前时间/持续时间,计算90%的回放可能的位置,并在适当的时间触发事件以开始缓冲下一个音轨。

听起来不好,因为对象的持续时间属性会根据渐进式传入数据而改变吗?

我可以采取哪些其他策略?

感谢。

1 个答案:

答案 0 :(得分:-1)

我使用AVQueuePlayer和AVPlayerActionAtItemEndAdvance的组合解决了这个问题。

这很棘手,但确实有效。

相关问题