             event = PlayerEvents.durationChange(duration: CMTimeGetSeconds((self.currentItem?.duration)!))
         case #keyPath(rate):
             if rate > 0 {
-                nonObservablePropertiesUpdateTimer.resume()
+                self.startOrResumeNonObservablePropertiesUpdateTimer()
             } else {
+                self.nonObservablePropertiesUpdateTimer?.invalidate()
                 event = PlayerEvents.pause()
             }
         case #keyPath(currentItem.status):

    
    // Attempt load and test these asset keys before playing.
    let assetKeysRequiredToPlay = [
        "playable", 
        "tracks",
        "hasProtectedContent",
    ]
    
    private var avPlayerLayer: AVPlayerLayer!
    

    private var tracksManager = TracksManager()
    
    //  AVPlayerItem.currentTime() and the AVPlayerItem.timebase's rate are not KVO observable. We check their values regularly using this timer.
    private var nonObservablePropertiesUpdateTimer: Timer?
    
    public var onEventBlock: ((PKEvent)->Void)?
    
