2012-08-17 77 views
7

我正在使用AVPlayer构建音乐流应用程序。 一切工作正常,音乐不断在后台播放等 我的问题是当我模拟手机上的连接丢失(切换蜂窝数据关闭,等待流停止,然后切换回),这将需要约2分钟即使存在3G网络,我也可以填充缓冲区(我可以在网上冲浪)。iOS AVPlayer连接丢失后缓慢重新缓冲

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

我在“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; 
} 

任何想法?我花了整整一天的时间处理这个问题,搜索了一切,但我被卡住了。 在此先感谢。

回答

2

我在几个月前遭受过同样的情况,我的结论是“播放LikelyToKeepUp不可靠”。

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

仅供参考,我做了一个AVPlayer类远程媒体播放 - HysteriaPlayer 您可以直接使用它,或查找.m文件。

希望这会有所帮助。