为啥 AVPlayerItem 不触发它的通知?

Posted

技术标签:

【中文标题】为啥 AVPlayerItem 不触发它的通知?【英文标题】:Why is AVPlayerItem not firing its notifications?为什么 AVPlayerItem 不触发它的通知? 【发布时间】:2016-06-30 17:30:50 【问题描述】:

我已经尝试了所有AVPlayerItem 通知,但没有运气...... 应该发布通知时什么都没有发生。

我正在尝试从 WKWebView 中的网站下载视频

这是我在 swift 3.0 中的代码

override func viewDidLoad() 
    super.viewDidLoad()

    NotificationCenter.default().addObserver(self, selector: #selector(self.downloadAudioVisualItem), name: NSNotification.Name.AVPlayerItemNewAccessLogEntry, object: nil)


func downloadAudioVisualItem() 
    print("Hello")


override func viewDidDisappear(_ animated: Bool) 
    super.viewDidDisappear(false)

    NotificationCenter.default().removeObserver(self)

【问题讨论】:

把代码贴到你写downloadAudioVisualItem的地方。 我已经更新了描述......但是所有这些代码都在 UIViewController 中可用,而 WKWebView 可用。 我必须看到函数downloadAudioVisualItem。我认为参数中缺少某些内容。 它现在只打印你好,我正在测试....它在viewDidLoad()viewDidDisappear()之间 将通知观察者放入 viewDidAppear 而不是 viewDidLoad。如果有什么不同,试试这个。否则你没有听到正确的通知。 【参考方案1】:

您似乎在添加观察者之前就调用了 postNotification。我的意思是应该首先调用观察者,以便只有它可以开始监听通知。

App Delegate试试这个

import AVFoundation

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 

        let MyGreatNotification = Notification.Name.AVPlayerItemNewAccessLogEntry
        NotificationCenter.default().addObserver(self, selector: #selector(self.hello), name: MyGreatNotification, object: nil)
        return true
    

    func hello()
    
      // Put break point here
    

并像这样在您的初始视图控制器中添加发布通知代码。

import AVFoundation

override func viewDidLoad() 
        super.viewDidLoad()

        let MyGreatNotification = Notification.Name.AVPlayerItemNewAccessLogEntry
        NotificationCenter.default().post(name: MyGreatNotification, object: self)
    

就是这样尝试运行你的应用程序,你可以看到应用程序将在App Delegate 中名为hellofunction 处中断。

如果您仍然不确定。执行此操作,将此发布通知代码放入App Delegate 并将添加观察者代码放入初始视图控制器中,添加选择器并在其中放置一个断点,尝试运行应用程序。您可以看到应用程序没有在初始视图控制器的断点处中断。

【讨论】:

我没有调用发帖通知,AVPlayer不应该自动发帖吗?....“如果不是,我如何从WKWebView获取AVPlayerItem?跨度> AVPlayer 应该自动调用它。检查文档 noh,我认为您遗漏了一些东西。你有没有在info.plist中添加相关键。 我在文档中看不到任何 info.plist 键,您能帮帮我吗? 有人知道 AVPlayerItemNewAccessLogEntry 是如何填充一些日志事件的吗? info.plist 中的这些键是什么?

以上是关于为啥 AVPlayerItem 不触发它的通知?的主要内容,如果未能解决你的问题,请参考以下文章

为啥本地通知未针对 UNCalendarNotificationTrigger 触发

为啥我的本地通知没有在 iOS 10 的前台触发?

我的 Redux 状态发生了变化,为啥 React 没有触发重新渲染?

iOS 7中的iOS 7 AVPlayer AVPlayerItem持续时间不正确

为啥这个分配不触发?

为啥 AVAudioPlayer 不播放?