2013-04-02 41 views
7

tôi có tệp ứng dụng android stream mp3 và phát tệp này trong trình phát, nhưng vấn đề là mediaPlayer.prepare(); mất thời gian dài đệm và ứng dụng đóng băng vì vậy tôi đã cố gắng sử dụng preparAsync(); // nhưng với chức năng này tôi không thể làm cho máy nghe nhạc chơi tập tiếp theoandroid mediaplayer stream trực tuyến mp3 file

tập tin chỉ đơn trực tuyến nếu tôi cần phải chơi một file tôi nên đóng hoạt động khởi động lại khi

chơi end không chơi tiếp theo đây là mã của tôi

và tôi xin lỗi vì tôi xấu tiếng anh

đây là mã của tôi bất cứ sự giúp đỡ xin vui lòng

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(); 
}} 

Trả lời

8

Thật sự tôi không biết đâu là lỗi trong mã của bạn nhưng tôi sẽ giải thích làm thế nào tôi đã làm điều đó trong ứng dụng của tôi

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(); 
      } 
     } 

Sau đó thực hiện OnCompletionListener, OnPreparedListener và OnBufferingUpdateListener trong lớp

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

và dụng cụ của bạn tất cả các phương thức

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); 
     } 
} 

Tôi ước điều này đã giúp bạn.

+0

cảm ơn công việc này hoàn hảo với tôi, tôi quên kiểm tra xem mediaPlayer.isPlaying :) onPrepared –

+0

điều này cho streaming url (RTSP (RTP, SDP) HTTP/HTTPS progressive streaming) hoặc tôi có thể sử dụng nó cho bất kỳ mp3 tải xuống url? nói rằng tôi có url tải xuống trực tiếp _http: //blabla.com/example.mp3_ (nếu chúng tôi đặt url này vào firefox thì nó sẽ tải xuống) –

+0

Tôi gặp vấn đề với mã này. mediaPlayer chỉ phát tệp đầu tiên trong ArrayList của tôi. Sau khi tập tin đầu tiên được phát, onCompletionListener được gọi nhiều lần (vô tận) – artouiros

Các vấn đề liên quan