我正在研究在 android 中查找视频文件持续时间。但我无法得到它。我的视频文件在 SD 卡的特定文件夹中可用。想要将它们绑定为具有持续时间和名称的列表视图。我得到了这个名字。但搜索解决方案以找到持续时间。请帮我 。提前致谢 。
拉杰什。
int msec = MediaPlayer.create(context, Uri.fromFile(new File(path))).getDuration();
您不需要创建 MediaPlayer。我制作了一项功能,可以为您提供视频文件存储的 android 设备的持续时间。
public static long checkVideoDurationValidation(Context context, Uri uri){
Log.d("CommonHandler", "Uri: " + uri);
Cursor cursor = MediaStore.Video.query(context.getContentResolver(), uri, new
String[]{MediaStore.Video.VideoColumns.DURATION});
long duration = 0;
if (cursor != null && cursor.moveToFirst()) {
duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Video
.VideoColumns.DURATION));
cursor.close();
}
return duration;
}
如果您对此有任何疑问,请告诉我。
不要使用媒体播放器!效率低下
改为仅MediaMetadataRetriever
获取您需要的元数据
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
// There are other variations of setDataSource(), if you have a different input
retriever.setDataSource(context, Uri.fromFile(videoFile));
String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
long durationMs = Long.parseLong(time);
retriever.release()
这是在 Kotlin 中获取媒体文件持续时间的方法
fun File.getMediaDuration(context: Context): Long {
if (!exists()) return 0
val retriever = MediaMetadataRetriever()
retriever.setDataSource(context, Uri.parse(absolutePath))
val duration = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)
retriever.release()
return duration.toLongOrNull() ?: 0
}
如果您想让它更安全(Uri.parse 可能会抛出异常),请使用此组合。其他的通常也很有用:)
fun String?.asUri(): Uri? {
try {
return Uri.parse(this)
} catch (e: Exception) {
}
return null
}
val File.uri get() = this.absolutePath.asUri()
fun File.getMediaDuration(context: Context): Long {
if (!exists()) return 0
val retriever = MediaMetadataRetriever()
retriever.setDataSource(context, uri)
val duration = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)
retriever.release()
return duration.toLongOrNull() ?: 0
}
这里不是必需的,但通常有用的附加 Uri 扩展
val Uri?.exists get() = if (this == null) false else asFile().exists()
fun Uri.asFile(): File = File(toString())