0

我是安卓新手。我正在制作一个实时音频流应用程序(来自 URL 的流)。一旦我点击播放,音频就会播放,但大约每半秒就会出现一次口吃。我检查了计算机上的实时音频 URL,它可以完美播放。我在我正在制作的另一个音频流应用程序中检查了它,使用相同的模拟器,它在那里也能完美播放。流媒体文件是 .mp3。我已经添加了代码。

    public class StreamAudioFromUrlSampleActivity extends Activity implements OnClickListener, OnTouchListener, OnCompletionListener, OnBufferingUpdateListener{
    private Button btn_play,
                    btn_pause,
                    btn_stop;
    //private SeekBar seekBar;
    private MediaPlayer mediaPlayer;
    private int lengt

hOfAudio;
    private final String URL = "**some url**";
    //private final Handler handler = new Handler();
    /*private final Runnable r = new Runnable() {   
        @Override
        public void run() {
            //updateSeekProgress();                 
        }
    };*/

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();mediaPlayer = new MediaPlayer();
    }

    private void init() {
        btn_play = (Button)findViewById(R.id.btn_play);
        btn_play.setOnClickListener(this);
        btn_pause = (Button)findViewById(R.id.btn_pause);
        btn_pause.setOnClickListener(this);
        btn_pause.setEnabled(false);
        btn_stop = (Button)findViewById(R.id.btn_stop);
        btn_stop.setOnClickListener(this);
        btn_stop.setEnabled(false);

        //seekBar = (SeekBar)findViewById(R.id.seekBar);
        //seekBar.setOnTouchListener(this);


        //mediaPlayer.setOnBufferingUpdateListener(this);
        //mediaPlayer.setOnCompletionListener(this);

    }

    @Override
    public void onBufferingUpdate(MediaPlayer mediaPlayer, int percent) {
        //seekBar.setSecondaryProgress(percent);
    }

    @Override
    public void onCompletion(MediaPlayer mp) {
        btn_play.setEnabled(true);
        btn_pause.setEnabled(false);
        btn_stop.setEnabled(false);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (mediaPlayer.isPlaying()) {
            //SeekBar tmpSeekBar = (SeekBar)v;
            //mediaPlayer.seekTo((lengthOfAudio / 100) * tmpSeekBar.getProgress() );
        }
        return false;
    }

    @Override
    public void onClick(View view) {

        try {
            mediaPlayer.setDataSource(URL);
            mediaPlayer.prepare();
            //lengthOfAudio = mediaPlayer.getDuration();
        } catch (Exception e) {
            Log.e("Error", "error"+e);
        }

        switch (view.getId()) {
        case R.id.btn_play:
            playAudio();
            break;
        case R.id.btn_pause:
            pauseAudio();
            break;
        case R.id.btn_stop:
            stopAudio();
            break;
        default:
            break;
        }

        //updateSeekProgress();
    }

    private void updateSeekProgress() {
        if (mediaPlayer.isPlaying()) {
            //seekBar.setProgress((int)(((float)mediaPlayer.getCurrentPosition() / lengthOfAudio) * 100));
        //  handler.postDelayed(r, 1000);
        }
    }

    private void stopAudio() {
        mediaPlayer.stop();
        btn_play.setEnabled(true);
        btn_pause.setEnabled(false);
        btn_stop.setEnabled(false);
        mediaPlayer.release();
        //seekBar.setProgress(0);
    }

    private void pauseAudio() {
        mediaPlayer.pause();
        btn_play.setEnabled(true);
        btn_pause.setEnabled(false);
    }

    private void playAudio() {try{
        Thread.sleep(10000);}catch(InterruptedException x){}
        mediaPlayer.start();
        btn_play.setEnabled(false);
        btn_pause.setEnabled(true);
        btn_stop.setEnabled(true);
    }
}
4

0 回答 0