2016-08-04 384 views
1

我發現沒有這方面的資料,但在我的實踐經驗AVURLAsset URLAssetWithURL:options:阻止主線程與遠程URL?

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil]; 

(其中URL是一個HLS實時流遠程URL),將阻塞主線程,如果網絡出現故障或某些導致文件無法讀取。

有其他人注意到了嗎?我最終可能會更改我的設置以使用GCD在後臺線程上構建。因爲無論何時加載視頻,UI都會鎖定。

AVPlayerItem異步加載東西,但AVURLAsset似乎並沒有這樣做。

回答

0

也有這個問題。解決它與以下內容:

let asset = AVURLAsset(url: url) 

// I'm using a resource loader for my custom urls... 
let loaderQueue = DispatchQueue(label: "loader-queue", qos: .userInteractive) 
asset.resourceLoader.setDelegate(self, queue: self.loaderQueue) 

// load values asynchronously and once complete, create the player item 
let keys = ["duration", "tracks"] 
asset.loadValuesAsynchronously(forKeys: keys, completionHandler: { 
    let item = AVPlayerItem(asset: asset) 
    self.player.insert(item, after: nil) 
})