MediaMetadataRetriever中媒体持续时间的测量单位是什么

问题描述 投票:12回答:3

一个可以使用

 String MediaMetadataRetriver.extractMetadata(int key);

 key = MediaMetadataRetriver.METADATA_KEY_DURATION

提取媒体持续时间。

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

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

android metadata media duration
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);
                         }
                    }  

1
投票

因为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


0
投票

提取的输出为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));
    }
© www.soinside.com 2019 - 2024. All rights reserved.