7

我正在使用 AVPlayer 构建一个音乐流媒体应用程序。一切正常,音乐一直在后台播放,等等。我的问题是当我在手机上模拟连接丢失(关闭蜂窝数据,等待流停止然后再切换回来)时,大约需要 2 分钟即使存在 3G 网络(我可以同时上网),应用程序也会填充缓冲区。

一切都在模拟器中工作,但不在设备上。如果我等待 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;
}

有任何想法吗?我整天都在处理这个问题,用谷歌搜索了所有内容,但我被困住了。提前致谢。

4

1 回答 1

2

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

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

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

希望这可以帮助。

于 2013-04-02T10:41:15.253 回答