             return
         }
     }
+    
+    private func updateNonObservableProperties() {
+        if let timebaseRate: Float64 = CMTimebaseGetRate(self.currentItem!.timebase!){
+            if timebaseRate == 1.0 {
+                guard let _ = delegate?.player(changedEvent: PlayerEvents.playing()) else {
+                    PKLog.trace("player changedState is not implimented")
+                    return
+                }
+                nonObservablePropertiesUpdateTimer.suspend()
+            }
+            
+            PKLog.trace("timebaseRate:: \(timebaseRate)")
+        }
+    }
 }

    private var currentState: PlayerState = PlayerState.idle
    var delegate: PlayerEngineDelegate?
    
    public var view: UIView! {
        get {
            PKLog.trace("get player view: \(_view)")

            event = PlayerEvents.durationChange(duration: CMTimeGetSeconds((self.currentItem?.duration)!))
        } else if keyPath == #keyPath(rate) {
            if rate == 1.0 {
                nonObservablePropertiesUpdateTimer.resume()
            } else {
                event = PlayerEvents.pause()
            }
