Я пытаюсь воспроизвести видео с помощью 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];
Спасибо за вашу помощь!