2016-08-04 6 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) 
}) 
関連する問題