2011-04-19 2 views
8

Я использую приведенный ниже код для воспроизведения видеоролика MP4 (кодеки H.264, AAC) из URL-адреса (URL-адрес отлично, без перенаправления, 404 или что-то еще). Тем не менее, я продолжаю получать ошибки «попытка вызвать getduration без действительного медиаплеера» или ERROR/MediaPlayer (382): ошибка (1, -2147483648). Кто-нибудь знает, как это исправить? БлагодаряAndroid: попытка вызова getduration без действительного медиаплеера

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

ответ

22

Получить длительность от onPrepared обратного вызова ... это будет гарантировать, что видео загружено правильно, прежде чем пытаться получить его продолжительность.

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

Новая ошибка Ошибка: (-38, 0) на VideoView. Есть идеи? –

+0

Это довольно общая ошибка и может быть любым количеством вещей. Отредактировано выше, чтобы отразить некоторые новые вещи, которые вы могли бы попробовать. – Joe

+0

Спасибо большое, Джо !!!! – ihrupin

1

Убедитесь, что вы устанавливаете все элементы управления, которые взаимодействуют с медиапланером после его настройки и подготовки. Например:

  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

В моем случае проблема была связана с пробойщиком. В моем классе обслуживания я изменил:

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

public getDur() { return mediaPalyer.getDuration} 

в

int dr; //at the top inside Service class 

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

public getDur() { return dr} 
Смежные вопросы