2011-04-19 8 views
8

Używam poniższego kodu do odtwarzania wideo MP4 (kodek H.264, AAC) z adresu URL (adres URL jest idealnie czysty, bez przekierowania, 404 lub cokolwiek innego). Jednak ciągle otrzymuję błędy "próba wywołania getduration bez ważnej mediaplayer" lub ERROR/MediaPlayer (382): error (1, -2147483648). Czy ktoś ma jakiś pomysł, jak to naprawić? DziękiAndroid: próba wywołania getduration bez ważnego odtwarzacza multimediów

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

Odpowiedz

22

Pobierz czas trwania z wywołania zwrotnego onPrepared ... to zapewni, że wideo zostanie poprawnie załadowane przed próbą uzyskania jego czasu trwania.

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

New błąd Błąd: (-38, 0) na VideoView. Dowolny pomysł? –

+0

To raczej ogólny błąd i może to być dowolna liczba rzeczy. Edytowane powyżej, aby odzwierciedlić nowe rzeczy, które możesz wypróbować. – Joe

+0

Wielkie dzięki, Joe !!!! – ihrupin

1

Upewnij się, że ustawiasz wszystkie kontrolki, które współdziałają z odtwarzaczem multimediów po ich skonfigurowaniu i przygotowaniu. Na przykład:

  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

W moim przypadku problem dotyczył paska wyszukiwania. W mojej klasie Służby zmieniłem:

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

public getDur() { return mediaPalyer.getDuration} 

do

int dr; //at the top inside Service class 

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

public getDur() { return dr} 
Powiązane problemy