连接丢失后iOS AVPlayer缓慢重新缓冲

时间:2012-08-17 16:07:26

标签: ios streaming buffer avplayer

我正在使用AVPlayer构建音乐流媒体应用。 一切都很好,音乐在后台播放等等。 我的问题是,当我模拟手机上的连接丢失(关闭蜂窝数据,等待流停止然后切换回来)时,即使存在3G网络,应用程序也需要大约2分钟来填充缓冲区(I可以在网上冲浪)。

一切都在模拟器中工作,但不在设备上。 如果我等待2分钟,我会得到一个正确的回放类似ToKeepUp通知,从那以后一切都很好,但是重新缓冲应该只需几秒钟。当我通过关闭路由器上的带宽控制来模拟低带宽时,这是可以的,但当我通过关闭蜂窝数据来模拟载波更改并将其切换回那么长时间。

我在“playbackBufferEmpty”上调用beginInterruption,并在“playbackLikelyToKeepUp”上调用endInterruption。主要问题是“playbackLikelyToKeepUp”来得太晚了。

- (void)beginInterruption {
self.backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
}

- (void)endInterruptionWithFlags:(NSUInteger)flags {
    [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskIdentifier];
    self.backgroundTaskIdentifier = UIBackgroundTaskInvalid;
    if(self.interrupted) [self play];
    self.interrupted = NO;
}

有什么想法吗?我花了一整天的时间来处理这个问题,谷歌搜索了一切,但我被卡住了。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

几个月前我遇到了同样的情况,我的结论是“playbackLikelyToKeepUp不可靠”。

我的解决方案是手动检查缓冲的TimeRange。

仅供参考,我制作了一个用于远程媒体播放的AVPlayer课程 - HysteriaPlayer 您可以直接使用它,也可以查找.m文件。

希望这有帮助。