我有一个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个视频
当我向下滚动时,我看到取消的按钮,没有任何视频加载。有时所有视频都会加载,有时候他们不会。
但是我在模拟器中没有看到这个问题。
我该如何解决这个问题?任何帮助将不胜感激
答案 0 :(得分:1)
很抱歉,但你的方法并不是一个好主意:每个单元格的单个AVPlayer非常重,你可能会遇到许多问题,例如每次出现单元格时重新加载视频,滚动不稳定,性能不佳等。< / p>
另外请记住 AVPlayer总是在主线程中实例化,所以在滚动时你不应该实例化任何其他播放器视频,否则你会忙于主线程(同一个线程) UI更新!)。
与Instagram和Facebook一样,这里常见的方法是有一个 AVPlayer视频的常见实例和每个视频的第一帧或最后一帧的图像:当你的单元格完全可见时放在图像上您的视频播放器视图使用q11x = px + s1 * (t1x - px)
and so on
传递视频网址。
这不是一件容易而且快速的事情,所以要花时间和耐心,随着时间的推移,你将建立自己的解决方案;你可以找到关于这些问题的更多信息: