zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    前端十万个为什么(之一):我们为什么需要npm?
    初识模块化开发工具:
    javascript 中的 let 作用域
    把汉字转换为html实体编码
    【小程序】开发过程问题整理
    【入门】正则表达式
    【CSS】面试知识整理
    【入门】Gulp 简单使用
    【入门】WebSocket 示例
    【JQ】$.ajax() 参数
  • 原文地址:https://www.cnblogs.com/phj981805903/p/3302198.html
Copyright © 2011-2022 走看看