12

一个可以使用

 String MediaMetadataRetriver.extractMetadata(int key);

 key = MediaMetadataRetriver.METADATA_KEY_DURATION

提取媒体持续时间。

此函数返回一个字符串,但没有关于此字符串表示的格式或度量单位的文档。我假设它是ms中的整数,但 MediaMetadataRetriever 的其余 API 使用us

那么持续时间的单位是什么?您认为缺乏规范是故意的还是错误的?

4

3 回答 3

14

看到这个

  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);
                         }
                    }  
于 2012-05-11T15:26:55.520 回答
2

因为 extractMetadata 可以返回 null 您需要将此调用包装在检查中:

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);

(来自http://www.codota.com/android/scenarios/52fcbd47da0af79604fb4a67/android.media.MediaMetadataRetriever?tag=dragonfly

于 2014-12-10T00:44:13.587 回答
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));
    }
于 2020-04-01T05:02:27.967 回答