当我按流时 MP3 不播放

发布于 2025-01-08 05:20:45 字数 3016 浏览 3 评论 0原文

我正在尝试从流中播放 MP3,但问题是在我按播放后它会自动播放。此外,播放按钮不会播放音频,它只是将其设置为流式传输。如何让我的 MP3 自动播放?

    play.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            if (!mediaPlayer.isPlaying()) {
                try {
                    mediaPlayer.setDataSource(url); 
                    mediaPlayer.prepareAsync(); 
                } catch (Exception e) {
                    e.printStackTrace();
                }

                mediaFileLengthInMilliseconds = mediaPlayer.getDuration();

                if(!mediaPlayer.isPlaying()){
                    mediaPlayer.start();
                    play.setImageResource(R.drawable.ic_media_pause);
                }else {
                    mediaPlayer.pause();
                    play.setImageResource(R.drawable.ic_media_play);
                }

                primarySeekBarProgressUpdater();
            }
    }});

    sb.setMax(99);
    sb.setOnTouchListener(this);

    mediaPlayer = new MediaPlayer();
    mediaPlayer.setOnBufferingUpdateListener(this);
    mediaPlayer.setOnCompletionListener(this);
}

private void primarySeekBarProgressUpdater() {
    sb.setProgress((int)(((float)mediaPlayer.getCurrentPosition()/mediaFileLengthInMilliseconds)*100));
    if (mediaPlayer.isPlaying()) {
        notification = new Runnable() {
            public void run() {
                primarySeekBarProgressUpdater();
            }
        };
        handler.postDelayed(notification,1000);
    }
}

public boolean onTouch(View v, MotionEvent event) {
    if(v.getId() == R.id.progress_bar){
        /** Seekbar onTouch event handler. Method which seeks MediaPlayer to seekBar primary progress position*/
        if(mediaPlayer.isPlaying()){
            SeekBar sb = (SeekBar)v;
            int playPositionInMillisecconds = (mediaFileLengthInMilliseconds / 100) * sb.getProgress();
            mediaPlayer.seekTo(playPositionInMillisecconds);
        }
    }
    return false;
}

public void onCompletion(MediaPlayer mp) {
    play.setImageResource(R.drawable.ic_media_play);

    mediaPlayer.stop();
}

public void onBufferingUpdate(MediaPlayer mp, int percent) {
    sb.setSecondaryProgress(percent);
}
   }

我做错了什么吗?我单击“播放”,看到搜索栏已满,但无法播放。

我也收到这样的消息:

E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)

I am trying to play a MP3 from a stream but the issue is after I press play it would automatically play. Also the play button doesn't play the audio it just sets it to stream. How can I make my MP3 automatically play?

    play.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            if (!mediaPlayer.isPlaying()) {
                try {
                    mediaPlayer.setDataSource(url); 
                    mediaPlayer.prepareAsync(); 
                } catch (Exception e) {
                    e.printStackTrace();
                }

                mediaFileLengthInMilliseconds = mediaPlayer.getDuration();

                if(!mediaPlayer.isPlaying()){
                    mediaPlayer.start();
                    play.setImageResource(R.drawable.ic_media_pause);
                }else {
                    mediaPlayer.pause();
                    play.setImageResource(R.drawable.ic_media_play);
                }

                primarySeekBarProgressUpdater();
            }
    }});

    sb.setMax(99);
    sb.setOnTouchListener(this);

    mediaPlayer = new MediaPlayer();
    mediaPlayer.setOnBufferingUpdateListener(this);
    mediaPlayer.setOnCompletionListener(this);
}

private void primarySeekBarProgressUpdater() {
    sb.setProgress((int)(((float)mediaPlayer.getCurrentPosition()/mediaFileLengthInMilliseconds)*100));
    if (mediaPlayer.isPlaying()) {
        notification = new Runnable() {
            public void run() {
                primarySeekBarProgressUpdater();
            }
        };
        handler.postDelayed(notification,1000);
    }
}

public boolean onTouch(View v, MotionEvent event) {
    if(v.getId() == R.id.progress_bar){
        /** Seekbar onTouch event handler. Method which seeks MediaPlayer to seekBar primary progress position*/
        if(mediaPlayer.isPlaying()){
            SeekBar sb = (SeekBar)v;
            int playPositionInMillisecconds = (mediaFileLengthInMilliseconds / 100) * sb.getProgress();
            mediaPlayer.seekTo(playPositionInMillisecconds);
        }
    }
    return false;
}

public void onCompletion(MediaPlayer mp) {
    play.setImageResource(R.drawable.ic_media_play);

    mediaPlayer.stop();
}

public void onBufferingUpdate(MediaPlayer mp, int percent) {
    sb.setSecondaryProgress(percent);
}
   }

Am I doing anything wrong? I click play and I see my seekbar filling up but it wont play.

I also get this message:

E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

原谅过去的我 2025-01-15 05:20:45

看起来您需要实现MediaPlayer.OnPreparedListener。由于您使用的是 prepareAsync(),因此您需要等到 MediaPlayer 准备好后才能调用 start()。当您收到 onPrepared() 回调时,就可以安全地调用 start() 方法。

Looks like you need to implement MediaPlayer.OnPreparedListener. Since you are using prepareAsync(), you need to wait until the MediaPlayer is prepared before you can call start(). When you get the onPrepared() callback, at that point it's safe to call the start() method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文