web-dev-qa-db-ja.com

ObjectiveC /CMTime-AVPlayer.durationをミリ秒に変換します

着信音を再生するためのアプリを作成していますが、毎回再生された着信音の現在の時刻をミリ秒単位で知りたいです。

CMTime cTime = player_.currentTime; float currentTime = cTime.value/cTime.timescale;

ここでのcurrentTimeは、秒単位の値を取得します。正確なcurrentTime値をミリ秒単位で取得するにはどうすればよいですか?

18
nano

現在の時刻を秒単位で取得する方法があります。その1000倍の時間を取得すると、ミリ秒が得られます。

Float64 dur = CMTimeGetSeconds([player currentTime]);
Float64 durInMiliSec = 1000*dur;

残念ながら、それをfloatまたはFloat64として使用する必要があります。その結果をCMTimeとして使用することはできません。

56
Samssonart

受け入れられた答えは詳細を失っていると思います。ミリ秒を取得するより正確な方法は次のとおりです。

let seconds : Double = Float64(time.value * 1000) / Float64(time.timescale)

最初に秒に変換すると、精度が失われます。

6
Trevis Thomas

CMTime.valueとCMTime.timescaleはどちらも整数であるため、コードから判断すると、結果は丸められ、正確なタイムスタンプは取得されません。代わりにCMTimeGetSecondsを試してください。

2
Alex Chugunov