目标c -使用QTMovie确定流的实际帧率



我使用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;
}

相关内容

  • 没有找到相关文章