2011-04-19 9 views
8

Utilizo el siguiente código para reproducir un video MP4 (H.264, códecs AAC) desde una URL (la URL está perfectamente bien, sin redirección, 404 o algo así). Sin embargo, sigo recibiendo los errores "intento de llamar a la duración sin un reproductor multimedia válido" o ERROR/MediaPlayer (382): error (1, -2147483648). ¿Alguien tiene alguna idea de cómo solucionarlo? GraciasAndroid: intento de llamar a la duración sin un mediaplayer válido

VideoView video = (VideoView) findViewById(R.id.myvideo); 

Intent videoint=getIntent(); 
String url = videoint.getStringExtra("url"); //The url pointing to the mp4 
video.setVideoPath(url); 
video.requestFocus(); 
video.setMediaController(new MediaController(this)); 
video.start(); 

Respuesta

22

Recuperar la duración de la devolución de llamada onPrepared ... esto asegurará que el vídeo se ha cargado correctamente antes de intentar conseguir su duración.

final VideoView video = (VideoView) findViewById(R.id.videoplayer); 
      final MediaController controller = new MediaController(this); 

      video.setVideoURI(Uri.parse(getIntent().getStringExtra("url"))); 
      video.setMediaController(controller); 
      controller.setMediaPlayer(video); 
      video.setOnPreparedListener(new OnPreparedListener() { 

        public void onPrepared(MediaPlayer mp) { 
         int duration = video.getDuration(); 
         video.requestFocus(); 
         video.start(); 
         controller.show(); 

        } 
       }); 
+2

Nueva error de error: (-38, 0) en VideoView. ¿Alguna idea? –

+0

Ese es un error bastante genérico y podría ser cualquier cantidad de cosas. Editado arriba para reflejar algunas cosas nuevas que puedes probar – Joe

+0

Muchas gracias, Joe !!!! – ihrupin

1

Asegúrese de que está configurando todos los controles que interactúan con el reproductor de medios una vez que está configurado y preparado. Por ejemplo:

  mediaPlayer.setDataSource(dataSource); 
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    mediaPlayer.setOnCompletionListener(this); 
    mediaPlayer.prepare(); 
    progressBar = (ProgressBar) findViewById(R.id.progbar); 
    progressBar.setVisibility(ProgressBar.VISIBLE); 
      progressBar.setProgress(0); 
      progressBar.setMax(mp.getDuration()); 
     mediaPlayer.start(); 
0

En mi caso, el problema era con la barra de búsqueda. En mi clase de servicio he cambiado:

@Override 
public void onPrepared(MediaPlayer mp) { 
    mp.start();} 

public getDur() { return mediaPalyer.getDuration} 

a

int dr; //at the top inside Service class 

@Override 
public void onPrepared(MediaPlayer mp) { 
    mp.start(); 
    dr = player.getDuration();} 

public getDur() { return dr} 
Cuestiones relacionadas