AVPlayerItem playerItemWithURL немного медленный, чтобы иметь очень хорошую плавную прокрутку

Во время прокрутки канала моего приложения я загружаю несколько видео в AVPlayer. Проблема в том, что AVPlayerItem playerItemWithUrl и AVPlayer playerWithPlayerItem немного медленные (около 16 мс), поэтому в моем приложении происходит пропадание кадров. Есть ли способ ускорить его? Может быть, я могу вызвать эти функции в фоновом потоке?

Ниже код, который я использую для создания проигрывателя:

  FPlayerItem := TAVPlayerItem.Wrap(TAVPlayerItem.OCClass.playerItemWithURL(aURL)); 
  FPlayer := TAVPlayer.Wrap(TAVPlayer.OCClass.playerWithPlayerItem(FPlayerItem)); 

person zeus    schedule 01.02.2018    source источник
comment
Можете ли вы поделиться кодом, который вы использовали для воспроизведения предмета?   -  person Nitish    schedule 01.02.2018
comment
Это, вероятно, будет неуместно, потому что это сделано в Delphi, но я просто делаю AVPlayerItem playerItemWithUrl, а затем AVPlayer playerWithPlayerItem и ничего больше.   -  person zeus    schedule 01.02.2018
comment
Вы пытались воспроизвести элемент внутри loadValuesAsynchronously?   -  person Nitish    schedule 01.02.2018
comment
я обновляю вопрос с кодом. нет, как использовать loadValuesAsynchronously?   -  person zeus    schedule 01.02.2018


Ответы (1)


Воспроизведите элемент внутри AVAsynchronousKeyValueLoading.
Это ясно. состояния :

Методы, которые можно реализовать для использования актива или трека актива без блокировки вызывающего потока.

Итак, по логике, для понимания:

let asset = AVAsset(url: url)
let keys: [String] = ["playable"]
asset.loadValuesAsynchronously(forKeys: keys) {
DispatchQueue.main.async {         
      let item = AVPlayerItem(asset: asset)
      let player = AVPlayer(playerItem: item)
      player.play()
      }
}  

Этот ответ поможет вам понять это лучше.

person Nitish    schedule 01.02.2018