iOS AVPlayer在连接断开后缓慢重新缓冲。

7

我正在使用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;
}

有什么想法吗?我已经花了一整天的时间来处理这个问题,搜索了所有可能的信息,但是还是被卡住了。 提前感谢您的帮助。
1个回答

2

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

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

顺便提一下,我制作了一个用于远程媒体播放的AVPlayer类 - HysteriaPlayer你可以直接使用它,或者查看.m文件。

希望这能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接