我正在使用AVPlayer构建一个音乐流应用程序。 一切正常,音乐可以在后台播放等等。 我的问题是,当我在手机上模拟连接丢失(关闭蜂窝数据,等待流媒体停止,然后重新开启)时,即使存在3G网络(我可以同时浏览网页),它也需要约2分钟才能填满缓冲区。
在模拟器中一切正常,但在设备上不行。 如果我等待2分钟,就会收到适当的播放准备好通知,从那时起一切都很好,但这种重新缓冲应该只需要几秒钟。当我通过关闭路由器上的带宽控制来模拟低带宽时,它是正常的,但是当我通过关闭蜂窝数据并将其重新打开来模拟运营商更改时,它就变得如此之长。
我在“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;
}
有什么想法吗?我已经花了一整天的时间来处理这个问题,搜索了所有可能的信息,但是还是被卡住了。 提前感谢您的帮助。