Перемещение на один кадр в CMTime и AVFoundation

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

Спасибо за вашу помощь!

6
задан Wil Gieseler 23 June 2011 в 23:26
поделиться