繁体   English   中英

Android音乐播放器seekto(pos)在错误的位置播放音乐

[英]Android Music player seekto(pos) play music at wrong Position

在我的应用程序中,我正在从服务器流式传输Mp3文件。 流媒体和负载工作完美。 但是媒体播放器中的seekto问题,

就像我有2分钟的mp3一样,如果我已加载并播放,猜测缓冲达到100%,则在播放50%(约1分钟)后,我们将其寻求25%(即30秒),玩家将从10秒开始,音乐播放器的行为很奇怪。

我已经尝试了很多,但是我在这里找不到任何解决方案,现在让我很沮丧,请帮助我。

我的代码如下

发起

MediaPlayer mPlayer = new MediaPlayer();

mPlayer.setWakeMode(_context, PowerManager.PARTIAL_WAKE_LOCK);
mPlayer.setOnPreparedListener(this);
mPlayer.setOnCompletionListener(this);
mPlayer.setOnErrorListener(this);
mPlayer.setOnInfoListener(this);
mPlayer.setOnBufferingUpdateListener(this);

musicseekbar =(SeekBar)findViewById(R.id.seekbar); 
        currenttime = (TextView)findViewById(R.id.runningtime);
        totaltime = (TextView)findViewById(R.id.totaltime);
        setSeekbar();


try {
    mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
} catch (Exception e) {
}
mPlayer.setDataSource(manualUrl);
mPlayer.prepareAsync();

其他stuf

       private void setSeekbar() {
        // TODO Auto-generated method stub
        musicseekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

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

            }

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

            }

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {
                // TODO Auto-generated method stub

                if (fromUser) {

                    if (mPlayer != null && mPlayer.isPlaying()) {
                        MusicSeekto(progress,Globals.PlayerDuration);
                        seekBar.setProgress(progress);
                    }
                }
            }
        });
    }

    public void setSeekBarpositionDetail(int position,int currenttime1,int totaltime1) {
        // TODO Auto-generated method stub
        if (musicseekbar != null) {
            musicseekbar.setProgress(currenttime1);
        }
    }


    public void setPlayerInfo(int duration) {

        musicseekbar.setMax(duration); // set maximum here
    }


    public void MusicSeekto(int i, int playerDuration) {
        // TODO Auto-generated method stub

        if (mPlayer != null) {
            mPlayer.seekTo(i);  //problem is here , I get here exact "i", but  seekto(pos) does't start from that position.

        }
    }

        public void primarySeekBarProgressUpdater() {

        if (mPlayer != null) {
            stop = (int) (((float) mPlayer.getCurrentPosition() / Globals.PlayerDuration) * 100);

            setSeekBarpositionDetail(stop, mPlayer.getCurrentPosition(), mPlayer.getDuration());
        }

        if (mPlayer != null) {
            if (mPlayer.isPlaying()) {

                notification = new Runnable() {
                    public void run() {
                        primarySeekBarProgressUpdater();
                    }
                };
                handler.postDelayed(notification, 100);
            }
        }
    }

    @Override
    public void onPrepared(MediaPlayer mp) {
        // TODO Auto-generated method stub
        playerstarting();
        primarySeekBarProgressUpdater();
    }

    private void playerstarting() {
        // TODO Auto-generated method stub

        if (mPlayer != null) {
            mPlayer.start();
        }
        Globals.PlayerDuration = mPlayer.getDuration();
        changingImage(false);
        setPlayerInfo(mPlayer.getDuration());// seekbar value passing from here
    }

MediaPlayer.seekto不占百分比。 这需要毫秒。 但是,您所传递的百分比。 那是行不通的。 相反,请尝试传递

((float)(i*mPlayer.getDuration()))/100.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM