【发布时间】:2016-09-28 02:39:32
【问题描述】:
首先,感谢您的帮助。
问题:
1.我需要测试很多视频。我写了两个方法来测试视频。
2.播放视频状态变化时,我设置了avPlayer = nil和avPlayerItem = nil,我也加了@autoreleasepool {},但是内存慢慢变大了,我用了instruments没发现内存泄露,我找了很多问题,没有找到解决办法。
3.这是我的代码:
-(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.最后希望你能帮帮我,非常感谢。
【问题讨论】: