我正在制作一个带有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
缓存视频?
答案 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];