如果媒体播放器无法从服务器加载音频内容,则检测到缓冲错误(或time_out)

时间:2018-08-23 17:26:48

标签: android android-mediaplayer

我正在开发一个可播放实时广播音频流的android应用程序。我已经为此目的实现了android媒体播放器,该播放器不断从远程源接收音频数据。

单击播放按钮将向用户显示一个缓冲的ProgressDialog,并将启动媒体播放器。我可以成功完成所有操作,但是我面临的唯一问题是,如果媒体播放器无法从流服务器加载音频内容,我想通知用户。是否存在超时或我可以捕获的某种错误?如果媒体播放器无法从服务器加载音频内容,则当前什么也不会抛出: 我的代码如下:

public class MainActivity extends AppCompatActivity
{
    Button playbtn_flat,stopbtn_flat;
    static MediaPlayer mPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        playbtn_flat = (Button) findViewById(R.id.play_button);
        stopbtn_flat = (Button) findViewById(R.id.stop_button);

        playbtn_flat.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                listen_live("http://192.168.**.***:port/mountpoint");
            }
        });

        stopbtn_flat.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if (mPlayer != null && mPlayer.isPlaying()) {
                    mPlayer.stop();
                }
            }
        });
    }

    void listen_live(String stream_ip) {
        try {
            final ProgressDialog progressDialog = ProgressDialog.show(MainActivity.this, "Please Wait...", "Buffering");
            mPlayer = new MediaPlayer();
            final MediaPlayer.OnPreparedListener onPreparedListener = new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    if (progressDialog != null && progressDialog.isShowing()) {
                        progressDialog.dismiss();
                    }
                    mp.start();
                }
            };
            final MediaPlayer.OnErrorListener onErrorListener = new MediaPlayer.OnErrorListener() {
                @Override
                public boolean onError(MediaPlayer mp, int what, int extra)
                {
                    Log.e("abc", String.format("Error(%s%s)", what, extra));
                    return false;
                }
            };
            final Handler onPreparedHandle = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                    mPlayer.setOnErrorListener(onErrorListener); // set onErrorListener
                    mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    onPreparedListener.onPrepared(mPlayer);
                }
            };
            final String url = stream_ip;
            new Thread() {
                @Override
                public void run() {
                    mPlayer = MediaPlayer.create(MainActivity.this, Uri.parse(url)); // create new instance of MediaPlayer and prepare it
                    onPreparedHandle.sendMessage(onPreparedHandle.obtainMessage()); // send message to main thread
                }
            }.start();
        } catch (Exception e) {
            Log.e("abc ", e.toString());
        }
    }
}

0 个答案:

没有答案