         player.removeObserver(self, forKeyPath: "currentItem.loadedTimeRanges")
         player.removeObserver(self, forKeyPath: "currentItem.playbackLikelyToKeepUp")
         player.removeObserver(self, forKeyPath: "currentItem.playbackBufferEmpty")
-        player.removeObserver(self, forKeyPath: "rate")
         NSNotificationCenter.defaultCenter().removeObserver(self)
     }
 }
    public override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?,
        change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
            switch context {
            case &kvoPlayerContext:
                handleRateChangedEvent()
            case &kvoStatusDidChangeContext:
                handleStatusChangedEvent()
            case &kvoTimeRangesContext:

            }
    }
    
    private func updateState(newState: PlaybackState) {
        guard currentState != newState else { return }
        
        currentState = newState
        
        switch newState {
        case .Buffering:
            trigger(.Buffering)
        case .Paused:
            trigger(.Pause)
        case .Playing:
            trigger(.Play)
        default:
            break
        }
    }
    
