2013-06-26 63 views
0

海蘭,我有一個視頻播放器下面的代碼,現在我已經看過了這個互聯網上的錯誤,並在計算器上,有的人說這個錯誤,是因爲路徑不正確。但我已經嘗試過多個鏈接,而且都沒有工作。 這是我的應用中的活動代碼:視頻播放器不能播放,只有黑屏

public class VideoPlayerActivity extends Activity implements Callback, OnBufferingUpdateListener, OnPreparedListener, OnCompletionListener, OnVideoSizeChangedListener, OnErrorListener, OnSeekCompleteListener { 

MediaPlayer mMediaPlayer; 
Button startButton; 
Button stopButton; 
SurfaceView mPreview; 
private SurfaceHolder holder; 
public String TAG = "VideoPlayerActivity"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.video_player_layout); 
    startButton = (Button) findViewById(R.id.start); 
    stopButton = (Button) findViewById(R.id.stop); 
    mMediaPlayer = new MediaPlayer(); 
    startButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (mMediaPlayer != null) { 
       if (mMediaPlayer.isPlaying()) { 
        Log.d(TAG, "pause"); 
        mMediaPlayer.pause(); 
        startButton.setText("Start"); 
       } else { 
        Log.d(TAG, "Start"); 
        setVideoPlayback(); 
       } 
      } 
     } 
    }); 

} 

@Override 
protected void onDestroy() { 
    Log.d(TAG, "Ondestroy"); 
    releaseMediaPlayer(); 
    super.onDestroy(); 
} 

private void releaseMediaPlayer() { 
    Log.d(TAG, "releasemediaplayer"); 
    if (mMediaPlayer != null) { 
     mMediaPlayer.release(); 
     mMediaPlayer = null; 
    } 
} 

private void startVideoPlayback() { 
    Log.d(TAG, "StartVideoPlayback"); 
    if (holder.getSurface() == null) { 
     Log.d(TAG, "holder sufrace null"); 
     setSurfaceHolder(); 
    } 
    if (mMediaPlayer.isPlaying()) { 
     mMediaPlayer.pause(); 
    } else { 
     mMediaPlayer.start(); 
     startButton.setText("Pause"); 
    } 

} 

private void playVideo(Uri path_to_play) { 
    Log.d(TAG, "playvideo"); 
    if ((path_to_play == null) || path_to_play.equals("")) { 
     Log.d(TAG, "pathtoplay is null"); 
     return; 
    } 
    releaseMediaPlayer(); 
    mMediaPlayer = new MediaPlayer(); 
    // mMediaPlayer = MediaPlayer.create(this, path_to_play); 
    try { 
     setSurfaceHolder(); 

     try { 
      Log.d(TAG, "pathtoplay is " + path_to_play); 
      mMediaPlayer.setDataSource(path_to_play.toString()); 
      if ((holder != null) && (holder.getClass() != null) && holder.getSurface().isValid()) { 
       Log.d(TAG, "set holder to mediaplayer"); 
       mMediaPlayer.setDisplay(holder); 
      } else { 
       setSurfaceHolder(); 
       Log.d(TAG, "setsurface holder from play video"); 
      } 
      mMediaPlayer.setOnBufferingUpdateListener(this); 
      mMediaPlayer.setOnPreparedListener(this); 
      mMediaPlayer.setOnCompletionListener(this); 
      mMediaPlayer.setOnVideoSizeChangedListener(this); 
      mMediaPlayer.setOnErrorListener(this); 
      mMediaPlayer.setOnSeekCompleteListener(this); 
      mMediaPlayer.prepareAsync(); 
     } catch (Exception e) { 
      Log.e(TAG, "playvideo exception:" + e); 
     } 
     try { 
      mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     } catch (NullPointerException e) { 
      Log.e(TAG, "playvideo exception2:" + e); 
     } 

    } catch (Exception e) { 
     Log.e(TAG, "playvideo exception3:" + e); 
    } 

} 

@Override 
public void onSeekComplete(MediaPlayer arg0) { 
    Log.d(TAG, "@onSeekComplete"); 

    try { 
     if (holder.getSurface().isValid()) { 
      Log.d("error", "@onSeekComplete is valid"); 
      if (mMediaPlayer != null) { 
       mMediaPlayer.setDisplay(holder); 
      } 
     } else { 
      Log.d(TAG, "@onSeekComplete else"); 
      setSurfaceHolder(); 
      if (mMediaPlayer != null) { 
       mMediaPlayer.setDisplay(holder); 
      } 
     } 
     mMediaPlayer.start(); 

    } catch (Exception e) { 
     Log.e(TAG, e.getMessage(), e); 
    } 
} 

@SuppressLint("NewApi") 
private void setSurfaceHolder() { 
    Log.d(TAG, "set surface holder"); 
    mPreview = (SurfaceView) findViewById(R.id.surface); 
    mPreview.setVisibility(View.INVISIBLE); 
    mPreview.setFitsSystemWindows(true); 
    setDisplayForHolder(); 
} 

public void setDisplayForHolder() { 
    Log.d(TAG, "set displat for surface holder"); 
    if (mPreview == null) { 
     Log.d(TAG, "mpreview null"); 
     return; 
    } else if (mPreview.getHolder() == null) { 
     Log.d(TAG, "mpreview.getholder = null"); 
     return; 
    } 
    mPreview.getHolder().setFixedSize(720, 480); 
    holder = mPreview.getHolder(); 
    holder.addCallback(this); 
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    mPreview.setVisibility(View.VISIBLE); 

} 

@Override 
public boolean onError(MediaPlayer mp, int what, int extra) { 
    Log.e(TAG, "MediaPlayer.onError() WHAT: " + what + "EXTRA: " + extra); 
    if (what == MediaPlayer.MEDIA_ERROR_SERVER_DIED) { 
     mMediaPlayer.release(); 
     mMediaPlayer = null; 
     Log.e(TAG, "Media Error, Server Died " + extra); 
    } else if (what == MediaPlayer.MEDIA_ERROR_UNKNOWN) { 
     Log.e(TAG, "Media Error, Error Unknown " + extra); 
    } 
    return false; 
} 

@Override 
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { 
    Log.d(TAG, "onvideoChanged"); 
    if ((width == 0) || (height == 0)) { 
     mp.release(); 
     setVideoPlayback(); 
     startVideoPlayback(); 
     return; 
    } 
} 

@Override 
public void onCompletion(MediaPlayer arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onPrepared(MediaPlayer arg0) { 
    Log.d(TAG, "onprepared"); 
    startVideoPlayback(); 
} 

@Override 
public void onBufferingUpdate(MediaPlayer arg0, int arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { 
    Log.d(TAG, "surface changed"); 
    Handler han = new Handler(); 
    han.postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      setVideoPlayback(); 
     } 
    }, 1000); 

} 

@Override 
public void surfaceCreated(SurfaceHolder arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void surfaceDestroyed(SurfaceHolder arg0) { 
    // TODO Auto-generated method stub 

} 

private void setVideoPlayback() { 
    Log.d(TAG, "set video playback"); 
    releaseMediaPlayer(); 
    String path = "http://www.youtube.com/watch?v=U4dK9yodrsk"; 
    Uri url = Uri.parse(path); 
    playVideo(url); 
    startButton.setText("Pause"); 
} 

} 

現在的logcat說以下內容:

06-26 14:31:45.528: D/VideoPlayerActivity(15678): Start 
    06-26 14:31:45.528: D/VideoPlayerActivity(15678): set video playback 
    06-26 14:31:45.528: D/VideoPlayerActivity(15678): releasemediaplayer 
    06-26 14:31:45.528: D/MediaPlayer(15678): release() in 
    06-26 14:31:45.538: D/MediaPlayer(15678): release() out 
    06-26 14:31:45.538: D/VideoPlayerActivity(15678): playvideo 
    06-26 14:31:45.538: D/VideoPlayerActivity(15678): releasemediaplayer 
    06-26 14:31:45.538: D/VideoPlayerActivity(15678): set surface holder 
    06-26 14:31:45.538: D/VideoPlayerActivity(15678): set displat for surface holder 
    06-26 14:31:45.548: D/VideoPlayerActivity(15678): surface changed 
    06-26 14:31:45.548: D/VideoPlayerActivity(15678): pathtoplay is http://www.youtube.com/watch?v=U4dK9yodrsk 
    06-26 14:31:45.548: I/MediaPlayer(15678): This is not a sprint project 
    06-26 14:31:45.548: D/MediaPlayer(15678): [DLNA]AP force disable DLNA: FALSE 
    06-26 14:31:45.558: D/MediaPlayer(15678): [DLNA]Force disable DLNA: 
    06-26 14:31:45.568: D/VideoPlayerActivity(15678): set holder to mediaplayer 
    06-26 14:31:45.568: D/MediaPlayer(15678): [DLNA]setDisplay 
    06-26 14:31:45.568: I/MediaPlayer(15678): setLPAflag() in 
    06-26 14:31:45.568: I/MediaPlayer(15678): mContext is null, can't getMirrorDisplayStatus!!! 
    06-26 14:31:45.568: I/MediaPlayer(15678): setLPAflag() out 
    06-26 14:31:46.409: E/MediaPlayer(15678): error (1, -2147483648) 
    06-26 14:31:46.409: D/MediaPlayer(15678): Mediaplayer receives message, message type: 100 
    06-26 14:31:46.409: E/MediaPlayer(15678): Error (1,-2147483648) 
    06-26 14:31:46.419: E/VideoPlayerActivity(15678): MediaPlayer.onError() WHAT: 1EXTRA: -2147483648 
    06-26 14:31:46.419: E/VideoPlayerActivity(15678): Media Error, Error Unknown -2147483648 

EDIT: For videos that are not from youtube, it does not crash, with that, error, it just does not show the video.What can be wrong? 

這對於非YouTube視頻的logcat的:

06-26 14:50:09.536: D/VideoPlayerActivity(18860): Start 
06-26 14:50:09.536: D/VideoPlayerActivity(18860): set video playback 
06-26 14:50:09.536: D/VideoPlayerActivity(18860): releasemediaplayer 
06-26 14:50:09.536: D/MediaPlayer(18860): release() in 
06-26 14:50:09.536: D/MediaPlayer(18860): release() out 
06-26 14:50:09.536: D/VideoPlayerActivity(18860): playvideo 
06-26 14:50:09.536: D/VideoPlayerActivity(18860): releasemediaplayer 
06-26 14:50:09.536: D/VideoPlayerActivity(18860): set surface holder 
06-26 14:50:09.546: D/VideoPlayerActivity(18860): set displat for surface holder 
06-26 14:50:09.556: D/VideoPlayerActivity(18860): surface changed 
06-26 14:50:09.556: D/VideoPlayerActivity(18860): pathtoplay is http://new.ineed.com/uploads/video/file/11426/Capture_113_1372246928119.mp4 
06-26 14:50:09.556: I/MediaPlayer(18860): This is not a sprint project 
06-26 14:50:09.556: D/MediaPlayer(18860): [DLNA]AP force disable DLNA: FALSE 
06-26 14:50:09.566: D/MediaPlayer(18860): [DLNA]Force disable DLNA: 
06-26 14:50:09.576: D/VideoPlayerActivity(18860): set holder to mediaplayer 
06-26 14:50:09.576: D/MediaPlayer(18860): [DLNA]setDisplay 
06-26 14:50:09.576: I/MediaPlayer(18860): setLPAflag() in 
06-26 14:50:09.576: I/MediaPlayer(18860): mContext is null, can't getMirrorDisplayStatus!!! 
06-26 14:50:09.576: I/MediaPlayer(18860): setLPAflag() out 

回答

0

它的工作,我忘了放置一個進度條,所以實際上它開始緩衝,但屏幕是黑色的,看到它不起作用,我沒有等待它緩衝