2016-08-04 383 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) 
})