I get the current time of my QTMovieView like so:

QTTime time = self.movieView.movie.currentTime;

and then put it into SMPTE form

NSString *SMPTE_string;
int days, hour, minute, second, frame;
long long result;

result = time.timeValue / time.timeScale; // second
frame = (time.timeValue % time.timeScale) / 100;

second = result % 60;

result = result / 60; // minute
minute = result % 60;

result = result / 60; // hour
hour = result % 24;

days = result;

SMPTE_string = [NSString stringWithFormat:@"%02d:%02d:%02d:%02d", hour, minute, second, frame]; // hh:mm:ss:ff

But I don't want to have it end with the frame number. I want it to end in milliseconds (hh:mm:ss.mil)

有帮助吗?

解决方案

The following should work:

double second = (double)time.timeValue / (double)time.timeScale;
int result = second / 60;
second -= 60 * result;
int minute = result % 60;
result = result / 60;
int hour = result % 24;
int days = result / 24;

NSString *SMPTE_string = [NSString stringWithFormat:@"%02d:%02d:%06.3f", hour, minute, second];

The seconds are computed as double instead of int and then printed with millisecond precision using the %06.3f format.

(Note that days = result in your code is not correct.)

If you prefer integer arithmetic then you can also compute the milliseconds from QTTime time with

long long milli = (1000 * (time.timeValue % time.timeScale)) / time.timeScale;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top