【问题标题】:Why MediaPlayer reset position after start again?为什么 MediaPlayer 重新启动后重置位置?
【发布时间】:2018-09-05 08:44:36
【问题描述】:

我创建一个活动播放视频:

初始化 MediaPlayer 并自动开始播放视频

@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
    Surface surface = new Surface(surfaceTexture);

    try {
        // AssetFileDescriptor afd = getAssets().openFd(FILE_NAME);
        mMediaPlayer = new MediaPlayer();
        // mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
        mMediaPlayer.setDataSource(FILE_NAME);
        mMediaPlayer.setSurface(surface);
        mMediaPlayer.setLooping(true);
        mMediaPlayer.prepareAsync();

        // Play video when the media source is ready for playback.
        mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                mediaPlayer.start();

                initializeSeekBar();
            }
        });

    } catch (IllegalArgumentException e) {
        Log.d(TAG, e.getMessage());
    } catch (SecurityException e) {
        Log.d(TAG, e.getMessage());
    } catch (IllegalStateException e) {
        Log.d(TAG, e.getMessage());
    } catch (IOException e) {
        Log.d(TAG, e.getMessage());
    }
}

oncreate 代码:

seekBar = (SeekBar) findViewById(R.id.seekBar);
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if(mMediaPlayer != null && fromUser){
                    mMediaPlayer.seekTo(progress );
                }
            }   

        });
        btnPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(mMediaPlayer.isPlaying())
                {
                    mMediaPlayer.pause();
                    btnPlay.setBackgroundResource(android.R.drawable.ic_media_play);
                }
                else
                { 

Log.d("daitran",String.valueOf(mMediaPlayer.getCurrentPosition()));
                        int currentpos=mMediaPlayer.getCurrentPosition();
                        mMediaPlayer.start();        
 Log.d("daitran",String.valueOf(mMediaPlayer.getCurrentPosition()));          
               btnPlay.setBackgroundResource(android.R.drawable.ic_media_pause);
                    }
                }
            });

更新搜索栏的值:

protected void initializeSeekBar(){
        seekBar.setMax(mMediaPlayer.getDuration());
        //Make sure you update Seekbar on UI thread
        E045.this.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                if(mMediaPlayer != null && mMediaPlayer.isPlaying()){ 
                    Log.d("daitran",String.valueOf(mMediaPlayer.getCurrentPosition()));
                    int mCurrentPosition = mMediaPlayer.getCurrentPosition() ;
                    seekBar.setProgress(mCurrentPosition);
                    if(mCurrentPosition==100)
                    {
                        btnPlay.setBackgroundResource(android.R.drawable.ic_media_play);
                    }
                }
                mHandler.postDelayed(this, 1000);
            }
        });
    }

如果我点击暂停/开始按钮,它会返回正确的位置, 但是如果点击暂停->点击搜索栏改变位置->点击开始,则不能从新位置开始。

为什么 MediaPlayer 重新启动后会重置位置?

再次播放后登录:

09-05 17:27:03.936 27287-27287/com.example.android.camera2video D/daitran: 12000
09-05 17:27:03.949 27287-27287/com.example.android.camera2video D/daitran: 128
09-05 17:27:04.231 27287-27287/com.example.android.camera2video D/daitran: 150
09-05 17:27:05.312 27287-27287/com.example.android.camera2video D/daitran: 1232
09-05 17:27:06.318 27287-27287/com.example.android.camera2video D/daitran: 2239
09-05 17:27:07.362 27287-27287/com.example.android.camera2video D/daitran: 3282

【问题讨论】:

  • 在您的图片中,我看到您突出显示的 3 个框,其中 2 个是数字,您如何获得这些数字?
  • 在我的情况下它工作正常
  • @Tay: android studio 调试,会显​​示出来。
  • @solanki: 我更新了 Init MediaPlayer,和你的代码一样吗?
  • 你的调试代码在哪里(通常使用Log),除了异常处理程序,我没有看到任何代码

标签: android


【解决方案1】:

如果您想从特定位置恢复,您应该这样做:

Mediaplayer.seekTo(targetPosition);
Mediaplayer.start();

所以targetPosition是你想从那里恢复的位置

【讨论】:

  • 所以只要寻找那个位置,然后启动 mediaPlayer
  • 我试过了,但是启动后还是会重置
【解决方案2】:

参考:How to resume the mediaplayer?

暂停我使用的媒体播放器:

Mediaplayer.pause();
length=Mediaplayer.getCurrentPosition();

并且要从最近停止的位置恢复播放器,请执行以下操作:

Mediaplayer.seekTo(length);
Mediaplayer.start();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-03
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多