iOS iOS直播视频iOS-OC初级

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

2016-11-20  本文已影响1211人  季末微夏

前言

前段时间封装了一个视频播放器,由于时间匆忙,还有很多问题以及细节还没有来得及修改,最近挤了一点时间,将播放器完善了一下,具体思路请参考使用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];
}

播放器效果图

效果图1.gif 效果图2.gif 效果图3.gif

Demo地址

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

上一篇下一篇

猜你喜欢

热点阅读