Objective c 使用QTMovie确定流的实际帧速率

Objective c 使用QTMovie确定流的实际帧速率,objective-c,cocoa,qtkit,Objective C,Cocoa,Qtkit,我将QTMovie与QTMovieOpenForPlaybackAttribute:YES一起使用,并使用QTMovieView来显示它。我需要计算它实现的帧率 我能想到的一种方法是在每次帧即将显示或准备显示时调用一个回调-有人熟悉这样的回调吗 另一种方法是有一个计时器,它使用-currentFrameImage并将其与测试的最后一帧图像进行比较-但是首先我不知道如何比较两个NSImages,其次我认为如果两个连续帧是相同的,这会有问题,它将有效地假设一个帧在未被删除时被删除 我能想到的最后一种

我将QTMovie与
QTMovieOpenForPlaybackAttribute:YES
一起使用,并使用QTMovieView来显示它。我需要计算它实现的帧率

我能想到的一种方法是在每次帧即将显示或准备显示时调用一个回调-有人熟悉这样的回调吗

另一种方法是有一个计时器,它使用-currentFrameImage并将其与测试的最后一帧图像进行比较-但是首先我不知道如何比较两个NSImages,其次我认为如果两个连续帧是相同的,这会有问题,它将有效地假设一个帧在未被删除时被删除

我能想到的最后一种方法是再次使用计时器,这次调用-currentTime。我已经试过了,但是,出于某种原因,时间刻度设置为100000000。那么,为什么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;
}

时间刻度并不总是100*fps;它可以是足够大的任何东西,以提供表示帧速率所需的精度。