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

Skr*_*rew 7 streaming buffer ios avplayer

我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)

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

sai*_*day 2

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

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

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

希望这可以帮助。