Значение скорости на AVPlayer - это скорость относительно реального времени, к которой он играет, например, 0,5 - медленное движение, 2 - двойная скорость.
Как указывает Пареш Навадия, на дорожке также есть номинальная переменная FrameRate, однако это иногда дает странные результаты. самое лучшее решение, которое я нашел до сих пор использовать следующее:
CMTime frameDuration = [myAsset tracksWithMediaType:AVMediaTypeVideo][0].minFrameDuration;
float fps = frameDuration.timescale/(float)frameDuration.value;
выше дает несколько неожиданные результаты для переменной частотой кадров, но переменной частотой кадров имеет немного странное поведение в любом случае. Кроме того, он соответствует ffmpeg -i в моих тестах.
EDIT ----
Я нашел иногда выше, дает время kCMTimeZero. Обходной путь, который я использовал для этого, - создать AVAssetReader с выходом трека, получить очки первого кадра и второго кадра, а затем вычесть их.
'nomFrameRate' - самый простой способ. Начиная с AVPlayer, вы можете получить его 'currentItem', затем' треки', а затем каждый трек 'assetTrack', а затем каждый номинальный символ ресурса' номиналFrameRate'. Обратите внимание, что фильмы могут иметь несколько видеодорожек, а некоторые (только для аудио) не имеют видеодорожек. –