首先,感谢您的帮助。iOS AVPlayer播放大量视频并导致内存过高
的问题:
1.I需要测试大量videos.I写了两个方法来测试视频。
2.当播放视频状态发生变化时,我设置avPlayer = nil和avPlayerItem = nil,我也添加@autoreleasepool {},但内存缓慢增加,我使用了这些工具,但没有找到内存泄漏,我发现很多问题并没有找到解决方案。
3.Here是我的代码:
-(void)CheckVideoURlCanPlay{
@autoreleasepool {
VideoPlayDataObj *videoPlay = [self.needCheckArr objectAtIndex:0];
NSString *str = videoPlay.videoURL;
NSURL *url = [NSURL URLWithString:str];
self.playItem = [AVPlayerItem playerItemWithURL:url];
self.player = [AVPlayer playerWithPlayerItem:self.playItem];
self.playLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
self.playLayer.videoGravity = AVLayerVideoGravityResizeAspect;
self.playLayer.frame=CGRectMake(100, 80, 100, 100);
[self.view.layer addSublayer:self.playLayer];
[self.player play];
[self.playItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];
}}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
@autoreleasepool {
if ([keyPath isEqualToString:@"status"]) {
if (self.player.currentItem.status == AVPlayerItemStatusReadyToPlay) {
@autoreleasepool {
[self.player.currentItem.asset cancelLoading];
[self.player.currentItem cancelPendingSeeks];
[self.player cancelPendingPrerolls];
[self.playItem removeObserver:self forKeyPath:@"status"];
self.playItem = nil;
self.player = nil;
}
[self.needCheckArr removeObjectAtIndex:0];
[NSThread sleepForTimeInterval:5];
[self CheckVideoURlCanPlay];
}
}
}
}
4,我也试图缓解当前视图,但它并不能免除所有。如果你播放大量视频内存会很高,最终的应用程序将被杀死。
5.我不知道加载视频后是否会产生脏内存?
这是我的应用程序启动内存:13M 本次测试的一些视频和我弹出的看法:再次 enter image description here 本次测试的一些视频和流行的观点: enter image description here
6.Finally,我希望你能帮助我,非常感谢你。
是的,这是我的错,但问题不在这里,我尝试添加到它,但它不起作用。 –
你是什么意思“它不工作”?它崩溃? – damian
是的,我发现这个代码导致了这个问题。 self.player = [AVPlayer playerWithPlayerItem:self.playItem];我不知道如何解决。 –