         }
     }
 
-    fileprivate func setupAsset(_ asset: AVAsset) {
+    fileprivate func setupAsset(_ asset: AVAsset, loadableKeys: [String] = ["tracks", "playable", "duration"]) {
         guard isViewLoaded else { return }
 
         if self.playbackState == .playing {


        self._asset = asset

        let keys = [PlayerTracksKey, PlayerPlayableKey, PlayerDurationKey]
        self._asset?.loadValuesAsynchronously(forKeys: keys, completionHandler: { () -> Void in
            for key in keys {
                var error: NSError? = nil
                let status = self._asset?.statusOfValue(forKey: key, error: &error)
                if status == .failed {
                    self.playerDelegate?.player(self, didFailWithError: PlayerError.failed)
                    self.playbackState = .failed
                    return
                }
            }
            if let asset = self._asset {
                if !asset.isPlayable {
                    self.playbackState = .failed
                    return
                }



// KVO player keys

private let PlayerTimeControlStatusKey = "timeControlStatus"

// KVO player item keys
