当视频出现在可见单元格中时,它会在 UITableViewCell 中重新启动

Video is restart in UITableViewCell when it appears in a visible cell

我正在我的 UITableViewCell 中加载一个 AVPlayerViewController,它运行良好,但我正在尝试在单元格可见时播放视频,在单元格不可见时暂停视频。

问题是视频以编程方式加载到单元格中,当单元格消失并重新出现时,这会再次加载视频,因此它总是从头开始。例如:如果我按下播放视频并在 10 秒内暂停,然后滚动以使视频单元格不可见,然后在我 return 到视频单元格后,它会再次加载并在 0 秒内提供视频.

我使用函数 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 在我的单元格中加载视频,代码如下:

let videoURL = NSURL(string: "url_video")
let player = AVPlayer(URL: videoURL!)

cell.av.player = player
cell.av.view.frame = cell.bounds
self.addChildViewController(cell.av)
cell.contentView.addSubview(cell.av.view)
cell.av.didMoveToParentViewController(self)
cell.av.view.translatesAutoresizingMaskIntoConstraints = false

我需要视频保持暂停状态,我该怎么做?

问题是,每当 tableViewCell 从视图中消失并返回时,它就会被重新创建。您将不得不想出一种方法来保存用户在每个视频中的位置。

创建一个包含一串 0 的数组,每个 0 对应于每个单元格中视频的时间。

var times = [0,0,0,0...]

现在假设我在第二个单元格上并开始播放我的视频。视频播放了 10 秒,然后我暂停了它。您可以通过以下方式获取我的时长:

AVPlayerItem *currentItem = yourAVPlayer.currentItem.currentTime

现在,我滚动浏览单元格,然后返回。在您的 CellForRowAtIndexPath 函数中,确保使用数组中的任何值初始化每个视频 - times

你可以通过这个link: Seek to a certain position in AVPlayer right after the asset was loaded

来初始化一个具有一定时间的AVPlayer视频

差不多就是这些了。