             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)")

    public override init() {
        PKLog.trace("init AVPlayer")
        super.init()
        
        nonObservablePropertiesUpdateTimer.setEventHandler { [weak self] in
            self?.updateNonObservableProperties()
        }
        nonObservablePropertiesUpdateTimer.scheduleRepeating(deadline: DispatchTime.now(),
                                                             interval: DispatchTimeInterval.milliseconds(50))
        
        avPlayerLayer = AVPlayerLayer(player: self)
        _view = PlayerView(playerLayer: avPlayerLayer)
    }
