Android 媒体播放器错误 (1,-1010)

2024-01-03

我正在尝试从 URL 流式传输音乐。 我正在使用 SeekBar 来更改歌曲的位置。 尝试将歌曲的位置更改为尚未下载的位置时出现错误。在其他情况下(如果歌曲已完全下载,则代码可以正常工作。

出现以下错误: E/MediaPlayerNative:错误(1,-1010) E/MediaPlayer:错误(1,-1010)

您能否告知如何解决该问题。 这是代码:

    mSeekBar = findViewById(R.id.seekBar);

    if (mMediaPlayer == null) {
        mMediaPlayer = new MediaPlayer();
    }

    if (mMediaPlayer.isPlaying()) {
        mMediaPlayer.reset();
    }
    mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
        @Override
        public boolean onError(MediaPlayer mp, int what, int extra) {
            return false;
        }
    });
    mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();
        }
    });

    mMediaPlayer.setOnInfoListener(new MediaPlayer.OnInfoListener() {
        @Override
        public boolean onInfo(MediaPlayer mp, int what, int extra) {
            return false;
        }
    });
    mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            mp.reset();
        }
    });

    mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if (mMediaPlayer != null && fromUser) {

                mMediaPlayer.seekTo(progress * 1000);
                seekBar.setProgress(progress);
            }
        }
    });

    playAudio(url);
}


private void playAudio(String url) {

    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    try {
        mMediaPlayer.setDataSource(url);
        mMediaPlayer.prepare();
        mSeekBar.setMax(mMediaPlayer.getDuration() / 1000);
        getAudioInfo();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

private void getAudioInfo() {
    PlayMusicActivity.this.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            if (mMediaPlayer != null && mMediaPlayer.isPlaying()) {
                int mCurrentPosition = mMediaPlayer.getCurrentPosition() / 1000;
                mSeekBar.setProgress(mCurrentPosition);
            }
            mHandler.postDelayed(this, 1000);
        }
    });
}

亲爱的朋友们,问题是我尝试跳过尚未下载的位置。在首先寻找该位置之前,我会检查该部分是否已下载。如果没有,我会等到它被下载,然后寻找那个位置。这是代码:

private Handler mHandlerDownloadUpdate = new Handler();
public static MediaPlayer mMediaPlayer;

    if (mMediaPlayer == null) {
        mMediaPlayer = new MediaPlayer();
    } else {
        mMediaPlayer.release();
        mMediaPlayer = new MediaPlayer();
    }

    mMediaPlayer.setOnBufferingUpdateListener(bufferingUpdateListener);
    mSeekBar.setOnSeekBarChangeListener(seekBarChangeListener);

private void initRunnable(final int progress) {
   mRunnable = new Runnable() {
     @Override
     public void run() {
        if (progress * 100 / mDuration < mPercentOfDownload) {
            mMediaPlayer.seekTo(progress * 1000);
            mMediaPlayer.start();
            return;
        }
        mHandlerDownloadUpdate.postDelayed(this, 1000);
    }
};

MediaPlayer.OnBufferingUpdateListener bufferingUpdateListener = new 
MediaPlayer.OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
    mPercentOfDownload = percent;
    if (mDuration != 0) {
        int second = percent * mDuration / 100;
        mSeekBar.setSecondaryProgress(second);
    }
}

SeekBar.OnSeekBarChangeListener seekBarChangeListener = new     SeekBar.OnSeekBarChangeListener() {
   public void onProgressChanged(SeekBar seekBar, final int progress, 
   boolean fromUser) {
    if (mMediaPlayer != null && fromUser) {
        if (mMediaPlayer.isPlaying()) {
            mMediaPlayer.pause();
            seekBar.setProgress(progress);
            int a = (progress * 100 / mDuration);
            if (a < mPercentOfDownload) {
                mMediaPlayer.seekTo(progress * 1000);
                mMediaPlayer.start();
            } else {
                mHandlerDownloadUpdate.removeCallbacks(mRunnable);
                initRunnable(progress);
                PlayMusicActivity.this.runOnUiThread(mRunnable);
            }
        } 
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 媒体播放器错误 (1,-1010) 的相关文章

随机推荐