在安卓系统中如何获取已捕捉视频的时长?

4
使用以下代码我捕获了视频,但是如何在Android中获取捕获视频的持续时间? 还有,当用户丢弃视频并录制新视频时,如何获取新视频的持续时间。
Intent cameraIntent = new Intent(
android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult(cameraIntent, TAKE_VIDEO);

可能是重复问题:https://dev59.com/zm865IYBdhLWcg3wM7q0 - Padma Kumar
@PadmaKumar 这不是重复的,只有光标,也没有持续时间。 - Samir Mangroliya
3个回答

9
我认为最简单的方法是:
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))
    );

дљ†жМЗзЪДuriOfFileжШѓеЄ¶жЬЙеЙНзЉАfile://зЪДжЦЗдїґиЈѓеЊДеРЧпЉЯ - Salman Khakwani
请不要创建 MediaPlayer 实例来获取文件长度。在 Android 中有一个专门的 MediaMetadataRetriever 类可以实现这一功能。更多详细信息可在以下答案中查看:stackoverflow.com/a/33247728/1713920 - vir us

8

通过使用游标,您可以获取持续时间并且游标中有一个 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"));

2
  1. 上述建议适用于从录制的视频中获取持续时间。
  2. 但是,当我尝试从图库中选择的视频中检索持续时间时,它会抛出非法参数异常。
- Harish
我正在使用这个解决方案,但是我遇到了错误并导致我的应用程序崩溃。 - Arti

0

MediaPlayer是一个重量级的对象。建议使用MediaMetadataRetriever代替。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接