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

来源:互联网 发布:js window.open 参数 编辑:程序博客网 时间:2024/06/07 02:41

前言

    前段时间封装了一个视频播放器,由于时间匆忙,还有很多问题以及细节还没有来得及修改,最近挤了一点时间,将播放器完善了一下,具体思路请参考使用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
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
0 0
原创粉丝点击