移除AVPlayerItem观察器

4

如果我想用KVO来观察我的播放器项目,可以像这样:

    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];
    [playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:MyClassKVOContext];
    [playerItem addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:MyClassKVOContext];
    [playerItem addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionNew context:MyClassKVOContext];
    [playerItem addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:MyClassKVOContext];

两个问题:

1)当项目完成播放时(即在AVPlayerItemDidPlayToEndTimeNotification中),我需要删除观察者吗?

2)如果我调用[_avQueuePlayer removeAllItems],它是否也会删除每个项目的观察者?

1个回答

1

创建全局的播放器对象(AVPlayerItem *playerItem),并设置它的属性,并合成它。

1) 当项目完成播放时(即在AVPlayerItemDidPlayToEndTimeNotification中),我需要删除我的观察者吗?

是的,在您要离开包含正在播放该播放器的视图控制器之前,需要删除所有观察者。不是在完成播放后。

2) 如果我调用[_avQueuePlayer removeAllItems],它也会删除每个项目的观察者吗?

是的,它将删除为该全局变量设置的所有观察者。


你也可以使用AVPlayerItem的removeObserver:forKeyPath方法来移除特定键的观察者。 - Deepak
我有多个AVPlayerItem全局,因为它在多个视图控制器中播放。如果我在播放器上调用removeAllItems,它会删除观察者吗?但是默认情况下,当项目完成播放时,它不会删除观察者? - Oren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接