我正在使用AVPlayer构建一个音乐流媒体应用程序。一切都很好,音乐一直在后台播放等等。我的问题是,当我在手机上模拟连接丢失时(关闭蜂窝数据,等待流停止,然后切换回来),即使有3G网络存在,应用程序也需要大约2分钟的时间来填充缓冲区(同时我可以上网)。
所有的东西都是在模拟器里工作的,而不是在设备上。如果我等待2分钟,我将得到一个适当的playbackLikelyToKeepUp通知,从这一切都是好的,但这种拒绝应该只是几秒钟。当我通过关闭路由器上的带宽控制来模拟低带宽时是可以的,但是当我模拟载波通过关闭蜂窝数据并将它切换回那么长的时间来改变时。
我用"playbackBufferEmpty“打电话给endInterruption,用"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;
}有什么想法吗?我花了一整天的时间在这个问题上,搜索了所有的东西,但是我被困住了。提前谢谢。
发布于 2013-04-02 10:41:15
几个月前,我也经历过同样的情况,我的结论是"playbackLikelyToKeepUp不可靠“。
我的解决方案是手动检查缓冲TimeRange的。
HysteriaPlayer.:FYI,我为远程媒体播放创建了一个AVPlayer类- -,您可以直接使用它,或者查找.m文件。
希望这能有所帮助。
https://stackoverflow.com/questions/12009277
复制相似问题