Я предполагаю, что проблема в буферизации контента, так как вы возвращаетесь на X (предположительно 15 секунд) назад, это очень много, и для буферизации контента требуется немного времени.
Попробуйте следующий код ...
@property (strong, nonatomic) AVPlayer *player;
.
.
.
@synthesize player
.
.
.
- (IBAction)rewind:(id)sender {
NSLog(@"rewind called");
int secToRewind = DEFAULT_REWIND_SEC;
int time = CMTimeGetSeconds(player.currentTime) - secToRewind;
CMTime newTime = CMTimeMakeWithSeconds(time, 1);
CMTime tolerance = CMTimeMakeWithSeconds(1, 1);
__weak __typeof__(self) weakSelf = self;
int playerRate = player.rate;
[player seekToTime:newTime toleranceBefore: tolerance toleranceAfter: tolerance completionHandler:^(BOOL finished) {
do {
NSLog(@"Successful rewind");
__strong __typeof__(self) strongSelf = weakSelf;
if (playerRate == 0) {
[player playAt:[player currentTime]];
}
} while (completed == true);
}];
}