68

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

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

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

本当にそのように機能する場合、フレーム数を無制限にするにはどうすればよいですか?

本当に単純な場合は申し訳ありませんが、まだ何もクリックしていません。

4

2 に答える 2

176

CMTime構造体は、有理数として格納される時間の長さを表します ( CMTime リファレンス を参照してください)CMTimeにはvaluetimescaleフィールドがあり、時刻を表し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 つの時間値t3t4は同じ時間値を表します。

CMTimeCompare(t3, t4) == 0

を設定してvideoMinFrameDurationも、設定しAVCaptureSessionても違いはありません

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

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

于 2012-10-21T20:32:28.647 に答える