2011-04-19 45 views
8

我使用下面的代碼從URL(URL完美無缺,無重定向,404或任何其他)播放MP4視頻(H.264,AAC編解碼器)。但是,我不斷收到錯誤「試圖在沒有有效媒體播放器的情況下調用getduration」或ERROR/MediaPlayer(382):error(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。任何想法? – 2011-04-19 03:37:30

+0

這是一個相當普遍的錯誤,可能是任何數量的事情。上面編輯,以反映你可以嘗試一些新的東西 – Joe 2011-04-19 03:59:01

+0

非常感謝,喬! – ihrupin 2011-10-01 17:45:43

1

確保您在設置和準備好後設置所有與mediaplayer交互的控件。例如:

  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

對我而言,問題在於seekbar。在我服務的I類變更:

@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} 
相關問題