I've found an OS 3.0 technique that doesn't make use of private API components.
You can register to receive MPAVControllerTimeDidJumpNotification notifications and grab the MPAVControllerTimeParameter NSNumber out of that notification's userInfo Dictionary.
For example, just before you start playback register to receive the notifications:
#define MPAVControllerTimeDidJumpNotification @"MPAVControllerTimeDidJumpNotification"
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleTimeChanged:) name:MPAVControllerTimeDidJumpNotification object:nil];
Then start the movie playing. Add a method that will be called for each time change as the movie plays:
-(void)handleTimeChanged:(NSNotification *)notification
{
NSDictionary * userInfo = notification.userInfo;
int lastPositionInSeconds = [[userInfo valueForKey:@"MPAVControllerTimeParameter"] intValue];
NSLog( @"Last time was %d", lastPositionInSeconds );
}
And when the movie stops playing (you know this by listening for MPMoviePlayerPlaybackDidFinishNotification notifications) stop listening for the MPAVControllerTimeDidJumpNotification notifications.