Андроид видео показать общую продолжительность без использования медиа-контроллера

Я пытаюсь определить продолжительность воспроизведения видео при создании своего собственного медиа-контроллера. Когда я использую медиа-контроллер по умолчанию, проблем не возникает, так как он показывает все детали. Я хочу создать свой собственный медиа-контроллер только для добавления графики в мое приложение, Я не смог получить общую продолжительность моего онлайн-видео, используя любой из следующих кодов. Некоторые эксперты, пожалуйста, помогите.

    mVideoView.setOnPreparedListener(new OnPreparedListener() {

        @Override
        public void onPrepared(MediaPlayer mp) {

            long duration1 = mp.getDuration();

            Log.d("DURATION of media player", duration1+"");

            Log.d("Videoview duration", mVideoView.getDuration()+"");

            int msec = MediaPlayer.create(getApplicationContext(),video).getDuration();

            Log.d("Duration of msec", msec+"");

            try{
                //this block not working ... why???
                MediaMetadataRetriever retriever = new MediaMetadataRetriever();
//video = uri.parse(String myurl)
                retriever.setDataSource(getApplicationContext(),video);   

                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);
                finalTime = timeInmillisec;
                Log.d("HH:MM:SS", hours+":"+minutes+":"+seconds+""); 

            }catch(IllegalArgumentException e){
                Log.d(TAG, "media meta retriever error");
                e.printStackTrace();
                Log.d(TAG, e.getMessage()+"");

            }

моя последняя попытка всегда возвращала недопустимое исключение аргумента, хотя URL-адрес воспроизводился правильно, даже с помощью vlc media player. Я пробовал разные способы, например,

retriever.setDataSource (String path)
retriever.setDataSource (Context context, Uri uri)

2 ответа

Решение

Я наконец-то получил свое решение после пользовательского android-media-controller, когда мне нужно было изменить весь пользовательский интерфейс, мне не нужно получать общую продолжительность, которую мне нужно было отображать в моем собственном медиа-контроллере.

Попробуйте https://github.com/wseemann/FFmpegMediaMetadataRetriever:

FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
mmr.setDataSource("some URL");
mmr.release();
Другие вопросы по тегам