Comment obtenir la durée de Flux Audio et continuer de streaming audio à partir de n'importe quel point

Description:

J'ai code suivant pour un lecteur Audio. Je peux continuer la lecture Audio à partir de n'importe quelle durée, en cliquant sur la Barre de Progression(entre 0-mediaplayer.getDuration()). Il fonctionne parfaitement pour la lecture Audio.

Problème dans la diffusion Audio en continu:

  • Quand j'ai écouter un fichier Audio à partir d'un serveur internet (disons s3-seau)
    il commence la diffusion en continu correctement.
  • Mais mediaPlayer.getDuration() et mediaPlayer.getCurrentPosition()
    retour des valeurs erronées. Au début de streaming
    mediaPlayer.getCurrentPosition() renvoie 5 heures.
  • Pour cette raison, je ne suis pas en mesure de continuer le streaming Audio à partir d'un
    durée déterminée de Flux (de 0 à-Stream Durée).

Questions:

  1. Comment puis-je obtenir la durée d'un flux Audio
  2. Comment puis-je continuer le Streaming Audio à partir d'une durée spécifiée. Pour
    exemple pour un fichier de 10 minutes, je veux commencer en streaming à partir de 6
    minutes.

Code:

public class MyAudioPlayer extends Activity 
implements OnClickListener{
MediaPlayer mediaPlayer = null;
private boolean isPaused=false;
private boolean isStop = true;
String filePath = null;
String productName = null;
ImageButton btnPlay = null;
ImageButton btnPause = null;
ImageButton btnReset = null;
ImageButton btnStop = null;
AudioManager audioManager = null;
SeekBar volControl = null;
SeekBar progressControl = null;
TextView progressText = null;
long durationInMillis = -1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ltd_audio_player);
volControl = (SeekBar)findViewById(R.id.player_volume);
progressControl = (SeekBar)findViewById(R.id.player_seekbar);
progressText = (TextView) findViewById(R.id.player_progress_text);
btnPlay = (ImageButton) findViewById(R.id.ic_player_play); 
btnPause = (ImageButton) findViewById(R.id.ic_player_pause);  
btnReset = (ImageButton) findViewById(R.id.ic_player_reset); 
btnStop = (ImageButton) findViewById(R.id.ic_player_stop);   
btnPlay.setOnClickListener(this);
btnPause.setOnClickListener(this);
btnReset.setOnClickListener(this);
btnStop.setOnClickListener(this);
filePath = getIntent().getExtras().getString("localPath");
this.setPlayer();
this.resetAndStartPlayer();
}
@Override
protected void onResume() {
super.onResume();   
isPaused=false;
progressText.postDelayed(onEverySecond, 1000);
}
@Override
protected void onPause() {
super.onPause();
isPaused=true;
}
private void setProgressControl() {
int maxVolume = mediaPlayer.getDuration();
int curVolume = mediaPlayer.getCurrentPosition();
progressControl.setMax(maxVolume);
progressControl.setProgress(curVolume);
progressControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) {
mediaPlayer.seekTo(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
//TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//TODO Auto-generated method stub
}
});     
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.ic_player_play:
if(isStop==true){
try {
mediaPlayer.prepareAsync();
} catch (Exception e) {
e.printStackTrace();
}
}else{
mediaPlayer.start();
isStop = true;
}
break;
case R.id.ic_player_pause:
mediaPlayer.pause();
break;
case R.id.ic_player_reset:
mediaPlayer.seekTo(0);
break;
case R.id.ic_player_stop:
isStop = true;
progressControl.setProgress(0);
mediaPlayer.stop();
break;
}
}
private void resetAndStartPlayer(){
try {
if(filePath!=null){
mediaPlayer.setDataSource(filePath);
mediaPlayer.prepareAsync();
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void setPlayer(){
getWindow().setFormat(PixelFormat.UNKNOWN);
mediaPlayer = new MediaPlayer();    
mediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
progressControl.setSecondaryProgress((progressControl.getMax()/100)*percent);
}
});
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
isStop=false;
durationInMillis = mediaPlayer.getDuration();
MyAudioPlayer.this.setProgressControl();
}
});
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
@Override
protected void onDestroy() {
//TODO Auto-generated method stub
mediaPlayer.release();
super.onDestroy();
}
protected void setProgressText() {
durationInMillis = mediaPlayer.getDuration();
int curVolume = mediaPlayer.getCurrentPosition();
long HOUR = 60*60*1000;
if(progressText!=null){
if(durationInMillis>HOUR){
progressText.setText(String.format("%1$tH:%1$tM:%1$tS", new Date(curVolume))
+" /"+String.format("%1$tH:%1$tM:%1$tS", new Date(durationInMillis)));
}else{
progressText.setText(String.format("%1$tM:%1$tS", new Date(curVolume))
+" /"+String.format("%1$tM:%1$tS", new Date(durationInMillis)));
}
}       
}
private Runnable onEverySecond=new Runnable() {
public void run() {
if (mediaPlayer!=null) {
progressControl.setProgress(mediaPlayer.getCurrentPosition());
MyAudioPlayer.this.setProgressText();
}
if (!isPaused) {
progressText.postDelayed(onEverySecond, 1000);
}
}
};
}

Heure est affichée au-dessus de la barre de progression.

Temps: 'Durée'/'Durée Totale'

Comment obtenir la durée de Flux Audio et continuer de streaming audio à partir de n'importe quel point

je suis en train de travailler sur la création d'un mediaplayer et si vous avez résolu le problème vous m'envoyer le code? abuhamzah09 at gmail dot com
ce contrôle est le LTDAudioPlayer ?
il a été MyAudioPlayer au lieu de LTDAudioPlayer

OriginalL'auteur Muhammad Nabeel Arif | 2012-01-23