web-dev-qa-db-ja.com

CMTimeを理解しよう

いくつかの ofCMTime (3つの個別のリンク)を見ましたが、それでもわかりません。 AVCaptureVideoDataOutputでAVCaptureSessionを使用していますが、出力の最大および最小フレームレートを設定したいです。私の問題は、CMTime構造体を理解していないだけです。

どうやらCMTimeMake(value、timeScale)はvalue/timeScale秒の合計で1/timeScale秒ごとに値フレームを提供しますか、それとも間違っていますか?

これが何をするのかを説明するために、なぜこれがどこにも文書化されていないのですか?

それが本当にそのように機能する場合、どのようにしてフレーム数を無制限にすることができますか?

本当に簡単な場合は、すみませんが、まだ何もクリックされていません。

45
RileyE

CMTime構造体は、有理数として保存される時間の長さを表します( CMTimeリファレンス を参照)。 CMTimeにはvalueフィールドとtimescaleフィールドがあり、時間を表しますvalue/timescale seconds

CMTimeMakeは、CMTime構造体を返す関数です。次に例を示します。

CMTime t1 = CMTimeMake(1, 10); // 1/10 second = 0.1 second
CMTime t2 = CMTimeMake(2, 1);  // 2 seconds
CMTime t3 = CMTimeMake(3, 4);  // 3/4 second = 0.75 second
CMTime t4 = CMTimeMake(6, 8);  // 6/8 second = 0.75 second

最後の2つの時間値t3およびt4は同じ時間値を表すため、

CMTimeCompare(t3, t4) == 0

videoMinFrameDurationAVCaptureSessionを設定した場合、設定しても違いはありません

connection.videoMinFrameDuration = CMTimeMake(1, 20); // or
connection.videoMinFrameDuration = CMTimeMake(2, 40);

どちらの場合も、フレーム間の最小時間間隔は1/20 = 0.05秒に設定されます。

137
Martin R