滚动 tableView 后,视频在 AVPlayerController 的 UITableView 单元格中停止加载
Posted
技术标签:
【中文标题】滚动 tableView 后,视频在 AVPlayerController 的 UITableView 单元格中停止加载【英文标题】:Videos stop loading in UITableView cell in AVPlayerController after scrolling through the tableView 【发布时间】:2017-03-14 10:05:03 【问题描述】:我有一个表格视图,我正在尝试加载视频并在 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】:抱歉,您的方法不是一个好主意:为每个单元格设置一个 AVPlayer 非常繁重,您可能会遇到很多相关问题,例如每次单元格出现时重新加载视频、滚动不顺畅、性能不佳等。
另外请记住,AVPlayer 总是在主线程中实例化,因此在滚动时您不应实例化任何其他播放器视频,否则您会忙于主线程(与用户界面更新!)。
像 Instagram 和 Facebook 一样,这里的常用方法是有一个 AVPlayer 视频的通用实例以及每个视频的第一帧或最后一帧的图像:当您的单元格完全可见时,将图像覆盖您的视频播放器视图使用replaceCurrentItemWithPlayerItem
传递视频网址。
这不是一件容易和快速的事情,所以慢慢来,耐心等待,随着时间的推移,您将构建您的解决方案;您可以找到有关这些问题的更多信息:
AVPlayerItem replaceCurrentItemWithPlayerItem Blocking Maintaining good scroll performance when using AVPlayer【讨论】:
我希望表格视图单元格通过播放和暂停选项可见。所以我使用的是 AVPlayerController。我应该使用 AVlayer 吗?您还可以提供一个示例,当用户单击表格视图内的视频视图时,我可以播放视频,并且这些视频会在用户滚动屏幕时暂停 AVPlayerController 是一个 UIViewController 包含一个 AVPlayer ;)以上是关于滚动 tableView 后,视频在 AVPlayerController 的 UITableView 单元格中停止加载的主要内容,如果未能解决你的问题,请参考以下文章
升级到 iPhone OS 4 后,我的 TableView 在调用 reloadData 后滚动到顶部
Swift - tableView 行高仅在滚动或切换展开/折叠后更新