2015-07-21 76 views
1

我在桌面视图中使用AVPlayer。我想要开始视频播放,在滚动表格视图时停止播放视频。告诉我有什么可行的方法来做到这一点?AVPlayer恢复能力

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
static NSString *tableIdentifier = @"tableIdentifier"; 
CustomTableCell *cell = [self.videoTableView dequeueReusableCellWithIdentifier:tableIdentifier]; 
if (cell == nil) { 
    cell = [[[NSBundle mainBundle]loadNibNamed:@"VideoCell" owner:self options:nil]objectAtIndex:0]; 
} 
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 
dispatch_async(queue, ^{ 
    AVAsset *avAssert = [AVAsset assetWithURL:[NSURL URLWithString:@"url"]]; 
    cell.playerItem =[[AVPlayerItem alloc]initWithAsset:avAssert]; 
    dispatch_sync(dispatch_get_main_queue(), ^{ 
     if (!cell.avPlayer) { 
      cell.avPlayer = [AVPlayer playerWithPlayerItem:cell.playerItem]; 
     }else{ 
      [cell.avPlayer replaceCurrentItemWithPlayerItem:cell.playerItem]; 
     } 
     if (!cell.avPlayerLayer) { 
      cell.avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:cell.avPlayer]; 
      cell.avPlayerLayer.frame = cell.videoPlayerView.layer.bounds; 
      cell.avPlayerLayer.videoGravity = AVLayerVideoGravityResize; 
      [cell.videoPlayerView.layer addSublayer: cell.avPlayerLayer]; 
      if (indexPath.row == 0) { 
       cell.avPlayer.muted = NO; 
       [cell.avPlayer play]; 
      } 
     } 
    }); 
}); 
return cell; 

}

+1

您必须保留一系列视频持续时间,以便在该视频暂停视频时再次滚动至相同视频,首先检查开始播放视频持续时间在阵列 –

+0

目前,我正在做你说的。问题是我重复使用细胞。 somtimes它不需要正确的AVPlayerItem当前time.i'll试着让你知道,谢谢。 – PramukaD

+0

粘贴一些代码 –

回答

0

这里的苹果是如何做到这样的事情在一个示例应用程序(我这样做是不同的):

/* When the app goes to the background, save the media url and time values 
to the application preferences. */ 
- (void)applicationDidEnterBackground:(UIApplication*)application 
{ 
    if (self.playbackViewController) 
    { 
     NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
     NSURL* URL = [self.playbackViewController URL]; 

     if (URL) 
     { 
      NSTimeInterval time = CMTimeGetSeconds([[self.playbackViewController player] currentTime]); 

      [defaults setURL:URL forKey:AVPlayerDemoContentURLUserDefaultsKey]; 
      [defaults setDouble:time forKey:AVPlayerDemoContentTimeUserDefaultsKey]; 
     } 
     else 
     { 
      [defaults removeObjectForKey:AVPlayerDemoContentURLUserDefaultsKey]; 
      [defaults removeObjectForKey:AVPlayerDemoContentTimeUserDefaultsKey]; 
     } 

     [defaults synchronize]; 
    } 
} 

在任何一种(或两者)appDidFinishLaunching或appDidEnterForeground方法:

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 

    /* Restore saved media time value from defaults system. */ 
    [[self.playbackViewController player] seekToTime:CMTimeMakeWithSeconds([defaults doubleForKey:AVPlayerDemoContentTimeUserDefaultsKey], NSEC_PER_SEC)]; 
} 

return YES; 
}