0

我正在尝试在创建自定义媒体控制器时获取正在播放的视频的持续时间。当我使用默认媒体控制器时,似乎没有问题,因为它显示了所有细节。我想创建自己的媒体控制器,只是为了在我的应用程序中添加一些图形. 我无法使用以下任何代码获得在线视频的总时长。请高手帮忙。

    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()+"");

            }

我的最后一次尝试总是返回非法参数异常,尽管即使使用 vlc 媒体播放器也能正确播放 url 我尝试了不同的可用方式,例如

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

2 回答 2

0

尝试FFmpegMediaMetadataRetriever

FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
mmr.setDataSource("some URL");
mmr.release();
于 2014-09-02T18:21:17.933 回答
0

我终于在custom-android-media-controller之后得到了我的解决方案 ,因为我要更改整个 UI,我不需要获得我需要在我的自定义媒体控制器中显示的总持续时间。

于 2014-09-17T07:02:15.267 回答