Различение событий паузы в MPMovieplayer - PullRequest
0 голосов
/ 25 февраля 2011

Я пытаюсь вызвать функцию, когда пользователь нажимает паузу в проигрывателе фильма (т. Е. MPMoviePlaybackStatePaused из NSNotificationCenter), но только когда он нажимает паузу.К сожалению, когда пользователь ищет вперед или назад (MPMoviePlaybackStateSeekingForward или MPMoviePlaybackStateSeekingBackward), проигрыватель фильма вызывает событие автоматической паузы, а затем переходит к событию поиска после небольшой задержки.Был бы какой-нибудь способ обнаружить, что пауза была сделана без того, чтобы она прибыла из события поиска.

Спасибо!

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Возможно, немного поздно для вашей проблемы, но я нашел другую причину, чтобы объяснить это поведение:

Каждый раз, когда вы пытаетесь выполнить FWD MPMoviePlaybackStateSeekingForward (4) или RWD MPMoviePlaybackStateSeekingBackward (5), перед MPMoviePlaybackStatePaused (2) и MPMoviePlaybackStatePlaying (1) после. Таким образом, вы можете легко отслеживать [MPMoviePlayerController currentPlaybackTime] до и после события и проверять, является ли его пауза (оба значения одинаковы), fwd (начальная <конечная) или rwd (начальная> конечная).

MPMoviePlayerController *mp1= (MPMoviePlayerController *)[notification object];
NSLog(@"Movie State is: %d",[mp1 playbackState]); 
float curPlaybackTime = round(2.0f * [mp1 currentPlaybackTime]) / 2.0f;

switch ([mp1 playbackState]) {
    case 0:
        NSLog(@"******* video has stopped");
        NSLog(@"TIME: %f",[mp1 currentPlaybackTime]); 
        break;
    case 1:
        NSLog(@"******* video is playing after being paused or moved.");
        NSLog(@"TIME: %f",curPlaybackTime); 
        if (curPlaybackTime==st_time) {
            if(st_time>0.0){ //if 0 it is a starting video.
                NSLog(@"Sending a Pause event");
            }    
        }else if(curPlaybackTime>st_time){ 
            NSLog(@"Sending a Forward event");
        }else{
            NSLog(@"Sending a Backaward event");
        }

        break;
    case 2:
        NSLog(@"******* video is paused");
        st_time=round(2.0f * [mp1 currentPlaybackTime]) / 2.0f;
        NSLog(@"TIME: %f",st_time); 
        break;
    case 3:
        NSLog(@"******* video was interrupted");
        break;
    case 4:
        NSLog(@"******* video is seeking forward");
        st_time=round(2.0f * [mp1 currentPlaybackTime]) / 2.0f;
        NSLog(@"TIME: %f",st_time); 
        break;
    case 5:
        NSLog(@"******* video is seeking Backwards");
        st_time=round(2.0f * [mp1 currentPlaybackTime]) / 2.0f;
        NSLog(@"TIME: %f",st_time); 
        break;
    default:
        break;
}   

Нужен небольшой круг с плавающей точкой, потому что я нашел, что время для паузы несколько отличается от миллисекунды.

0 голосов
/ 05 апреля 2011

Решил это, добавив таймер:

- (void)moviePlayerPlaybackStateDidChanged:(NSNotification *)notification  
  {  
  NSLog(@"VODViewer - moviePlayerPlaybackStateDidChanged()");

  if(moviePlayerController.playbackState == MPMoviePlaybackStatePlaying) 
  {
self.movieIsSeeking = NO;
  }

  if(moviePlayerController.playbackState == MPMoviePlaybackStatePaused)
  {
if (self.movieWasPaused)
{
   [self.bookmarkTimer invalidate];
   self.bookmarkTimer = nil;

   self.movieWasPaused = NO;
}
else
{
   self.bookmarkTimer = [NSTimer scheduledTimerWithTimeInterval:2.5 target:self selector:@selector(checkToSetBookmark:) userInfo:nil repeats:NO];
   self.movieWasPaused = YES;
}
  }

  if(moviePlayerController.playbackState == MPMoviePlaybackStateSeekingForward)
  {
    self.movieIsSeeking = YES;
  }

  if (moviePlayerController.playbackState == MPMoviePlaybackStateSeekingBackward)
  {
    self.movieIsSeeking = YES;
  } 
}
...