2

I have made one sample demo which plays one video in my view.

Code:

- (IBAction)playVideo:(id)sender
{
    NSURL *videoURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"sample_Video" ofType:@"mp4"]];
    self.player = [AVPlayer playerWithURL:videoURL];

    AVPlayerLayer* playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
    playerLayer.frame = self.videoView.bounds;
    [self.videoView.layer addSublayer:playerLayer];
    [self.player play];
    self.slider.hidden = NO;
    self.playButton.enabled = NO;
    self.pauseButton.enabled = YES;

}

-(IBAction)pauseVideo:(id)sender
{
    [self.player pause];
    self.playButton.enabled = YES;
    self.pauseButton.enabled = NO;

}

My question is when I clicked on Play my video plays. When I clicked on pause my video pauses.

But when I clicked again play it starts again beginning. I want resume functionality.

Mayank Patel
  • 3,868
  • 10
  • 36
  • 59
Hardik1344
  • 2,917
  • 2
  • 15
  • 31

2 Answers2

3

This is because you are initialising Player again. Do this trick

Declare one variable in .h like BOOL isResumed = false;

Now update your code to this

-(IBAction)playVideo:(id)sender {
    if(isResumed) {
        [self.player play];
        self.pauseButton.enabled = YES;
    }
    else{
        NSURL *videoURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"sample_Video" ofType:@"mp4"]];
        self.player = [AVPlayer playerWithURL:videoURL];

        AVPlayerLayer* playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
        playerLayer.frame = self.videoView.bounds;
        [self.videoView.layer addSublayer:playerLayer];
        [self.player play];
        self.slider.hidden = NO;
        self.playButton.enabled = NO;
        self.pauseButton.enabled = YES;
    }
}

-(IBAction)pauseVideo:(id)sender {
    isResumed = true;
    [self.player pause];
    self.playButton.enabled = YES;
    self.pauseButton.enabled = NO;

}
Pushkraj Lanjekar
  • 2,254
  • 1
  • 21
  • 34
1

It's because in your playVideo method you are creating new instance of AVPlayer. Add 'if' condition to check if you already have AVPlayer then just resume it. Add this code in beginning of you playVideo method:

if (self.player) {
    [self.player play];
    return;
}
  • Thanks nebuchadnezzar,I need resume functionality what will be the resume functionality please tell me that .thank you – Hardik1344 Dec 19 '16 at 09:04
  • 1
    When you pause your video get current time of player and keep it safe `[self.player currentTime];`. In beginning of your playVideo method add this: `if (self.player) { [_player seekToTime:currentTime toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero completionHandler:^(BOOL finished) { [_player play]; }]; return; }` – nebuchadnezzar Dec 19 '16 at 09:25