Получить продолжительность видео из URL-адреса в приложении для Android

Я работаю над приложением, в котором пользователь 9X_android-device может видеть всю информацию и заголовок 9X_android-application видео, которые хранятся на СЕРВЕРЕ. Я почти 9X_android-device закончил с этим, за исключением того, что 9X_android-application независимо от того, как я его кодирую, я 9X_android-video-player не могу получить продолжительность видео 9X_android-device по заданному URL-адресу. Давайте возьмем 9X_android-framework это демонстрационное видео где-нибудь в 9X_android-video-player Интернете: CLICK HERE FOR VIDEO PATH Я хочу, чтобы приложение получало 9X_android продолжительность видео без необходимости 9X_android-framework открывать само видео.

Код, который я пытаюсь 9X_android использовать на Android, следующий:

MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource("https://12-lvl3-pdl.vimeocdn.com/01/1386/0/6932347/10573836.mp4?expires=1461047937&token=037972137fdfc4c2d9902"); String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); long timeInmillisec = Long.parseLong( time ); long duration = timeInmillisec / 1000; long hours = duration / 3600; long minutes = (duration - hours * 3600) / 60; long seconds = duration - (hours * 3600 + minutes * 60); Toast.makeText(context,Long.toString(timeInmillisec),Toast.LENGTH_SHORT).show(); 

Но результат, который 9X_android я получаю: java.lang.IllegalArgumentException в 9X_android-sdk строке 2 - "retriever.setDataSource()". Может 9X_android-application ли кто-нибудь помочь мне найти, что я делаю 9X_android-api не так, или Android предоставляет другой 9X_android-sdk способ получить необходимую информацию?

8
0
2
Общее количество ответов: 2

Ответ #1

Ответ на вопрос: Получить продолжительность видео из URL-адреса в приложении для Android

Может быть, вы ищете FFmpegMediaMetadataRetriever

Класс FFmpegMediaMetadataRetriever предоставляет унифицированный 9X_android-sdk интерфейс для получения кадра и метаданных 9X_android-device из входного медиафайла.

Используя константу 9X_android-video-player METADATA_KEY_DURATION для FFmpegMediaMetadataRetriever, вы можете получить продолжительность 9X_android-application вашего видео. Он вернет вам строку, а затем 9X_android-mobile вы можете преобразовать ее в LONG, чтобы 9X_android-ui получить TIME.

Вот код, который вам следует 9X_android-mobile использовать:

FFmpegMediaMetadataRetriever mFFmpegMediaMetadataRetriever = new MediaMetadataRetriever(); mFFmpegMediaMetadataRetriever .setDataSource("Your video url"); String mVideoDuration = mFFmpegMediaMetadataRetriever .extractMetadata(FFmpegMediaMetadataRetriever .METADATA_KEY_DURATION); long mTimeInMilliseconds= Long.parseLong(mVideoDuration); 

если описанное выше по-прежнему 9X_android-framework не работает, используйте

MediaMetadataRetriever retriever = new MediaMetadataRetriever(); if (Build.VERSION.SDK_INT >= 14) retriever.setDataSource("Your video url", new HashMap()); else retriever.setDataSource("Your video url"); 

Из вашего кода.

Надеюсь, это 9X_android-framework вам поможет. Удачи.

13
1

  • @Arjun Вы должны поместить свой URL ...

Ответ #2

Ответ на вопрос: Получить продолжительность видео из URL-адреса в приложении для Android

Это работает для меня (используйте этот 9X_android-application код в фоновом потоке, если ваше приложение 9X_android-framework работает медленно)

MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource("YourVideofileUrl", new HashMap()); String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); long timeInMillisec = Long.parseLong(time); retriever.release(); String duration=convertMillieToHMmSs(timeInMillisec); //use this duration 

и

 public static String convertMillieToHMmSs(long millie) { long seconds = (millie / 1000); long second = seconds % 60; long minute = (seconds / 60) % 60; long hour = (seconds / (60 * 60)) % 24; String result = ""; if (hour > 0) { return String.format("%02d:%02d:%02d", hour, minute, second); } else { return String.format("%02d:%02d" , minute, second); } } 

Выполните в фоновом режиме 9X_android-framework с помощью AsyncTask или сопрограмм, если 9X_android-sdk он медленный

 AsyncTask.execute(new Runnable() { @Override public void run() { MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(model.getLink(), new HashMap()); String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); long timeInMillisec = Long.parseLong(time); retriever.release(); String durations=convertMillieToHMmSs(timeInMillisec); //use this duration Log.d("durationns",durations); runOnUiThread(new Runnable() { @Override public void run() { duration.setText(durations);//set in textview } }); } }); 

8
0