后台viewcontroller中的AVPlayer缓冲视频会导致内存问题

时间:2017-01-11 19:55:04

标签: ios objective-c avplayer

我正在制作一个带有AVPlayer的viewcontroller的直播电视流媒体应用。

- (void)viewDidLoad {
    self.playerViewController = [[AVPlayerViewController alloc] init];
    self.playerViewController.player = [AVPlayer playerWithURL:[NSURL URLWithString:StreamURL]];
    [self addChildViewController:self.playerViewController];
    [self.view addSubview:self.playerViewController.view];
    [self.playerViewController.player play];
}

我还有一个按钮,它提供了一个包含附加信息的新viewcontroller。当我呈现新的viewcontroller时,AVPlayer继续播放音频,这就是我想要的。

问题是 - 当我呈现新的视图控制器时,AVPlayer在后​​台播放音频但保持缓冲视频,当视图控制器被解除时,AVPlayer快速转发视频以便它可以与音频同步。快速转发会导致内存使用量大幅增加,并且会出现内存不足警告。新的viewcontroller在前台的时间越长,当我解除它时,内存跳转就越大。

如何阻止AVPlayer缓存视频?

1 个答案:

答案 0 :(得分:0)

我可能会迟到一点,但是如果有人仍然有这个问题,我可以建议在进入背景时减少玩家缓冲。我知道这不是一个完美的答案,但这仍然会有所帮助。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(onApplicationDidEnterBackgroundNotification:)
                                             name:UIApplicationDidEnterBackgroundNotification
                                           object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(onApplicationWillEnterForegroundNotification:)
                                             name:UIApplicationWillEnterForegroundNotification
                                           object:nil];

然后

- (void)onApplicationDidEnterBackgroundNotification:(NSNotification *)notification {
    self.playerItem.preferredForwardBufferDuration = 1;
}
- (void)onApplicationWillEnterForegroundNotification:(NSNotification *)notification {
    self.playerItem.preferredForwardBufferDuration = 0;
}

也不要忘记删除dealloc中的观察者

 [[NSNotificationCenter defaultCenter] removeObserver:self];