AVPlayerstream媒体由于缺口而在后台停止
我试图实现无缝播放,因为当应用程序处于后台模式时,iOS会将我的AVPlayer
闲置。
在回答之前,是的,我已经修改了plist,audio会话设置正确,一切都很好,但是我相信,我的问题本质上是不同的。
所以,起初我在我的课上有一个方法来初始化一个新的AVPlayer每当轨道URL改变,它运作良好,但在后台不是很多,我虽然每次创build一个全新的AVPlayer
实例将无法正常工作,所以我切换到其他一些范例,比如replaceCurrentItemWithPlayerItem
保持AVPlayer实例活着,甚至是AVQueuePlayer
。
我面对的问题是,在iOS 6上,audio停止的时刻,因为一个轨道完成,另一个还需要加载,iPhone冻结在后台我的应用程序。 如果我再次在前台获得我的应用程序,播放恢复正常。
由于我没有连续的stream,而是单独的URL来AVPlayerQueue
stream,我虽然有关使用AVPlayerQueue
和insertItem:next
/ advanceToNextItem
策略,试图不让任何最小的audio中断冻结在后台的应用程序。
但问题仍然存在,因为我不得不在需求队列中添加新的轨道,并且缓冲iOS的时间已经认为我的应用程序值得停下来。 所以我需要在应用程序的生命周期适当的时间insertItem
。
那时我正试图听取这个KVO通知:
[self.player.currentItem addObserver:self forKeyPath:@"playbackBufferFull" options:0 context:MyPlayerItemContext];
但它永远不会被调用。 我们的想法是跟踪currentItem上的缓冲区,并在播放列表中追加下一个缓冲区,以便AVQueuePlayer 可以尝试预缓冲它。
由于playbackBufferFull
永远不会被调用,另一个想法是试图抓取当前的时间/持续时间,计算90%的回放可能在哪里,并在适当的时间触发事件来开始缓冲下一个轨道。
这听起来很糟糕,因为对象的持续时间属性会根据渐进式传入数据而改变吗?
我还能采取哪些其他策略?
谢谢。
我解决了它通过使用AVQueuePlayer和AVPlayerActionAtItemEndAdvance
的组合。
这是棘手的,但它的作品。