             // hide buffering
             self?.setBuffering(false)
         })
+    }
+    
+    
+    private func addPlayerStatusListeners(item : AVQueuePlayer){
+        if #available(iOS 10.0, *){
+            observerStatus.append( item.observe(\.timeControlStatus, options: [.new]) { [weak self] (value, _) in
+                // show buffering
+                if(value.timeControlStatus == AVPlayer.TimeControlStatus.playing){
+                    self?.playing = true;
+                    self?.updateNotifStatus(playing: true, stopped: false, rate: self?.player?.rate)
+                }else if(value.timeControlStatus == AVPlayer.TimeControlStatus.paused){
+                    self?.playing = false;
+                    self?.updateNotifStatus(playing: false, stopped: false, rate: 0)
+                }else{
+                    self?.playing = false;
+                    self?.updateNotifStatus(playing: false, stopped: false, rate: 0)
+                }
+            })
+        }
     }
     
     func getMillisecondsFromCMTime(_ time: CMTime) -> Double {

        self.player?.rate = self.rate
        self.currentTimeTimer = Timer.scheduledTimer(timeInterval: 0.3, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
        self.currentTimeTimer?.fire()
        self.playing = true
        
        self.updateNotifStatus(playing: self.playing, stopped: false, rate: self.player?.rate)
    }
    
    private var looper: Any?

    }
    
    private func addPostPlayingBufferListeners(item : SlowMoPlayerItem){
        observerStatus.append( item.observe(\.isPlaybackBufferEmpty, options: [.new]) { [weak self] (value, _) in
            // show buffering
            if(value.isPlaybackBufferEmpty){
             self?.setBuffering(true)
            }else{
            self?.setBuffering(false)
            }
        })
        
        observerStatus.append( item.observe(\.isPlaybackLikelyToKeepUp, options: [.new]) { [weak self] (_, _) in
