2011-07-14 85 views
3

我正在使用QTMovie和QTMovieOpenForPlaybackAttribute:YES,並使用QTMovieView來顯示它。我需要計算它實現的幀率。使用QTMovie確定流的實際幀速率

我可以想到的一種方法是,每當框架即將顯示或準備顯示時,都會調用回調函數 - 是否有人熟悉這種回調?

另一種方法是有一個計時器使用-currentFrameImage並將其與它測試的最後一幀圖像進行比較 - 但首先,我不知道如何去比較兩個NSImages,其次我會想象這會如果兩個連續的幀是相同的,那麼它會有效地假定一幀在不是

我能想到的最後一種方法是再次使用計時器,這次調用-currentTime。但是,由於某種原因,我曾嘗試過將timeScale設置爲1000000000.我爲read that the time scale is supposed to be 100*fps,那麼爲什麼currentTime返回FPS爲10000000?這似乎完全不正確。在返回的QTTime中沒有設置標誌。

我到處搜索過有關此信息的信息 - 任何使用幀速率的搜索都只會導致我如何設置捕捉幀速率,這不是我正在尋找的。

+0

時標並始終爲100 * FPS;它可以是足夠大的任何東西以提供表示幀速率所需的準確度。 – koan

回答

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