视频播放常见的场景:
(1)单个页面播放视频,即视频详情页
(2)视频列表上播放视频
其中(1)的实现方式相对简单,自定义UI,管理播放器的创建与释放即可;
但是(2)的实现就比较复杂了,是在每个cell上创建播放器,还是只在vc中创建一个播放器?当cell滑出屏幕的时候需要暂停播放,这个怎么实现?...
这里的解决思路参照了 JPVideoPlayer 的实现方案:A、播放器仍是在cell中创建,因为cell的复用,播放器不会不停的创建与释放,所以并不会造成内存紧张。需要注意的是,在cell的deinit方法中需要销毁播放器。
B、在vc中需要定位当前正在播放视频的cell(playingVideoCell);在cell滑出屏幕的时候暂停播放;点击另一个cell的时候需要切换播放;vc消失的时候暂停当前播放的视频。
代码:
1.记录正在播放视频的cell
var playingVideoCell:HomePageDynamicMainCell?
2.cell滑出屏幕的时候暂停播放
func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
guard self.playingVideoCell != nil else {
return
}
if cell.hash == self.playingVideoCell?.hash {//找到正在播放视频的cell
self.playingVideoCell?.infoView.destoryVideoPlay()
self.playingVideoCell = nil
}
}
3.点击播放某个cell中的视频的时候,暂停播放上一个视频
- 这里是通过代理实现的,也可以通过block等常用方式
//设置代理
cell.delegate = self
//MARK: - HomePageDynamicMainCellDelegate
extension AttentionMainPageController:HomePageDynamicMainCellDelegate {
func didClickVideoPlayBtn(cell: HomePageDynamicMainCell) {
if self.playingVideoCell?.hash != cell.hash {//播放另一个视频
self.playingVideoCell?.infoView.destoryVideoPlay()
self.playingVideoCell = cell
}
}
}
4.vc消失的时候暂停播放
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if self.playingVideoCell != nil {
self.playingVideoCell?.infoView.pausePlayVideo()
}
}
参考文章:
https://www.jianshu.com/p/c73082c60f5b
https://www.jianshu.com/p/2c12c0cd9cde
网友评论