我正在研究android中的视频文件持续时间查找。但我无法得到它。我的视频文件位于SD卡的特定文件夹中。想要将它们作为列表视图与持续时间和名称绑定。我有名字。但搜索解决方案以查找持续时间。请帮我 。提前致谢 。
Rajesh。
答案 0 :(得分:9)
int msec = MediaPlayer.create(context,Uri.fromFile(new File(path)))。getDuration();
答案 1 :(得分:1)
您无需创建MediaPlayer。我已经制作了一个功能,可以为你的视频文件存储安卓设备。
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;
}
如果您对此有任何疑问,请与我联系。
答案 2 :(得分:0)
不要使用MediaPlayer!效率低
使用MediaMetadataRetriever
代替 only 所需的元数据
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())