Как получить продолжительность видеофайла?
Я начинаю программировать на Android.
Я написал приложение, чтобы перечислить все видеофайлы в папке и отобразить информацию обо всех видео в папке. Но когда я пытаюсь получить продолжительность видео, он возвращает null, и я не могу найти способ его получить.
Кто-нибудь может мне помочь?
Ниже мой код:
Uri uri = Uri.parse("content://media/external/video/media/9");
Cursor cursor = MediaStore.Video.query(res, data.getData(), new String[]{MediaStore.Video.VideoColumns.DURATION});
if(cursor.moveToFirst()) {
String duration = cursor.getString(0);
System.out.println("Duration: " + duration);
}
Ответы
Ответ 1
Используйте MediaMetadataRetriever
для получения данных, относящихся к мультимедиа:
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
//use one of overloaded setDataSource() functions to set your data source
retriever.setDataSource(context, Uri.fromFile(videoFile));
String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
long timeInMillisec = Long.parseLong(time );
retriever.release()
Ответ 2
Я думаю, что самый простой способ:
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))
);
Ответ 3
Вы должны посетить
У меня была такая же проблема, как у вас.
Это точный ответ на вашу проблему.
Это альтернатива медиа-магазину или курсору для ретранслятора метаданных
Надеюсь, это поможет вам.
Ответ 4
Я не думаю, что вы публикуете свой URI в видеоресурсе медиазвезды
Uri uri = Uri.parse("content://media/external/video/media/9");
Cursor cursor = MediaStore.Video.query(res, data.getData(), new String[]{MediaStore.Video.VideoColumns.DURATION});
Ответ 5
public static long getDurationOfSound(Context context, Object soundFile)
{
int millis = 0;
MediaPlayer mp = new MediaPlayer();
try
{
Class<? extends Object> currentArgClass = soundFile.getClass();
if(currentArgClass == Integer.class)
{
AssetFileDescriptor afd = context.getResources().openRawResourceFd((Integer)soundFile);
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
}
else if(currentArgClass == String.class)
{
mp.setDataSource((String)soundFile);
}
else if(currentArgClass == File.class)
{
mp.setDataSource(((File)soundFile).getAbsolutePath());
}
mp.prepare();
millis = mp.getDuration();
}
catch(Exception e)
{
// Logger.e(e.toString());
}
finally
{
mp.release();
mp = null;
}
return millis;
}
Ответ 6
MediaPlayer mpl = MediaPlayer.create(this,R.raw.videoFile);
int si = mpl.getDuration();
Это даст продолжительность видеофайла