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

时间:2011-07-14 15:17:09

标签: objective-c cocoa qtkit

我正在使用QTMovie和QTMovieOpenForPlaybackAttribute:YES,并使用QTMovieView来显示它。我需要计算它实现的帧速率。

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

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

时丢弃了帧

我能想到的最后一种方法是再次使用计时器,这次调用-currentTime。我试过这个,但是,出于某种原因,timeScale被设置为1000000000.I read that the time scale is supposed to be 100*fps,那么,为什么currentTime会返回FPS为10000000?这似乎完全不正确。返回的QTTime中没有设置标志。

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

1 个答案:

答案 0 :(得分:3)

试试这个:

- (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;
}