我正在使用AVPlayer构建音乐流媒体应用程序 . 一切都工作正常,音乐在后台播放等等 . 我的问题是当我模拟手机上的连接丢失(关闭蜂窝数据,等待流停止然后切换回来)时,大约需要2分钟应用程序即使存在3G网络也可以填充缓冲区(我可以同时在网上冲浪) .
一切都在模拟器中工作,但不在设备上 . 如果我等待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 回答
几个月前我遇到了同样的情况,我的结论是“回放很可能,但是不可靠” .
我的解决方案是手动检查缓冲的TimeRange .
FYI, I made a AVPlayer class for remote media playback - HysteriaPlayer. 您可以直接使用它,也可以查找.m文件 .
希望这可以帮助 .