Mediaplayer流在线MP3文件 [英] Mediaplayer stream online MP3 file

查看:215
本文介绍了Mediaplayer流在线MP3文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Android应用,该应用可流式播放MP3文件并在播放器中播放该文件, 但是问题是mediaPlayer.prepare();需要很长时间的缓冲并且应用程序冻结 因此我尝试使用prepareAsync();,但是使用此功能,我无法使播放器播放下一个文件.

I have an Android app that streams an MP3 file and plays this file in player, but the problem is mediaPlayer.prepare(); takes a long time buffering and the app freezes so I tried to use prepareAsync();, but with this function I can't make the player play the next file.

它只是在线播放一个文件;如果需要播放另一个文件,则必须在播放结束后关闭并重新启动活动.这是我的代码:

It just plays a single file online; if I need to play another file I have to close and restart the activity when play ends. This is my code:

public void playMp3(String _link)
{
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
    public void onPrepared(MediaPlayer mp) {
        if(!mediaPlayer.isPlaying()){
        mediaPlayer.start();
        Progressbar.setVisibility(View.INVISIBLE);
        play.setVisibility(View.GONE);
        stop.setVisibility(View.VISIBLE);
        songProgressBar.setProgress(0);
        songProgressBar.setMax(100);
        }
        updateProgressBar();      
    }
});
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

    @Override
    public void onCompletion(MediaPlayer mp) {
        // TODO Auto-generated method stub
        mediaPlayer.reset();
        songProgressBar.setProgress(0);
        songProgressBar.setSecondaryProgress(0);
        play.setVisibility(View.VISIBLE);
        stop.setVisibility(View.GONE);
        link = "http://server11.mp3quran.net/hawashi/002.mp3";
        playMp3(link);

    }
});
mediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {
    @Override
    public void onBufferingUpdate(MediaPlayer mp, int percent) {
       // Toast.makeText(getApplicationContext(), "n" + percent, Toast.LENGTH_LONG).show();
        songProgressBar.setSecondaryProgress(percent);

         if(percent==100)
         {
             Progressbar.setVisibility(View.INVISIBLE);

         }else if(percent > songProgressBar.getProgress())
         {
             Progressbar.setVisibility(View.INVISIBLE);
         }else
         {
             Progressbar.setVisibility(View.VISIBLE);
         }

    }
});

mediaPlayer.reset();
Progressbar.setVisibility(View.VISIBLE);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

try {
    mediaPlayer.setDataSource(_link);
    //mediaPlayer.prepare(); // might take long! (for buffering, etc)   //@@
    mediaPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (SecurityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IllegalStateException e) {
    // TODO Auto-generated catch block///
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}}

推荐答案

实际上我不知道您的代码中的错误在哪里,但我将解释如何在我的应用程序中做到这一点

Actually I don't know where is error in your code but I will explain how I did that in my app

public void playMp3(String _link){

                mediaPlayer.reset();
                Progressbar.setVisibility(View.VISIBLE);
                mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

            try {
                mediaPlayer.setDataSource(_link);
                mediaPlayer.setOnBufferingUpdateListener(this);
                mediaPlayer.setOnPreparedListener(this);
                //mediaPlayer.prepare(); // might take long! (for buffering, etc)   //@@
                mediaPlayer.prepareAsync();
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block///
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

然后在您的类中实现OnCompletionListener,OnPreparedListener和OnBufferingUpdateListener

Then implements OnCompletionListener, OnPreparedListener and OnBufferingUpdateListener in your class

public class PlayerActivity extends Activity implements OnCompletionListener, OnPreparedListener, OnBufferingUpdateListener{
.
.
.

并实现所有方法

public void onPrepared(MediaPlayer mediaplayer) {
    if(!mediaPlayer.isPlaying()){
        mediaPlayer.start();
        Progressbar.setVisibility(View.INVISIBLE);
        play.setVisibility(View.GONE);
        stop.setVisibility(View.VISIBLE);
        songProgressBar.setProgress(0);
        songProgressBar.setMax(100);
        }
        updateProgressBar();      
}

@Override
public void onCompletion(MediaPlayer mediaPlayer) {
    //mediaPlayer.reset();
        songProgressBar.setProgress(0);
        songProgressBar.setSecondaryProgress(0);
        play.setVisibility(View.VISIBLE);
        stop.setVisibility(View.GONE);
        link = "http://server11.mp3quran.net/hawashi/002.mp3";
        playMp3(link);
}

@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
     songProgressBar.setSecondaryProgress(percent);

         if(percent==100)
         {
             Progressbar.setVisibility(View.INVISIBLE);

         }else if(percent > songProgressBar.getProgress())
         {
             Progressbar.setVisibility(View.INVISIBLE);
         }else
         {
             Progressbar.setVisibility(View.VISIBLE);
         }
}

我希望这对您有所帮助.

I wish this helped you.

这篇关于Mediaplayer流在线MP3文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆