2012-12-29 39 views
1

我想播放流媒體模式下的服務器上的.mp4和.3gp視頻,但不播放視頻,只能播放對不起,此視頻無法播放消息得到任何解決方案,如果任何人有任何解決方案,請幫助我。提前感謝。 我的代碼無法播放來自服務器的視頻android

getWindow().setFormat(PixelFormat.TRANSLUCENT); 
    String path = "http://commonsware.com/misc/test2.3gp"; 
    mVideoView.setVideoPath(path); 
    holder=mVideoView.getHolder(); 
    mp=new MediaPlayer(); 
    mp.setDataSource(path); 
    mp.setScreenOnWhilePlaying(true); 
    mp.setDisplay(holder); 
    mp.prepare(); 
    mp.start(); 
    mVideoView.setOnCompletionListener(new OnCompletionListener() { 

     public void onCompletion(MediaPlayer mp) { 
      // TODO Auto-generated method stub 
     finish(); 
     } 
    }); 
+0

你有沒有與其他一些視頻檢查呢? –

+0

我檢查了這麼多的視頻,但只得到抱歉,這個視頻不能播放.. – kanna

回答

3

實現OnPreparedListener到您的活動,儘量把mp.start()到onPrepared方法,

public class VideoPlayerActivity extends Activity implements 
     OnBufferingUpdateListener, OnCompletionListener, 
     OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback { 

    private static final String TAG = "MediaPlayerDemo"; 
    private int mVideoWidth; 
    private int mVideoHeight; 
    private MediaPlayer mMediaPlayer; 
    private SurfaceView mPreview; 
    private SurfaceHolder holder; 
    private String path; 
    private static final int STREAM_VIDEO = 5; 
    private boolean mIsVideoSizeKnown = false; 
    private boolean mIsVideoReadyToBePlayed = false; 

    /** 
    * 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 
     mPreview = (SurfaceView) findViewById(R.id.VideoView); 
     holder = mPreview.getHolder(); 
     holder.addCallback(this); 
     holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 

    private void playVideo(Integer Media) { 
     doCleanUp(); 
     try {   
      path = "http://commonsware.com/misc/test2.3gp";    
      // Create a new media player and set the listeners 
      mMediaPlayer = new MediaPlayer(); 
      mMediaPlayer.setDataSource(path); 
      mMediaPlayer.setDisplay(holder); 
      mMediaPlayer.prepare(); 
      mMediaPlayer.setOnBufferingUpdateListener(this); 
      mMediaPlayer.setOnCompletionListener(this); 
      mMediaPlayer.setOnPreparedListener(this); 
      mMediaPlayer.setOnVideoSizeChangedListener(this); 

     } catch (Exception e) { 
      Log.e(TAG, "error: " + e.getMessage(), e); 
     } 
    } 

    public void onBufferingUpdate(MediaPlayer arg0, int percent) { 
     Log.d(TAG, "onBufferingUpdate percent:" + percent); 

    } 

    public void onCompletion(MediaPlayer arg0) { 
     Log.d(TAG, "onCompletion called"); 
    } 

    public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { 
     Log.v(TAG, "onVideoSizeChanged called"); 
     if (width == 0 || height == 0) { 
      Log.e(TAG, "invalid video width(" + width + ") or height(" + height + ")"); 
      return; 
     } 
     mIsVideoSizeKnown = true; 
     mVideoWidth = width; 
     mVideoHeight = height; 
     if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) { 
      startVideoPlayback(); 
     } 
    } 

    public void onPrepared(MediaPlayer mediaplayer) { 
     Log.d(TAG, "onPrepared called"); 
     mIsVideoReadyToBePlayed = true; 
     if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) { 
      startVideoPlayback(); 
     } 
    } 

    public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) { 
     Log.d(TAG, "surfaceChanged called"); 

    } 

    public void surfaceDestroyed(SurfaceHolder surfaceholder) { 
     Log.d(TAG, "surfaceDestroyed called"); 
    } 


    public void surfaceCreated(SurfaceHolder holder) { 
     Log.d(TAG, "surfaceCreated called"); 
     playVideo(STREAM_VIDEO); 


    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     releaseMediaPlayer(); 
     doCleanUp(); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     releaseMediaPlayer(); 
     doCleanUp(); 
    } 

    private void releaseMediaPlayer() { 
     if (mMediaPlayer != null) { 
      mMediaPlayer.release(); 
      mMediaPlayer = null; 
     } 
    } 

    private void doCleanUp() { 
     mVideoWidth = 0; 
     mVideoHeight = 0; 
     mIsVideoReadyToBePlayed = false; 
     mIsVideoSizeKnown = false; 
    } 

    private void startVideoPlayback() { 
     Log.v(TAG, "startVideoPlayback"); 
     holder.setFixedSize(mVideoWidth, mVideoHeight); 
     mMediaPlayer.start(); 
    } 
} 
+0

Thankz..but得到一個錯誤java.io.IOException:setDataSource失敗:狀態= 0x80000000在這一行mMediaPlayer.setDataSource(path); – kanna

+1

您是否向清單添加權限? – Talha

+0

明白了.. ..太感謝你了..u救了我... – kanna