Tengo un problema extraño con una aplicación de transmisión de video en la que estoy trabajando. La transmisión real de video/audio funciona bien en todos mis dispositivos de prueba. Sin embargo, en cualquier dispositivo 4.0+, al usar un URL RTSP, prepare() regresa al instante (esto causa un problema al proporcionar retroalimentación adecuada a los usuarios mientras se carga un video e interfiere con algunos otros sistemas que tengo instalados).Android 4.0.4 MediaPlayer prepara el problema usando las URL RTSP
A continuación se muestra el bloque de código en el que inicializar y configurar mi MediaPlayer, pero tener algunas cosas en cuenta:
- método Mi initPlayer se llama desde una AsyncTask.
- El video finalmente se reproduce correctamente, pero prepararse para volver al instante crea una falta de retroalimentación para el usuario durante una carga de video.
- No hay errores de cualquier tipo se producen durante todo el proceso
- start() se llama en el MediaPlayer a través del método onPrepared en mi OnPreparedListener, lo que obviamente se convierte en un problema cuando se prepare() devuelve antes de que esté lista para ser jugado .
- Las transmisiones HTTP parecen funcionar bien, y en todos los dispositivos de prueba por debajo de 4.0 el problema no ocurre.
que han estado tratando de solucionar este problema por una cantidad ridícula de tiempo, y no han sido capaces de encontrar cualquier otra persona que se encontró con este problema. Cualquier idea sería muy apreciada.
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);
}
};
estoy frente a la misma cuestión en este momento. ¿Has resuelto el problema? en caso afirmativo, responda su propia pregunta con la solución. esperando...!!! –
¿Alguna solución? –
Desafortunadamente, nunca encontré una solución, aunque dejé de trabajar en este proyecto hace bastante tiempo. – bread