我正在开发一款支持视频播放的应用,类似于Snapchat正在做的事情(您可以点击一堆远程视频)。点击几个视频后,缓冲似乎变得更慢,并在您继续前进的某个时刻完全停下来。听起来很像我的内存泄漏。AVPlayers缓冲时间较慢
在乐器中深入研究之后,我发现所有AVPlayers,AVPlayerItems和AVPlayerLayers都可以正确解除分配。我找到的唯一泄漏是这些:
然而,通过研究连接图形和内存使用情况,我可以清楚地看到,即使是解聘视频播放器和坐在应用的摄像机视图后,一些缓冲仍在发生。网络活动保持相当高的水平,内存缓慢增长。
为了更好地了解我如何进行视频播放,下面是一个简短的解释。我有一个VideoPlayer对象,我只启动其中一个,然后给它新的资源来播放。在给它一个新的资产之前,我打电话stopBuffering
,只是为了确保没有任何东西被抛在后面(我们都看到这是多么成功)。
- (void)stopBuffering
{
[self removeObservers];
[self.player pause];
[self.avPlayer replaceCurrentItemWithPlayerItem:nil];
self.avPlayer = nil;
self.player = nil;
self.playerItem = nil;
}
我已验证每次新资产加载时都会调用此方法。 这是所有堆&匿名VM图,其中第一代在任何视频播放之前,第三代在离开视频播放器之后。在这之间,我迅速跳过了大约20个视频。