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


// KVO player keys

private let PlayerTracksKey = "tracks"
private let PlayerPlayableKey = "playable"
private let PlayerDurationKey = "duration"
private let PlayerTimeControlStatusKey = "timeControlStatus"

// KVO player item keys


        self._asset = asset

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

