我使用QTMovie与QTMovieOpenForPlaybackAttribute:YES
,并使用QTMovieView来显示它。我需要计算它达到的帧率
我能想到这样做的一种方法是有一个回调,每次帧即将显示或准备显示时调用-有人熟悉这样的回调吗?
另一种方法是有一个定时器使用- currentframeimage,并与它测试的最后一帧图像进行比较-然而,首先我不知道你会如何去比较两个nsimage,其次我想这将是有问题的,如果两个连续帧是相同的,它会有效地假设一个帧被丢弃时,它不是
我能想到的最后一种方法是再次使用计时器,这次调用-currentTime。我已经尝试过了,但是,由于某种原因,timeScale被设置为1000000000。我读到时间尺度应该是100*fps,所以,为什么currentTime返回fps是10000000?这似乎完全不正确。返回的QTTime中没有设置标志
我到处搜索这方面的信息-任何搜索与帧率只会导致我如何设置捕获的帧率,这不是我要找的。
试试这个:
- (double)frameRate
{
double result = 0;
for (QTTrack* track in [_movie tracks])
{
QTMedia* trackMedia = [track media];
if ([trackMedia hasCharacteristic:QTMediaCharacteristicHasVideoFrameRate])
{
QTTime mediaDuration = [(NSValue*)[trackMedia attributeForKey:QTMediaDurationAttribute] QTTimeValue];
long long mediaDurationScaleValue = mediaDuration.timeScale;
long mediaDurationTimeValue = mediaDuration.timeValue;
long mediaSampleCount = [(NSNumber*)[trackMedia attributeForKey:QTMediaSampleCountAttribute] longValue];
result = (double)mediaSampleCount * ((double)mediaDurationScaleValue / (double)mediaDurationTimeValue);
break;
}
}
return result;
}