Android 如何获取音频流的持续时间并从任意点继续音频流

Android 如何获取音频流的持续时间并从任意点继续音频流,android,audio-streaming,android-mediaplayer,Android,Audio Streaming,Android Mediaplayer,说明: public class MyAudioPlayer extends Activity implements OnClickListener{ MediaPlayer mediaPlayer = null; private boolean isPaused=false; private boolean isStop = true; String filePath = null; String productName = null;

说明:

public class MyAudioPlayer extends Activity 
implements OnClickListener{


    MediaPlayer mediaPlayer = null;
    private boolean isPaused=false;
    private boolean isStop = true;

    String filePath = null;
    String productName = null;

    ImageButton btnPlay = null;
    ImageButton btnPause = null;
    ImageButton btnReset = null;
    ImageButton btnStop = null;

    AudioManager audioManager = null;
    SeekBar volControl = null;
    SeekBar progressControl = null;
    TextView progressText = null;
    long durationInMillis = -1;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ltd_audio_player);

        volControl = (SeekBar)findViewById(R.id.player_volume);
        progressControl = (SeekBar)findViewById(R.id.player_seekbar);
        progressText = (TextView) findViewById(R.id.player_progress_text);

        btnPlay = (ImageButton) findViewById(R.id.ic_player_play); 

        btnPause = (ImageButton) findViewById(R.id.ic_player_pause);  

        btnReset = (ImageButton) findViewById(R.id.ic_player_reset); 

        btnStop = (ImageButton) findViewById(R.id.ic_player_stop);   

        btnPlay.setOnClickListener(this);
        btnPause.setOnClickListener(this);
        btnReset.setOnClickListener(this);
        btnStop.setOnClickListener(this);

        filePath = getIntent().getExtras().getString("localPath");

        this.setPlayer();
        this.resetAndStartPlayer();


    }

    @Override
    protected void onResume() {
        super.onResume();   
        isPaused=false;
        progressText.postDelayed(onEverySecond, 1000);
    }

    @Override
    protected void onPause() {
        super.onPause();

        isPaused=true;
    }
    private void setProgressControl() {
        int maxVolume = mediaPlayer.getDuration();
        int curVolume = mediaPlayer.getCurrentPosition();

        progressControl.setMax(maxVolume);
        progressControl.setProgress(curVolume);
        progressControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

            @Override
            public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) {
                mediaPlayer.seekTo(progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }
        });     
    }
    @Override
    public void onClick(View v) {
        switch(v.getId()){
        case R.id.ic_player_play:
            if(isStop==true){
                try {
                    mediaPlayer.prepareAsync();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else{
                mediaPlayer.start();
                isStop = true;
            }
            break;
        case R.id.ic_player_pause:
            mediaPlayer.pause();
            break;
        case R.id.ic_player_reset:
            mediaPlayer.seekTo(0);
            break;
        case R.id.ic_player_stop:
            isStop = true;
            progressControl.setProgress(0);
            mediaPlayer.stop();
            break;
        }

    }
    private void resetAndStartPlayer(){
        try {
            if(filePath!=null){
                mediaPlayer.setDataSource(filePath);
                mediaPlayer.prepareAsync();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void setPlayer(){

        getWindow().setFormat(PixelFormat.UNKNOWN);
        mediaPlayer = new MediaPlayer();    

        mediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {

            @Override
            public void onBufferingUpdate(MediaPlayer mp, int percent) {
                progressControl.setSecondaryProgress((progressControl.getMax()/100)*percent);

            }
        });
        mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                mediaPlayer.start();
                isStop=false;
                durationInMillis = mediaPlayer.getDuration();
                MyAudioPlayer.this.setProgressControl();
            }
        });
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    }
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        mediaPlayer.release();
        super.onDestroy();
    }
    protected void setProgressText() {
        durationInMillis = mediaPlayer.getDuration();
        int curVolume = mediaPlayer.getCurrentPosition();
        long HOUR = 60*60*1000;
        if(progressText!=null){
            if(durationInMillis>HOUR){
                progressText.setText(String.format("%1$tH:%1$tM:%1$tS", new Date(curVolume))
                        +" / "+String.format("%1$tH:%1$tM:%1$tS", new Date(durationInMillis)));
            }else{
                progressText.setText(String.format("%1$tM:%1$tS", new Date(curVolume))
                        +" / "+String.format("%1$tM:%1$tS", new Date(durationInMillis)));
            }
        }       
    }
    private Runnable onEverySecond=new Runnable() {
        public void run() {

            if (mediaPlayer!=null) {
                progressControl.setProgress(mediaPlayer.getCurrentPosition());

                MyAudioPlayer.this.setProgressText();
            }

            if (!isPaused) {
                progressText.postDelayed(onEverySecond, 1000);
            }
        }
    };
}
我有以下音频播放器的代码。我可以通过单击进度条(介于0到mediaplayer.getDuration()之间)从任意持续时间继续播放音频。它非常适合音频播放

音频流问题:

public class MyAudioPlayer extends Activity 
implements OnClickListener{


    MediaPlayer mediaPlayer = null;
    private boolean isPaused=false;
    private boolean isStop = true;

    String filePath = null;
    String productName = null;

    ImageButton btnPlay = null;
    ImageButton btnPause = null;
    ImageButton btnReset = null;
    ImageButton btnStop = null;

    AudioManager audioManager = null;
    SeekBar volControl = null;
    SeekBar progressControl = null;
    TextView progressText = null;
    long durationInMillis = -1;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ltd_audio_player);

        volControl = (SeekBar)findViewById(R.id.player_volume);
        progressControl = (SeekBar)findViewById(R.id.player_seekbar);
        progressText = (TextView) findViewById(R.id.player_progress_text);

        btnPlay = (ImageButton) findViewById(R.id.ic_player_play); 

        btnPause = (ImageButton) findViewById(R.id.ic_player_pause);  

        btnReset = (ImageButton) findViewById(R.id.ic_player_reset); 

        btnStop = (ImageButton) findViewById(R.id.ic_player_stop);   

        btnPlay.setOnClickListener(this);
        btnPause.setOnClickListener(this);
        btnReset.setOnClickListener(this);
        btnStop.setOnClickListener(this);

        filePath = getIntent().getExtras().getString("localPath");

        this.setPlayer();
        this.resetAndStartPlayer();


    }

    @Override
    protected void onResume() {
        super.onResume();   
        isPaused=false;
        progressText.postDelayed(onEverySecond, 1000);
    }

    @Override
    protected void onPause() {
        super.onPause();

        isPaused=true;
    }
    private void setProgressControl() {
        int maxVolume = mediaPlayer.getDuration();
        int curVolume = mediaPlayer.getCurrentPosition();

        progressControl.setMax(maxVolume);
        progressControl.setProgress(curVolume);
        progressControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

            @Override
            public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) {
                mediaPlayer.seekTo(progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }
        });     
    }
    @Override
    public void onClick(View v) {
        switch(v.getId()){
        case R.id.ic_player_play:
            if(isStop==true){
                try {
                    mediaPlayer.prepareAsync();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else{
                mediaPlayer.start();
                isStop = true;
            }
            break;
        case R.id.ic_player_pause:
            mediaPlayer.pause();
            break;
        case R.id.ic_player_reset:
            mediaPlayer.seekTo(0);
            break;
        case R.id.ic_player_stop:
            isStop = true;
            progressControl.setProgress(0);
            mediaPlayer.stop();
            break;
        }

    }
    private void resetAndStartPlayer(){
        try {
            if(filePath!=null){
                mediaPlayer.setDataSource(filePath);
                mediaPlayer.prepareAsync();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void setPlayer(){

        getWindow().setFormat(PixelFormat.UNKNOWN);
        mediaPlayer = new MediaPlayer();    

        mediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {

            @Override
            public void onBufferingUpdate(MediaPlayer mp, int percent) {
                progressControl.setSecondaryProgress((progressControl.getMax()/100)*percent);

            }
        });
        mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                mediaPlayer.start();
                isStop=false;
                durationInMillis = mediaPlayer.getDuration();
                MyAudioPlayer.this.setProgressControl();
            }
        });
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    }
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        mediaPlayer.release();
        super.onDestroy();
    }
    protected void setProgressText() {
        durationInMillis = mediaPlayer.getDuration();
        int curVolume = mediaPlayer.getCurrentPosition();
        long HOUR = 60*60*1000;
        if(progressText!=null){
            if(durationInMillis>HOUR){
                progressText.setText(String.format("%1$tH:%1$tM:%1$tS", new Date(curVolume))
                        +" / "+String.format("%1$tH:%1$tM:%1$tS", new Date(durationInMillis)));
            }else{
                progressText.setText(String.format("%1$tM:%1$tS", new Date(curVolume))
                        +" / "+String.format("%1$tM:%1$tS", new Date(durationInMillis)));
            }
        }       
    }
    private Runnable onEverySecond=new Runnable() {
        public void run() {

            if (mediaPlayer!=null) {
                progressControl.setProgress(mediaPlayer.getCurrentPosition());

                MyAudioPlayer.this.setProgressText();
            }

            if (!isPaused) {
                progressText.postDelayed(onEverySecond, 1000);
            }
        }
    };
}
  • 当我从互联网服务器(比如s3 bucket)传输音频文件时 它正确地开始流式处理
  • 但是mediaPlayer.getDuration()和mediaPlayer.getCurrentPosition() 返回错误的值。在流媒体的开始 getCurrentPosition()返回5小时
  • 由于这个原因,我无法继续从音频流 指定的流持续时间(0到流持续时间)
问题:

public class MyAudioPlayer extends Activity 
implements OnClickListener{


    MediaPlayer mediaPlayer = null;
    private boolean isPaused=false;
    private boolean isStop = true;

    String filePath = null;
    String productName = null;

    ImageButton btnPlay = null;
    ImageButton btnPause = null;
    ImageButton btnReset = null;
    ImageButton btnStop = null;

    AudioManager audioManager = null;
    SeekBar volControl = null;
    SeekBar progressControl = null;
    TextView progressText = null;
    long durationInMillis = -1;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ltd_audio_player);

        volControl = (SeekBar)findViewById(R.id.player_volume);
        progressControl = (SeekBar)findViewById(R.id.player_seekbar);
        progressText = (TextView) findViewById(R.id.player_progress_text);

        btnPlay = (ImageButton) findViewById(R.id.ic_player_play); 

        btnPause = (ImageButton) findViewById(R.id.ic_player_pause);  

        btnReset = (ImageButton) findViewById(R.id.ic_player_reset); 

        btnStop = (ImageButton) findViewById(R.id.ic_player_stop);   

        btnPlay.setOnClickListener(this);
        btnPause.setOnClickListener(this);
        btnReset.setOnClickListener(this);
        btnStop.setOnClickListener(this);

        filePath = getIntent().getExtras().getString("localPath");

        this.setPlayer();
        this.resetAndStartPlayer();


    }

    @Override
    protected void onResume() {
        super.onResume();   
        isPaused=false;
        progressText.postDelayed(onEverySecond, 1000);
    }

    @Override
    protected void onPause() {
        super.onPause();

        isPaused=true;
    }
    private void setProgressControl() {
        int maxVolume = mediaPlayer.getDuration();
        int curVolume = mediaPlayer.getCurrentPosition();

        progressControl.setMax(maxVolume);
        progressControl.setProgress(curVolume);
        progressControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

            @Override
            public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) {
                mediaPlayer.seekTo(progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }
        });     
    }
    @Override
    public void onClick(View v) {
        switch(v.getId()){
        case R.id.ic_player_play:
            if(isStop==true){
                try {
                    mediaPlayer.prepareAsync();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else{
                mediaPlayer.start();
                isStop = true;
            }
            break;
        case R.id.ic_player_pause:
            mediaPlayer.pause();
            break;
        case R.id.ic_player_reset:
            mediaPlayer.seekTo(0);
            break;
        case R.id.ic_player_stop:
            isStop = true;
            progressControl.setProgress(0);
            mediaPlayer.stop();
            break;
        }

    }
    private void resetAndStartPlayer(){
        try {
            if(filePath!=null){
                mediaPlayer.setDataSource(filePath);
                mediaPlayer.prepareAsync();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void setPlayer(){

        getWindow().setFormat(PixelFormat.UNKNOWN);
        mediaPlayer = new MediaPlayer();    

        mediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {

            @Override
            public void onBufferingUpdate(MediaPlayer mp, int percent) {
                progressControl.setSecondaryProgress((progressControl.getMax()/100)*percent);

            }
        });
        mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                mediaPlayer.start();
                isStop=false;
                durationInMillis = mediaPlayer.getDuration();
                MyAudioPlayer.this.setProgressControl();
            }
        });
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    }
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        mediaPlayer.release();
        super.onDestroy();
    }
    protected void setProgressText() {
        durationInMillis = mediaPlayer.getDuration();
        int curVolume = mediaPlayer.getCurrentPosition();
        long HOUR = 60*60*1000;
        if(progressText!=null){
            if(durationInMillis>HOUR){
                progressText.setText(String.format("%1$tH:%1$tM:%1$tS", new Date(curVolume))
                        +" / "+String.format("%1$tH:%1$tM:%1$tS", new Date(durationInMillis)));
            }else{
                progressText.setText(String.format("%1$tM:%1$tS", new Date(curVolume))
                        +" / "+String.format("%1$tM:%1$tS", new Date(durationInMillis)));
            }
        }       
    }
    private Runnable onEverySecond=new Runnable() {
        public void run() {

            if (mediaPlayer!=null) {
                progressControl.setProgress(mediaPlayer.getCurrentPosition());

                MyAudioPlayer.this.setProgressText();
            }

            if (!isPaused) {
                progressText.postDelayed(onEverySecond, 1000);
            }
        }
    };
}
  • 如何获取音频流的持续时间
  • 如何从指定的持续时间继续音频流。对于 例如,对于一个持续时间为10分钟的文件,我希望从第6个开始流式处理 分钟
  • 代码:

    public class MyAudioPlayer extends Activity 
    implements OnClickListener{
    
    
        MediaPlayer mediaPlayer = null;
        private boolean isPaused=false;
        private boolean isStop = true;
    
        String filePath = null;
        String productName = null;
    
        ImageButton btnPlay = null;
        ImageButton btnPause = null;
        ImageButton btnReset = null;
        ImageButton btnStop = null;
    
        AudioManager audioManager = null;
        SeekBar volControl = null;
        SeekBar progressControl = null;
        TextView progressText = null;
        long durationInMillis = -1;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.ltd_audio_player);
    
            volControl = (SeekBar)findViewById(R.id.player_volume);
            progressControl = (SeekBar)findViewById(R.id.player_seekbar);
            progressText = (TextView) findViewById(R.id.player_progress_text);
    
            btnPlay = (ImageButton) findViewById(R.id.ic_player_play); 
    
            btnPause = (ImageButton) findViewById(R.id.ic_player_pause);  
    
            btnReset = (ImageButton) findViewById(R.id.ic_player_reset); 
    
            btnStop = (ImageButton) findViewById(R.id.ic_player_stop);   
    
            btnPlay.setOnClickListener(this);
            btnPause.setOnClickListener(this);
            btnReset.setOnClickListener(this);
            btnStop.setOnClickListener(this);
    
            filePath = getIntent().getExtras().getString("localPath");
    
            this.setPlayer();
            this.resetAndStartPlayer();
    
    
        }
    
        @Override
        protected void onResume() {
            super.onResume();   
            isPaused=false;
            progressText.postDelayed(onEverySecond, 1000);
        }
    
        @Override
        protected void onPause() {
            super.onPause();
    
            isPaused=true;
        }
        private void setProgressControl() {
            int maxVolume = mediaPlayer.getDuration();
            int curVolume = mediaPlayer.getCurrentPosition();
    
            progressControl.setMax(maxVolume);
            progressControl.setProgress(curVolume);
            progressControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    
                @Override
                public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) {
                    mediaPlayer.seekTo(progress);
                }
    
                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {
                    // TODO Auto-generated method stub
    
                }
    
                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {
                    // TODO Auto-generated method stub
    
                }
            });     
        }
        @Override
        public void onClick(View v) {
            switch(v.getId()){
            case R.id.ic_player_play:
                if(isStop==true){
                    try {
                        mediaPlayer.prepareAsync();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }else{
                    mediaPlayer.start();
                    isStop = true;
                }
                break;
            case R.id.ic_player_pause:
                mediaPlayer.pause();
                break;
            case R.id.ic_player_reset:
                mediaPlayer.seekTo(0);
                break;
            case R.id.ic_player_stop:
                isStop = true;
                progressControl.setProgress(0);
                mediaPlayer.stop();
                break;
            }
    
        }
        private void resetAndStartPlayer(){
            try {
                if(filePath!=null){
                    mediaPlayer.setDataSource(filePath);
                    mediaPlayer.prepareAsync();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        private void setPlayer(){
    
            getWindow().setFormat(PixelFormat.UNKNOWN);
            mediaPlayer = new MediaPlayer();    
    
            mediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {
    
                @Override
                public void onBufferingUpdate(MediaPlayer mp, int percent) {
                    progressControl.setSecondaryProgress((progressControl.getMax()/100)*percent);
    
                }
            });
            mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
    
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mediaPlayer.start();
                    isStop=false;
                    durationInMillis = mediaPlayer.getDuration();
                    MyAudioPlayer.this.setProgressControl();
                }
            });
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        }
        @Override
        protected void onDestroy() {
            // TODO Auto-generated method stub
            mediaPlayer.release();
            super.onDestroy();
        }
        protected void setProgressText() {
            durationInMillis = mediaPlayer.getDuration();
            int curVolume = mediaPlayer.getCurrentPosition();
            long HOUR = 60*60*1000;
            if(progressText!=null){
                if(durationInMillis>HOUR){
                    progressText.setText(String.format("%1$tH:%1$tM:%1$tS", new Date(curVolume))
                            +" / "+String.format("%1$tH:%1$tM:%1$tS", new Date(durationInMillis)));
                }else{
                    progressText.setText(String.format("%1$tM:%1$tS", new Date(curVolume))
                            +" / "+String.format("%1$tM:%1$tS", new Date(durationInMillis)));
                }
            }       
        }
        private Runnable onEverySecond=new Runnable() {
            public void run() {
    
                if (mediaPlayer!=null) {
                    progressControl.setProgress(mediaPlayer.getCurrentPosition());
    
                    MyAudioPlayer.this.setProgressText();
                }
    
                if (!isPaused) {
                    progressText.postDelayed(onEverySecond, 1000);
                }
            }
        };
    }
    
    时间显示在进度条上方

    时间:“当前持续时间”/“总持续时间”


    第一个大问题是初始化顺序: 在resetAndStartPlayer中实际调用setDataSource之前,先调用getDuration。 没有数据源,MediaPlayer如何知道持续时间

    以下是如何正确地做到这一点:

  • 在Activity.onCreate中调用MediaPlayer.setDataSource()

  • 执行AsyncTask,在其doInBackground调用MediaPlayer.prepare()中,如果它是从http流式传输的,则需要一段时间,但完成后,播放机应该知道媒体的长度

  • 在AsyncTask.onPostExecute中调用MediaPlayer.getDuration(),如果流成功打开,则该调用应成功;之后,您可以致电MediaPlayer.start()
  • 重要事项:

    • getDuration在调用prepare后工作
    • 准备可能需要更长的时间,应该在其他线程中调用
    • 您还可以使用prepareAsync并避免AsyncTask,然后使用setOnPreparedListener回调调用getDuration

      • 希望它能解决您的问题

        1)音频流的持续时间和进度

        我已经查看了你的代码,你在计算时间的代码中有一个重大错误。创建新日期(持续时间单位:百万)。Date添加您的本地性,即GMT+XX小时,这就是为什么您在开始流媒体时获得5小时。您应该使用以下方法来计算当前进度/持续时间

        protected void setProgressText() {
        
            final int HOUR = 60*60*1000;
            final int MINUTE = 60*1000;
            final int SECOND = 1000;
        
            int durationInMillis = mediaPlayer.getDuration();
            int curVolume = mediaPlayer.getCurrentPosition();
        
            int durationHour = durationInMillis/HOUR;
            int durationMint = (durationInMillis%HOUR)/MINUTE;
            int durationSec = (durationInMillis%MINUTE)/SECOND;
        
            int currentHour = curVolume/HOUR;
            int currentMint = (curVolume%HOUR)/MINUTE;
            int currentSec = (curVolume%MINUTE)/SECOND;
        
            if(durationHour>0){
                System.out.println(" 1 = "+String.format("%02d:%02d:%02d/%02d:%02d:%02d", 
                        currentHour,currentMint,currentSec, durationHour,durationMint,durationSec));            
            }else{
                System.out.println(" 1 = "+String.format("%02d:%02d/%02d:%02d", 
                        currentMint,currentSec, durationMint,durationSec));
            }
        }
        
        2)为流进行擦洗。


        MediaPlayer允许清除音频流。我已经在我的一个项目中实现了它,但这需要一些时间。从另一个位置恢复音频流需要一些时间。

        感谢您对解决此问题的兴趣。在mediaPlayer.onPrepared()中准备好mediaPlayer后,我已将代码修改为getDuration。。。正如我提到的,问题在于音频流,它仍然存在。当我流的音频甚至更小。GetDuration返回给我6小时之类的时间。但是当我从SD卡播放音频时,相同的代码返回正确的持续时间。发布远程流的url示例。@Arif:我正在创建一个mediaplayer,如果您解决了这个问题,您会通过电子邮件将代码发送给我吗?abuhamzah09在gmail.com什么控件是
        LTDAudioPlayer
        ?@AbuHamzah它是MyAudioPlayer而不是LTDAudioPlayer