使用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)calculateWith:(UITableView *)tableView cell:(UITableViewCell *)cell beyond:(BeyondBlock) beyond方法,将tableView和播放器所在cell传递给播放器,播放器会在内部计算播放器所在位置,在超出屏幕的时候,会调用超出范围的block,在block回调中对播放器销毁。

#pragma mark - 滑动代理
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [_playerView calculateWith:self.tableView cell:_cell beyond:^{
        //销毁播放器
        [_playerView destroyPlayer];
        _playerView = nil;
    }];
}

播放器效果图


Demo地址

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



文/枫叶流转(简书作者)
原文链接:http://www.jianshu.com/p/83191c7bc840
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值