Возможно, немного поздно для вашей проблемы, но я нашел другую причину, чтобы объяснить это поведение:
Каждый раз, когда вы пытаетесь выполнить 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;
}
Нужен небольшой круг с плавающей точкой, потому что я нашел, что время для паузы несколько отличается от миллисекунды.