使用AVPlayer自定义支持全屏的播放器(二)

前言

前段时间封装了一个视频播放器,由于时间匆忙,还有很多问题以及细节还没有来得及修改,最近挤了一点时间,将播放器完善了一下,具体思路请参考使用AVPlayer自定义支持全屏的播放器(一),本篇文章主要讲解如何在tableView上面使用。

思路

播放器播放视频肯定会占用内存,如果每一个cell建立一个播放器,会占用不少的内存,所有全局只建立一个播放器,当播放器所在cell滑出屏幕,将播放器销毁。

使用代码

当点击cell时,创建播放器,并且添加到当前cell上。因为全局只有一个播放器,并且需要在滑动的时候动态计算当前播放器所在cell的位置,所以使用代理将被点击的cell传回所在控制器做相应的处理。不需要播放器的时候记得销毁播放器,用以释放内存。

#pragma mark - 点击播放代理
- (void)PlayVideoWithCell:(TableViewCell *)cell;
{
    //记录被点击的cell
    _cell = cell;
    
    //销毁播放器
    [_playerView destroyPlayer];
    _playerView = nil;
    
    _playerView = [[CLPlayerView alloc] initWithFrame:CGRectMake(0, 0, cell.width, cell.height)];
    [cell.contentView addSubview:_playerView];
    
    //根据旋转自动支持全屏,默认支持
    //    playerView.autoFullScreen = NO;
    //重复播放,默认不播放
    //    playerView.repeatPlay     = YES;
    //如果播放器所在页面支持横屏,需要设置为Yes,不支持不需要设置(默认不支持)
    //    playerView.isLandscape    = YES;
    
    //视频地址
    _playerView.url = [NSURL URLWithString:cell.model.videoUrl];
    
    //播放
    [_playerView playVideo];
    
    //返回按钮点击事件回调
    [_playerView backButton:^(UIButton *button) {
        NSLog(@"返回按钮被点击");
    }];
    
    //播放完成回调
    [_playerView endPlay:^{
        
        //销毁播放器
        [_playerView destroyPlayer];
        _playerView = nil;
        NSLog(@"播放完成");
    }];
 
}

复制代码

tableView滑动代理中,需要使用- (void)calculateScrollOffset:(UITableView *)tableView cell:(UITableViewCell *)cell方法,将tableView和播放器所在cell传递给播放器,播放器会在内部计算播放器所在位置,在超出的时候,会将播放器销毁。

/**
 根据播放器所在位置计算偏移,添加在TableView上时使用
 
 @param tableView tableView
 @param cell 播放器所在cell
 */
- (void)calculateScrollOffset:(UITableView *)tableView cell:(UITableViewCell *)cell;
复制代码
#pragma mark - 滑动代理
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
   //计算偏移来销毁播放器
    [_playerView calculateScrollOffset:self.tableView cell:_cell];
}

复制代码

播放器效果图

Demo地址

Demo地址---->CLPlayer 如果喜欢,欢迎star。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值