2011-07-14 9 views
3

私はQTMovieOpenForPlaybackAttribute:YESでQTMovieを使用しており、それを表示するためにQTMovieViewを使用しています。私は達成しているフレームレートを計算する必要があります。QTMovieを使用してストリームの実際のフレームレートを確認します

これを行う方法の1つは、フレームが表示されるたびに表示されるか、表示されるたびに呼び出されるコールバックを持つことです。このようなコールバックをよく知っている人はいますか?

もう1つの方法は、-currentFrameImageを使用し、テストした最後のフレーム画像と比較するタイマーを使用することです。しかし、最初に、2つのNSImageを比較する方法がわかりません。 2つのシーケンシャルフレームが同じであれば問題になるかもしれません。

私が考えている最後の方法は、今度は-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; 
} 
関連する問題