使用MediaPlayer和SurfaceView播放视频

一、建立android项目

二、打开XML文件,

(1)修改新建项目的res/layout目录下的布局文件main.xml,将默认添加的TextView组件删除,然后在默认添加的线性布局管理器中添加一个SurfaceView组件用于显示视频图像,和一个水平线性布局管理器,并在该水平线性布局管理器中,添加3个按钮,分别为“播放”按钮、“暂停/继续”按钮和“停止”按钮,循环按钮关键代码如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context=".MainActivity" >

 

  <TextView

       android:id="@+id/textView1"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="TextView"/>

<SurfaceView

   android:id="@+id/surfaceView1"

   android:layout_width="264dp"

   android:layout_height="234dp"

 

   android:keepScreenOn="true" />

 

    <LinearLayout

       android:id="@+id/linearLayout1"

       android:layout_width="match_parent"

       android:layout_height="wrap_content">

    <Button

       android:id="@+id/play"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="播放" />

    <Button

       android:id="@+id/pause"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:enabled="false"

       android:text="暂停" />

    <Button

       android:id="@+id/stop"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:enabled="false"

       android:text="停止" /> 

     <Button

       android:id="@+id/replay"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:enabled="false"

       android:text="循环"/>

   

    </LinearLayout>

 

 

</RelativeLayout>

结果如下图所示:

 

(2)打开默认添加的MainActivity,在该类中,声明一个MediaPlayer对象和一个SurfaceView对象,具体代码如下:

       privateMediaPlayer mp;      //声明MediaPlayer对象

       privateSurfaceView sv; //声明SurfaceView对象

(3)在onCreate()方法中,首先实例化MediaPlayer对象,然后获取布局管理器中添加的SurfaceView组件,最后再分别获取“播放”按钮、“暂停/继续”按钮和“停止”按钮,具体代码如下:

       final String filestr=Environment.getExternalStorageDirectory().getPath()+"/video/demo.mp4";

       TextView t1=(TextView) findViewById(R.id.textView1); //获取VideoView组件

       t1.setText(filestr);

       mp=new MediaPlayer();//实例化MediaPlayer对象

       sv=(SurfaceView)findViewById(R.id.surfaceView1);//获取布局管理器中添加的SurfaceView组件

       final Button play=(Button)findViewById(R.id.play);//获取播放按钮

       final Button pause=(Button)findViewById(R.id.pause);//获取暂停/继续按钮

       final Button stop=(Button)findViewById(R.id.stop);//获取停止按钮

       final Button replay=(Button)findViewById(R.id.replay);//获取循环按钮

 

 

(4)分别为“播放”按钮、“暂停/继续”按钮和“停止”按钮添加单击事件监听器,并在重写的onClick()方法中,实现播放视频、暂停/继续播放视频和停止播放视频等功能,具体代码如下:

//播放按钮添加单击事件监听器

        play.setOnClickListener(new OnClickListener(){

           @Override

           public void onClick(View v) {

       mp.reset(); //重置MediaPlayer对象

       try {

       mp.setDataSource(filestr);//设置要播放的视频

       mp.setDisplay(sv.getHolder());//设置将视频画面输出到SurfaceView

       mp.prepare(); //预加载视频

       mp.start(); //开始播放

       play.setEnabled(false);//设置暂停按钮可用

       pause.setEnabled(true);//设置暂停按钮可用

       stop.setEnabled(true);//设置暂停按钮可用

       replay.setEnabled(true);

       } catch (IllegalArgumentException e) {

       e.printStackTrace();

       } catch (SecurityException e) {

       e.printStackTrace();

       } catch (IllegalStateException e) {

       e.printStackTrace();

       } catch (IOException e) {

       e.printStackTrace();

       }

           }

       });

        

       //停止按钮添加单击事件监听器

        stop.setOnClickListener(new OnClickListener(){

            @Override

            public void onClick(View v) {

              if(mp.isPlaying()){

        mp.stop();//停止播放

        pause.setEnabled(false); //设置暂停按钮不可用

        play.setEnabled(true);//设置暂停按钮可用

        }

            }

        });

         //暂停按钮添加单击事件监听器

        pause.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View v) {

        if(mp.isPlaying()){

        mp.pause(); //暂停视频的播放

         replay.setEnabled(true);

         ((Button)v).setText("继续");

        }else{

        mp.start(); //继续视频的播放

         ((Button)v).setText("暂停");

        }

        }

        });

        

       //停止按钮添加单击事件监听器

        stop.setOnClickListener(new OnClickListener() {

             @Override

             public void onClick(View v) {

               if(mp.isPlaying()){

         mp.stop();//停止播放

         pause.setEnabled(false); //设置暂停按钮不可用

         play.setEnabled(true);//设置暂停按钮可用

         }

             }

         });

          //暂停按钮添加单击事件监听器

         pause.setOnClickListener(new OnClickListener() {

             @Override

             public void onClick(View v) {

         if(mp.isPlaying()){

         mp.pause(); //暂停视频的播放

          ((Button)v).setText("继续");

         }else{

         mp.start(); //继续视频的播放

          ((Button)v).setText("暂停");

         }

         }

         });

         

          mp.setOnCompletionListener(newOnCompletionListener() {

              @Override

              public voidonCompletion(MediaPlayer mp) {

              Toast.makeText(MainActivity.this, "视频播放完毕!", Toast.LENGTH_SHORT).show();

              play.setEnabled(true);//设置播放按钮可用

              pause.setEnabled(false); //设置暂停按钮不可用

              stop.setEnabled(false); //设置停止按钮不可用

              }

              });

        //循环按钮添加单击事件监听器

         replay.setOnClickListener(new OnClickListener() {

             @Override

             public void onClick(View v) {

         mp.reset(); //重置MediaPlayer对象

         try {

         mp.setDataSource(filestr);//设置要播放的视频

         mp.setDisplay(sv.getHolder());//设置将视频画面输出到SurfaceView

         mp.prepare(); //预加载视频

         mp.setLooping(true);

         mp.start(); //开始播放

      

         replay.setEnabled(false);//设置暂停按钮可用

         pause.setEnabled(true);//设置暂停按钮可用

         stop.setEnabled(true);//设置暂停按钮可用

         } catch(IllegalArgumentException e) {

         e.printStackTrace();

         } catch (SecurityExceptione) {

         e.printStackTrace();

         } catch(IllegalStateException e) {

         e.printStackTrace();

         } catch (IOException e) {

         e.printStackTrace();

         }

             }

         });

 

 

(5)为MediaPlayer对象添加完成事件监听器,在重写的onCompletion()方法中改变SurfaceView的背景图片并弹出消息提示框显示视频已经播放完毕,具体代码如下:

 mp.setOnCompletionListener(newOnCompletionListener() {

@Override

public void onCompletion(MediaPlayer mp) {

Toast.makeText(MainActivity.this, "视频播放完毕!", Toast.LENGTH_SHORT).show();

play.setEnabled(true);//设置“播放”按钮可用

pause.setEnabled(false); //设置“暂停”按钮不可用

stop.setEnabled(false); //设置“停止”按钮不可用

}

});

(6)重写Acitivity的onDestroy()方法,用于在当前Activity销毁时,停止正在播放的视频,并释放MediaPlayer所占用的资源,具体代码如下:

@Override

protected void onDestroy() {

       if(mp.isPlaying()){

              mp.stop();      //停止播放视频

       }

       mp.release();//释放资源

       super.onDestroy();

}

 

 

 

运行结果如下图所示

 

 

 

当然视频资源是需要自己添加的

首先打开eclipse的DDMS

如下图所示

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值