如何在android中获取捕获视频的持续时间?

如何在android中获取捕获视频的持续时间?,android,Android,使用下面的代码我捕获了视频,但如何在android中获取捕获视频的持续时间? 有时用户会丢弃视频并录制新视频,然后获得新视频的持续时间 Intent cameraIntent = new Intent( android.provider.MediaStore.ACTION_VIDEO_CAPTURE); startActivityForResult(cameraIntent, TAKE_VIDEO); 使用游标可以获取持续时间,游标中有duration列,可以作为字符串获取 Cursor cu

使用下面的代码我捕获了视频,但如何在android中获取捕获视频的持续时间? 有时用户会丢弃视频并录制新视频,然后获得新视频的持续时间

Intent cameraIntent = new Intent(
android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult(cameraIntent, TAKE_VIDEO);

使用游标可以获取持续时间,游标中有
duration
列,可以作为字符串获取

Cursor cursor = MediaStore.Video.query(getContentResolver(),data.getData(),
                new String[] { MediaStore.Video.VideoColumns.DURATION });
System.out.println(">>>>>>>>>>"+cursor.getCount());
cursor.moveToFirst();

String duration = cursor.getString(cursor.getColumnIndex("duration"));

我认为最简单的方法是:

MediaPlayer mp = MediaPlayer.create(this, Uri.parse(uriOfFile);
int duration = mp.getDuration();
mp.release();
/*convert millis to appropriate time*/
return String.format("%d min, %d sec", 
        TimeUnit.MILLISECONDS.toMinutes(duration),
        TimeUnit.MILLISECONDS.toSeconds(duration) - 
        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration))
    );

MediaPlayer是一个沉重的物体。改用MediaMetadataRetriever

fun getMediaDurationMs(context: Context, fileUri: Uri): Int? {
    val mmr = MediaMetadataRetriever()
    mmr.setDataSource(context, fileUri)
    return mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)?.toInt()
}

可能重复:@PadmaKumar它不重复,只有游标,也没有durationBy uriOfFile,您是指附加了
文件://
前缀的文件路径吗?请不要创建MediaPlayer实例只是为了获取文件长度。android中有一个专用的MediaMetadataRetriever类用于此目的。以下答案提供了更多详细信息:stackoverflow.com/a/33247728/17139201)正在从录制的视频中获取持续时间。2) 但当我试图从gallery selected视频检索持续时间时,它抛出了IllegalArgumentException。