Sto riscontrando un problema strano con un'applicazione di streaming video su cui sto lavorando. Lo streaming reale di video/audio sta funzionando bene su tutti i miei dispositivi di test. Tuttavia, su apparentemente qualsiasi dispositivo 4.0+, quando si utilizza un URL RTSP, prepare() ritorna istantaneamente (questo causa un problema che fornisce un feedback adeguato agli utenti mentre un video si sta caricando e interferisce con alcuni altri sistemi che ho installato).Android 4.0.4 MediaPlayer prepara il problema utilizzando gli URL RTSP
Di seguito è il blocco di codice dove ho inizializzare e installare il mio MediaPlayer, ma tenere un paio di cose in mente:
- metodo mio initPlayer viene chiamato da un AsyncTask.
- Il video viene infine riprodotto correttamente, ma preparare la restituzione istantanea crea una mancanza di feedback all'utente durante il caricamento di un video.
- Nessun errore di alcun genere si verificano durante l'intero processo di
- start() viene chiamato sul MediaPlayer tramite il metodo onPrepared nel mio OnPreparedListener, che diventa ovviamente un problema quando preparare() restituisce prima che sia effettivamente pronto per essere giocato .
- Gli stream HTTP sembrano funzionare correttamente e su ogni dispositivo di test inferiore alla 4.0 il problema non si verifica.
Ho cercato di risolvere questo problema per un periodo di tempo ridicolo, e non sono stato in grado di trovare nessun altro che si è imbattuto in questo problema. Qualsiasi idea sarebbe molto apprezzata.
public void initPlayer() {
//We first need to make sure the MediaPlayer isn't null
if(mMediaPlayer==null){
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setOnPreparedListener(mediaPlayerPreparedListener);
mMediaPlayer.setOnCompletionListener(mediaPlayerCompletionListener);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
//If a video/stream has been chosen while another is already playing
else if(mMediaPlayer.isPlaying()){
mMediaPlayer.reset();
}
//Video is not in full screen mode
second = false;
try {
mMediaPlayer.setDataSource(videoString);
holder = mPreview.getHolder();
mMediaPlayer.setDisplay(holder);
mMediaPlayer.prepare();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//onPreparedListener
private OnPreparedListener mediaPlayerPreparedListener = new OnPreparedListener(){
public void onPrepared(MediaPlayer mp) {
mp.start();
vidPb.setVisibility(View.INVISIBLE);
}
};
sto affrontando lo stesso problema in questo momento. Hai risolto il problema? se si, per favore rispondi alla tua domanda con la soluzione. in attesa...!!! –
Qualche soluzione ??? –
Purtroppo non ho mai trovato una soluzione, anche se ho smesso di lavorare su questo progetto un po 'di tempo fa. – bread