AVPlayer не запускается, пока ячейка не будет переработана

#swift #avplayer #haneke #diskcache

#swift #avplayer #ханеке #diskcache

Вопрос:

У меня есть UITableView , который я использую для рендеринга твитов, содержащих GIF-файлы. Они возвращаются из Twitter в формате MP4, поэтому я использую AVPlayer . Используя HanekeSwift , я кэширую элемент, а затем воспроизводю его в tableview. Проблема, с которой я сталкиваюсь, заключается в том, что любые твиты на экране при загрузке tableview не воспроизводятся автоматически, я должен прокрутить их с экрана и снова включить, прежде чем они будут воспроизводиться.

Я настраиваю свой AVPlayer в следующей функции

 private func configureAVPlayer(url: URL) {
    cache.fetch(URL: url).onSuccess { [weak self] stream in
        guard let path = URL(string: DiskCache.basePath())?.appendingPathComponent("shared-data/original") else { return }

        let cached = DiskCache(path: path.absoluteString).path(forKey: url.absoluteString)
        let file = URL(fileURLWithPath: cached)

        if !FileManager.default.fileExists(atPath: cached) {
            try! stream.write(to: file, options: .atomicWrite)
        }

        self?.player = AVPlayer(url: file)
        self?.player?.automaticallyWaitsToMinimizeStalling = false
        self?.playerLayer = self?.avPlayerView.layer as? AVPlayerLayer
        guard let player = self?.player else { return }
        self?.playerLayer?.player = player
        self?.player?.play()
    }
}
 

Следуя чему-то очень похожему, как описано здесь

Однако для меня ячейка по существу приостановлена, пока я не прокручиваю.

Комментарии:

1. Вы делаете что-то отличное cellForRowAt: от того, что вы делаете здесь? Возможно, вы допускаете ошибку, которая не сразу очевидна.

2. cellForRowAt: просто передает модель, ничего действительно умного вообще

3. Если это так, что заставляет проигрыватель воспроизводиться, когда он появляется на экране, если это не cellForRowAt: так?