3

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

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

另一种方法是有一个计时器,它使用 -currentFrameImage 并将其与它测试的最后一帧图像进行比较 - 但是首先我不知道你将如何比较两个 NSImage,其次我想如果两个连续帧是相同的,它会有效地假设一个帧在没有被丢弃时被丢弃

我能想到的最后一种方法是再次使用计时器,这次调用 -currentTime。我试过这个,但是,由于某种原因,timeScale 设置为 1000000000。我读到时间刻度应该是 100*fps,那么,为什么 currentTime 返回 FPS 是 10000000?这似乎完全不正确。返回的 QTTime 中没有设置任何标志。

我到处搜索这方面的信息 - 任何与帧速率有关的搜索只会让我知道如何在捕获时设置帧速率,这不是我想要的。

4

1 回答 1

3

Try this:

- (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;
}
于 2011-08-29T04:17:05.140 回答