美文网首页
视频列表的视频播放

视频列表的视频播放

作者: 古月思吉 | 来源:发表于2019-01-08 14:53 被阅读0次

    视频播放常见的场景:
    (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

    相关文章

      网友评论

          本文标题:视频列表的视频播放

          本文链接:https://www.haomeiwen.com/subject/vmnvrqtx.html