【问题标题】:Removing AVPlayerItem observers删除 AVPlayerItem 观察者
【发布时间】:2014-09-08 16:56:32
【问题描述】:

如果我像这样使用 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],它是否也会删除每个项目的观察者?

【问题讨论】:

    标签: iphone avqueueplayer avplayeritem


    【解决方案1】:

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

    1) 项目播放完毕后,我是否需要移除我的观察者? (即在 AVPlayerItemDidPlayToEndTimeNotification 中)

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

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

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

    【讨论】:

    • 你也可以使用 AVPlayerItem removeObserver:forKeyPath 方法来移除特定键的观察者。
    • 我在全球范围内有多个 AVPlayerItem,因为它可以跨多个视图控制器播放。如果我在播放器上调用 removeAllItems,它会删除观察者吗?但是默认情况下,当一个项目完成播放时它不会?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多