         if let timeObserver = timeObserver {
             player.removeTimeObserver(timeObserver)
         }
-        view.removeObserver(self, forKeyPath: "bounds")
         loopObserver = nil
+        observers.forEach { $0.invalidate() }
+        observers.removeAll()
     }
 
     override open func destroy() {

            handleExternalPlaybackActiveEvent()
        case &kvoPlayerRateContext:
            handlePlayerRateChanged()
        case &kvoViewBounds:
            handleViewBoundsChanged()
        default:
            break
        }

        }
    }


    private func handlePlayerRateChanged() {
        if player?.rate == 0 && playerStatus != .unknown && state != .idle {
