Android MediaPlayer和SurfaceView播放视频

  昨天介绍了VideoView播放视频,今天再介绍一种播放视频的方法MediaPlayer和SurfaceView,MediaPlayer播放音频,SurfaceView来显示图像,具体步骤如下:

  1、创建MediaPlayer对象,并让它加载指定的视频文件。

  2、在界面布局中定义SurfaceView组件,或在程序中创建SurfaceView组件,并为SurfaceView的SurfaceHolder添加Callback监听器。

  3、调用MediaPlayer对象的setDisplay(SurfaceHolder sh)将所播放的视频图像输出到指定的SurfaceView组件。

  4、调用MediaPlayer对象的start()、stop()和pause()方法控制视频的播放。

  下面直接上个实例:

  1 public class SurfaceViewPlayVideo extends Activity
  2     implements OnClickListener
  3 {
  4     SurfaceView surfaceView;
  5     ImageButton play , pause , stop;
  6     MediaPlayer mPlayer;
  7     //记录当前视频的播放位置
  8     int position;
  9     @Override
 10     public void onCreate(Bundle savedInstanceState)
 11     {
 12         super.onCreate(savedInstanceState);
 13         setContentView(R.layout.main);
 14         // 获取界面中的3个按钮
 15         play = (ImageButton) findViewById(R.id.play);
 16         pause = (ImageButton) findViewById(R.id.pause);
 17         stop = (ImageButton) findViewById(R.id.stop);
 18         // 为3个按钮的单击事件绑定事件监听器
 19         play.setOnClickListener(this);
 20         pause.setOnClickListener(this);
 21         stop.setOnClickListener(this);        
 22         // 创建MediaPlayer
 23         mPlayer = new MediaPlayer();
 24         surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);
 25         // 设置SurfaceView自己不管理的缓冲区
 26         surfaceView.getHolder().setType(
 27             SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
 28         // 设置播放时打开屏幕
 29         surfaceView.getHolder().setKeepScreenOn(true);
 30         surfaceView.getHolder().addCallback(new SurfaceListener());
 31     }
 32 
 33     @Override
 34     public void onClick(View source)
 35     {
 36         try
 37         {
 38             switch (source.getId())
 39             {
 40                 // 播放按钮被单击
 41                 case R.id.play:
 42                     play();
 43                     break;
 44                 // 暂停按钮被单击
 45                 case R.id.pause:
 46                     if (mPlayer.isPlaying())
 47                     {
 48                         mPlayer.pause();
 49                     }
 50                     else
 51                     {
 52                         mPlayer.start();
 53                     }
 54                     break;
 55                 // 停止按钮被单击
 56                 case R.id.stop:
 57                     if (mPlayer.isPlaying())
 58                         mPlayer.stop();
 59                     break;
 60             }
 61         }
 62         catch (Exception e)
 63         {
 64             e.printStackTrace();
 65         }
 66     }
 67     private void play() throws IOException
 68     {
 69         mPlayer.reset();
 70         mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
 71         // 设置需要播放的视频
 72         mPlayer.setDataSource("/mnt/sdcard/movie.3gp");
 73         // 把视频画面输出到SurfaceView
 74         mPlayer.setDisplay(surfaceView.getHolder());
 75         mPlayer.prepare();
 76         mPlayer.start();
 77     }
 78 
 79     private class SurfaceListener implements SurfaceHolder.Callback
 80     {
 81         @Override
 82         public void surfaceChanged(SurfaceHolder holder, int format, int width,
 83             int height)
 84         {
 85         }
 86 
 87         @Override
 88         public void surfaceCreated(SurfaceHolder holder)
 89         {
 90             if (position > 0)
 91             {
 92                 try
 93                 {
 94                     // 开始播放
 95                     play();
 96                     // 并直接从指定位置开始播放
 97                     mPlayer.seekTo(position);
 98                     position = 0;
 99                 }
100                 catch (Exception e)
101                 {
102                     e.printStackTrace();
103                 }
104             }
105         }
106         @Override
107         public void surfaceDestroyed(SurfaceHolder holder)
108         {
109         }
110     }
111     // 当其他Activity被打开,暂停播放
112     @Override
113     protected void onPause()
114     {
115         if (mPlayer.isPlaying())
116         {
117             // 保存当前的播放位置
118             position = mPlayer.getCurrentPosition();
119             mPlayer.stop();
120         }
121         super.onPause();
122     }
123     @Override
124     protected void onDestroy()
125     {
126         // 停止播放
127         if (mPlayer.isPlaying())
128             mPlayer.stop();
129         // 释放资源
130         mPlayer.release();
131         super.onDestroy();
132     }
133 }
原文地址:https://www.cnblogs.com/phj981805903/p/3302198.html