Я пытаюсь воспроизвести видео с помощью AVFoundation. Я использую следующий код для кнопки, которая ускоряет воспроизведение на один кадр.
Он работает с перебоями, при некоторых исполнениях он будет делать правильные вещи и продвигаться на один кадр, но в большинстве случаев мне придется нажимать кнопку 3 или 4 раза, прежде чем он будет продвигать кадр.
Это заставляет меня думать, что это какая-то проблема точности, но я не могу понять, что это такое. Каждый раз, когда он запускается, новый CMTime, кажется, продвигается на ту же сумму.
Моя другая теория заключается в том, что это может быть вызвано тем, что currentTime не имеет точной границы кадра при моей частоте кадров (вызванной поиском по видео). Но я не знаю, как «привязаться» к ближайшему кадру при моей частоте кадров.
AVAssetTrack *videoTrack = ...;
Float64 frameRate = [videoTrack nominalFrameRate];
CMTime currentTime = [self.playerItem currentTime];
CMTime oneFrame = CMTimeMakeWithSeconds(1.0 / frameRate, currentTime.timescale);
CMTime added = CMTimeAdd(currentTime, oneFrame);
[self.player seekToTime:added toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];
Спасибо за вашу помощь!