AVPlayer busca No es preciso

Entonces tengo una transmisión HLS que tengo en reproducción AVPlayer. Estoy intentando crear un button para retroceder 30 segundos:

- (void) rewindStream { NSLog(@"Seeking..."); NSLog(@"Current Time: %f", CMTimeGetSeconds(self.player.currentTime)); NSLog(@"New Time: %f", CMTimeGetSeconds(CMTimeMakeWithSeconds(CMTimeGetSeconds(self.player.currentTime) - 30.0f, self.player.currentTime.timescale))); [self.player pause]; CMTime cmTime = CMTimeMakeWithSeconds(CMTimeGetSeconds(self.player.currentTime) - 30.0f, self.player.currentTime.timescale); [self.player seekToTime:cmTime toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero completionHandler:^(BOOL finished) { NSLog(@"Complete. Current Time: %f", CMTimeGetSeconds(self.player.currentTime)); [self.player play]; }]; } 

Que funciona a veces, pero no a otros. Aquí está el logging:

 Seeking... Current Time: 47.253361 New Time: 37.254001 Complete. Current Time: 37.254944 Seeking... Current Time: 59.409800 New Time: 49.410447 Complete. Current Time: 50.103244 Seeking... Current Time: 68.780054 New Time: 58.780436 Complete. Current Time: 60.086244 Seeking... Current Time: 80.493733 New Time: 70.494375 Complete. Current Time: 80.140578 Seeking... Current Time: 92.674773 New Time: 82.675062 Complete. Current Time: 110.135244 

Tengo el set de tolerancia, y me estoy asegurando de que dé time suficiente para que los segmentos se descarguen / almacenen, de modo que la búsqueda sea posible, pero no estoy seguro de cuál podría ser el problema.

Cualquier ayuda sería muy apreciada.

Gracias.

Siempre uso una escala de time de 60000 que proporciona suficiente precisión para casi cualquier cosa. No estoy seguro de si este es tu problema, pero he descubierto que la mayoría de mis problemas de CMTime se produjeron antes de decidirse por esto. Warren Moore tiene una gran publicación que describe esto en http://warrenmoore.net/understanding-cmtime

Se ve bien, de la parte superior de mi cabeza, tal vez algo como esto?

 CMTime currentTime = self.player.currentTime; CMTime timeToSubtract = CMTimeMakeWithSeconds(30, 1); CMTime resultTime = CMTimeSubtract(currentTime, timeToSubtract); [self.player seekToTime:resultTime];