Может ли кто-нибудь помочь в создании пула AVPlayer
для повторного использования в tableView? Итак, идея состоит в том, чтобы иметь пул AVPlayer
, скажем, 3, и продолжать повторно использовать их, когда пользователь прокручивает таблицу.
Вот краткий обзор приложения и того, что мы хотим создать:
- Каждое видео в формате mp4 и длится всего 5 секунд. Таким образом, каждая ячейка будет воспроизводить 5-секундное видео и зацикливать его.
- Все видео локальные, они будут загружены на диск еще до того, как таблица будет показана пользователю. Это поможет с точки зрения плавной прокрутки tableView.
Прямо сейчас я создаю слишком много AVPlayer
и не использую их повторно, что плохо влияет на производительность, например, прокрутка немного прерывистая. Кроме того, Apple не позволяет создавать бесконечное количество AVPlayer
.
Любые идеи? Спасибо
Обновление 1:
import UIKit
import VIMVideoPlayer
var cache = NSCache<NSString, VIMVideoPlayerView>()
class FeedTableViewCell: UITableViewCell {
// MARK: - Properties
@IBOutlet weak var containerView: UIView!
static let reuseIdentifier = "FeedTableViewCell"
var video: Video? {
didSet {
if let cachedVideoPlayerView = cache.object(forKey: video!.preview!.remoteURL as NSString) {
// We have a cached video player view!
containerView.addSubview(cachedVideoPlayerView)
} else {
// There is nothing cached.
let previewURL = FileManager.applicationDocumentsDirectory.appendingPathComponent(video!.preview!.fileName!)
let newVideoPlayer = VIMVideoPlayer()
newVideoPlayer.setURL(previewURL)
newVideoPlayer.isLooping = true
newVideoPlayer.isMuted = true
newVideoPlayer.disableAirplay()
let newVideoPlayerView = VIMVideoPlayerView()
newVideoPlayerView.frame = contentView.bounds
newVideoPlayerView.delegate = self
newVideoPlayerView.setVideoFillMode(AVLayerVideoGravityResizeAspectFill)
newVideoPlayerView.player = newVideoPlayer
containerView.addSubview(newVideoPlayerView)
cache.setObject(newVideoPlayerView, forKey: video!.preview!.remoteURL as NSString)
}
}
}
// MARK: - Life Cycle
override func awakeFromNib() {
super.awakeFromNib()
print("AWAKE FROM NIB CELL")
}
override func prepareForReuse() {
super.prepareForReuse()
}
}
// MARK: - VIMVideoPlayerViewDelegate
extension FeedTableViewCell: VIMVideoPlayerViewDelegate {
func videoPlayerViewIsReady(toPlayVideo videoPlayerView: VIMVideoPlayerView!) {
videoPlayerView.player.play()
}
}