Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I play video (autoplay) in UITableViewCell in iOS

I am playing a video in UITableViewCell. For that I am using the following code:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *VideoCellIdentifier = @"VideoCell";

    NSDictionary *_response_data = [self.response objectAtIndex:indexPath.row];

    VideoCustomCell *cell = (VideoCustomCell *) [tableView dequeueReusableCellWithIdentifier:VideoCellIdentifier];

    if (cell == nil) {
        NSArray *topLevelObjects;
        topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"VideoCustomCell" owner:self options:nil];
        for (id currentObject in topLevelObjects){
            if ([currentObject isKindOfClass:[UITableViewCell class]]){
                cell =  (VideoCustomCell *) currentObject;
                cell.delegate  = self;
                break;
            }
        }
    }

    avPlayer = [[AVPlayer playerWithURL:[NSURL URLWithString:[_response_data valueForKey:@"media_id"]]] retain];
    avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer];
    avPlayerLayer.frame = cell.video_player_view.layer.bounds;
    avPlayerLayer.videoGravity = AVLayerVideoGravityResize;
    [cell.video_player_view.layer addSublayer: avPlayerLayer];
    [avPlayer play];

    return cell;
}

The video is playing properly, but I want to play only one video at a time. Play the video of the cell which is fully visible.

like image 201
San007 Avatar asked Sep 28 '13 12:09

San007


1 Answers

Use this two method of scrolling and handle play video. This two method will call in either way when tableview stop scrolling

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    if(![scrollView isDecelerating] && ![scrollView isDragging]){

        [self playVideo];
    }
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    if(!decelerate){

        [self playVideo];
    }
}


-(void)playVideo
{
    if(aryTableData.count==0){
        return;
    }

    for(UITableViewCell *cell in [tblView visibleCells])
    {
        VideoCell *ccell = (VideoCell*)cell;

        CGRect ccellRect = [APP_DEL.window convertRect:ccell.bounds fromView:ccell];

        // NSLog(@"--Cell frame %f",ccellRect.origin.y);

        //Set Condition of cell visible within some range
        if(ccellRect.origin.y>-200)
        {
            // Handle Video Play

            int row = [[tblView indexPathForCell:ccell] row];
            NSString *strUrl = [[aryTableData objectAtIndex:row] valueForKey:@"video_url"] ;
            [ccell startVideoFromURL:strUrl]; //You can handle video play in cell or table view
        }
    }
}
like image 98
Kiran Patel Avatar answered Nov 18 '22 05:11

Kiran Patel