public class Mymedia extends Activity implements OnBufferingUpdateListener, OnCompletionListener, MediaPlayer.OnPreparedListener, SurfaceHolder.Callback{private static final String TAG = "Mymedia ";private int mVideoWidth;private int mVideoHeight;private MediaPlayer mMediaPlayer;private SurfaceView mPreview;private SurfaceHolder holder;private String path;public void onCreate(Bundle icicle){ super.onCreate(icicle); setContentView(R.layout.main); mPreview = (SurfaceView) findViewById(R.id.surface); /* 得到SurfaceHolder对象 */ holder = mPreview.getHolder(); /* 设置回调函数 */ holder.addCallback(this); /* 设置风格 */ holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);}private void playVideo(){ try { path = "http://www.dubblogs.cc:8751/android/Test/Media/3gp/test.3gp"; //path = "/sdcard/test.3gp"; /* 构建MediaPlayer对象 */ mMediaPlayer = new MediaPlayer(); /* 设置媒体文件路径 */ mMediaPlayer.setDataSource(path); /* 设置通过SurfaceView来显示画面 */ mMediaPlayer.setDisplay(holder); /* 准备 */ mMediaPlayer.prepare(); /* 设置事件监听 */ mMediaPlayer.setOnBufferingUpdateListener(this); mMediaPlayer.setOnCompletionListener(this); mMediaPlayer.setOnPreparedListener(this); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); } catch (Exception e) { Log.e(TAG, "error: " + e.getMessage(), e); }}public void onBufferingUpdate(MediaPlayer arg0, int percent){ Log.v(TAG, "onBufferingUpdate percent:" + percent);}public void onCompletion(MediaPlayer arg0){ Log.v(TAG, "onCompletion called");}public void onPrepared(MediaPlayer mediaplayer){ Log.v(TAG, "onPrepared called"); mVideoWidth = mMediaPlayer.getVideoWidth(); mVideoHeight = mMediaPlayer.getVideoHeight(); if (mVideoWidth != 0 && mVideoHeight != 0) { /* 设置视频的宽度和高度 */ holder.setFixedSize(mVideoWidth, mVideoHeight); /* 开始播放 */ mMediaPlayer.start(); }}/* 更改时出发的事件 */public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k){ Log.v(TAG, "surfaceChanged called");}/* 销毁 */public void surfaceDestroyed(SurfaceHolder surfaceholder){ Log.v(TAG, "surfaceDestroyed called");}/* 当SurfaceHolder创建时触发 */public void surfaceCreated(SurfaceHolder holder){ Log.v(TAG, "surfaceCreated called"); playVideo();}/* 销毁 */@Overrideprotected void onDestroy(){ super.onDestroy(); if (mMediaPlayer != null) { mMediaPlayer.release(); mMediaPlayer = null; }}}
主要是这段哈:public void onPrepared(MediaPlayer mediaplayer){ Log.v(TAG, "onPrepared called"); mVideoWidth = mMediaPlayer.getVideoWidth(); mVideoHeight = mMediaPlayer.getVideoHeight(); if (mVideoWidth != 0 && mVideoHeight != 0) { /* 设置视频的宽度和高度 */ holder.setFixedSize(mVideoWidth, mVideoHeight); /* 开始播放 */ mMediaPlayer.start(); }}