 
     private func setupAsset(url: URL) {
 
-        self.asset = AVURLAsset(url: url, options: nil)
-
-        let keys = ["playable", "duration", "tracks"]
-
-        self.asset!.loadValuesAsynchronously(
-            forKeys: keys,
-            completionHandler: { [weak self] in
-
-                guard let `self` = self, let asset = self.asset else {
-
-                    return
+        DispatchQueue.global().async {
+
+            self.asset = AVURLAsset(url: url, options: nil)
+
+            let keys = ["playable", "duration"]
+
+            self.asset!.loadValuesAsynchronously(
+                forKeys: keys,
+                completionHandler: { [weak self] in
+
+                    guard let `self` = self, let asset = self.asset else {
+
+                        return
+                    }
+
+                    var error: NSError?
+                    let failed = keys.filter {
+
+                        asset.statusOfValue(forKey: $0, error: &error) == .failed
+                    }
+
+                    guard failed.isEmpty else {
+
+                        self.playerStatus = .failed
+                        return
+                    }
+
+                    self.setupPlayerItem(asset: asset)
                 }
-
-                var error: NSError?
-                let failed = keys.filter {
-
-                    asset.statusOfValue(forKey: $0, error: &error) == .failed
-                }
-
-                guard failed.isEmpty else {
-
-                    self.playerStatus = .failed
-                    return
-                }
-
-                DispatchQueue.main.async { [weak self] in
-
-                    self?.setupPlayerItem(asset: asset)
-                }
-            }
-        )
+            )
+        }
     }
 
     private func setupPlayerItem(asset: AVAsset) {


            if self.playerStatus != oldValue {


                self.delegate?.playerViewController(self, didChangePlayerStatus: self.playerStatus)
            }
        }
    }


            if self.playbackStatus != oldValue {

                DispatchQueue.main.async {

                    self.delegate?.playerViewController(self, didChangePlaybackStatus: self.playbackStatus)
                }
            }
        }
    }
