可以使用
String MediaMetadataRetriver.extractMetadata(int key);
带
key = MediaMetadataRetriver.METADATA_KEY_DURATION
提取媒体持续时间。
此函数返回一个String,但没有关于此字符串表示的格式或测量单位的文档。 我认为它是 ms 中的整数,但MediaMetadataRetriever的其余部分使用 us 。
那么持续时间的单位是多少?你认为缺乏规范是故意还是错误?
答案 0 :(得分:13)
见这个
long durationMs = Long.parseLong(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));
long duration = durationMs / 1000;
long h = duration / 3600;
long m = (duration - h * 3600) / 60;
long s = duration - (h * 3600 + m * 60);
String durationValue;
if (h == 0) {
durationValue = String.format(
activity.getString(R.string.details_ms), m, s);
} else {
durationValue = String.format(
activity.getString(R.string.details_hms), h, m, s);
}
}
答案 1 :(得分:1)
因为extractMetadata可以返回null,所以需要在check:
中包装此调用int duration = 0;
String dur = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
if (dur != null) {
duration = Integer.parseInt(dur);
}
mDuration = duration;
long h = duration / 3600;
long m = (duration - h * 3600) / 60;
long s = duration - (h * 3600 + m * 60);
答案 2 :(得分:1)
提取的输出为String
,您需要解析为long
。您可以像这样处理格式的持续时间:
public static String formatDurationLongToString() {
String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
long timeInMillisecond = Long.parseLong(time)
return String.format(Locale.US, "%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(timeInMillisecond),
TimeUnit.MILLISECONDS.toMinutes(timeInMillisecond) % TimeUnit.HOURS.toMinutes(1),
TimeUnit.MILLISECONDS.toSeconds(timeInMillisecond) % TimeUnit.MINUTES.toSeconds(1));
}