滚动浏览tableView后,视频停止在AVPlayerController中的UITableView单元格中加载

时间:2017-03-14 10:05:04

标签: ios swift uitableview avplayer

我有一个tableview,我正在尝试加载视频并在viewdidLoad()上播放它们

以下是在Viewdidload上加载视频的代码

 func playVideo(viewController:UIViewController,videoPath:String!, view: UIView) {

        guard let path = videoPath else {
            debugPrint("video.m4v not found")
            return
        }

        let url = NSURL.fileURL(withPath: path)
        let item = AVPlayerItem(url: url)
        self.player = AVPlayer(playerItem: item)
        self.videoPlayerController = AVPlayerViewController()
        self.videoPlayerController.player = self.player
        videoPlayerController.view.frame = view.bounds
        viewController.addChildViewController(videoPlayerController)
        view.addSubview(videoPlayerController.view)

    }}

在cellForRowAtIndexPath中我执行以下操作

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        cell = tableView.dequeueReusableCell(withIdentifier: "trendViewControllerCell", for: indexPath) as! TrendViewTableCell
        cell.videoName.text = feeds[indexPath.row].videoTitle
        cell.artistName.text = feeds[indexPath.row].artistName
        player.playVideo(viewController: self, videoPath: Bundle.main.path(forResource: feeds[indexPath.row].videoUrl, ofType:"mp4")!, view: cell.videoView)

        return cell
    }

我正在尝试将AVPlayerController的大小调整为tableView单元格中的视图。

在viewDidLoad上,我能够看到单元格中所有视图的AVPlayer控制器。

大约有15个视频

当我向下滚动时,我看到取消的按钮,没有任何视频加载。有时所有视频都会加载,有时候他们不会。

但是我在模拟器中没有看到这个问题。

我该如何解决这个问题?任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

很抱歉,但你的方法并不是一个好主意:每个单元格的单个AVPlayer非常重,你可能会遇到许多问题,例如每次出现单元格时重新加载视频,滚动不稳定,性能不佳等。< / p>

另外请记住 AVPlayer总是在主线程中实例化,所以在滚动时你不应该实例化任何其他播放器视频,否则你会忙于主线程(同一个线程) UI更新!)。

与Instagram和Facebook一样,这里常见的方法是有一个 AVPlayer视频的常见实例和每个视频的第一帧或最后一帧的图像:当你的单元格完全可见时放在图像上您的视频播放器视图使用q11x = px + s1 * (t1x - px) and so on 传递视频网址。

这不是一件容易而且快速的事情,所以要花时间和耐心,随着时间的推移,你将建立自己的解决方案;你可以找到关于这些问题的更多信息: