Android应用开发学习笔记之播放视频

作者:刘昊昱 

博客:http://blog.csdn.net/liuhaoyutz

 

在Android中,我们可以通过使用VideoView类或者MediaPlayer类来播放视频。

 

一、使用VideoView类播放视频

要使用VideoView类播放视频,首先要在布局文件中添加VideoView组件,然后在Activity中获取该组件,并使用VideoView.setVideoPath()或VideoView.setVideoURI()方法加载需要播放的视频,最后调用start()方法播放视频。VideoView类还提供了stop()和pause()方法,用于停止或暂停视频播放。

在布局文件中添加VideoView组件的基本语法格式如下:

<VideoView

         属性列表>

</VideoView>

Android还提供了一个与VideoView组件结合使用的MediaController组件。MediaController组件用于通过图形控制界面来控制视频的播放。

下面我们来看一个使用VideoView和MediaController组件播放视频的例子,由于在模拟器上播放不了视频,所以这里就不上图了,我在真机上验证过可以播放视频,直接看代码:

先来看主布局文件main.xml,其内容如下:

 

<?xml version="1.0"encoding="utf-8"?>

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

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

 

   <VideoView

        android:id="@+id/video"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_gravity="center" />

 

</LinearLayout>


 

下面看主Activity文件,其内容如下:

 

package com.liuhaoyu;

 

import java.io.File;

 

import android.app.Activity;

import android.media.MediaPlayer;

import android.media.MediaPlayer.OnCompletionListener;

import android.os.Bundle;

import android.widget.MediaController;

import android.widget.Toast;

import android.widget.VideoView;

 

public classMainActivity extends Activity {

    private VideoView video;

   

   /** Called when the activity is firstcreated. */

   @Override

   publicvoidonCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

       

        video=(VideoView) findViewById(R.id.video);

        File file=new File("/sdcard/1.mp4");

        MediaController mc=newMediaController(MainActivity.this);       // 创建一个MediaController对象

        if(file.exists()){

        video.setVideoPath(file.getAbsolutePath());

        video.setMediaController(mc);       // 将VideoView与MediaController关联起来

        video.requestFocus();       // 设置VideoView获取焦点

        try {

                video.start();      // 播放视频

            }catch(Exception e) {

                e.printStackTrace();

            }

       

        // 设置VideoView的Completion事件监听器

        video.setOnCompletionListener(new OnCompletionListener(){             

                @Override

                public voidonCompletion(MediaPlayer mp) {

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

                }

            });

        }else{

        Toast.makeText(this, "要播放的视频文件不存在", Toast.LENGTH_SHORT).show();

        }

   }

}


 

 

二、 使用MediaPlayer播放视频

MediaPlayer不但可以播放音乐,也可以播放视频,但是MediaPlayer没有提供视频输出界面,所以,用MediaPlayer播放视频需要和SurfaceView组件配合使用,其主要流程如下:

(1)、在布局文件中插入SurfaceView组件,其语法格式如下:

<SurfaceView

         android:id=”@+id/ID号”

         android:background=”背景”

         android:keepScreenOn=”true|false”

         android:layout_width=”宽度”

         android:layout_height=”高度” />

(2)、创建MediaPlayer对象,并加载要播放的视频。加载视频的方法和上一篇文章中介绍的加载音频的方法一样,这里不再详述。

(3)、将视频画面输出到SurfaceView,语法格式如下:

MediaPlayer.setDisplay(SurfaceHolder sh)

参数sh用于指定SurfaceHolder对象,可以通过SurfaceView.getHolder()方法获得。

(4)、调用MediaPlayer的play()、stop()、pause()等方法控制视频播放。

下面来看一个例子:

先来看主布局文件,其内容如下:

 

<?xml version="1.0"encoding="utf-8"?>

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

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:gravity="center"

    android:orientation="vertical" >

 

   <SurfaceView

        android:id="@+id/surfaceView1"

        android:keepScreenOn="true"

        android:layout_width="576px"

        android:layout_height="432px"/>

 

   <LinearLayout

        android:id="@+id/linearLayout1"

        android:layout_width="wrap_content"

        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:text="停止" />

   </LinearLayout>

 

</LinearLayout>


 

下面我们看主Activity文件,其内容如下:

 

package com.liuhaoyu;

 

import java.io.IOException;

 

import android.app.Activity;

import android.media.MediaPlayer;

import android.media.MediaPlayer.OnCompletionListener;

import android.os.Bundle;

import android.view.SurfaceView;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.Toast;

 

public classMainActivity extends Activity {

    private MediaPlayer mp;

    private SurfaceView sv;

   @Override

   publicvoidonCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        mp=new MediaPlayer();

        sv=(SurfaceView)findViewById(R.id.surfaceView1);

        Button play=(Button)findViewById(R.id.play);

        final Button pause=(Button)findViewById(R.id.pause);

        Button stop=(Button)findViewById(R.id.stop);

      

        play.setOnClickListener(new OnClickListener() {

           

            @Override

            public void onClick(View v) {

                mp.reset();

                try {

                    mp.setDataSource("/sdcard/1.mp4");

                    mp.setDisplay(sv.getHolder());

                    mp.prepare();

                    mp.start();

                    pause.setText("暂停");

                    pause.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);

                }

               

            }

        });

       

        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(new OnCompletionListener(){

           

            @Override

            public voidonCompletion(MediaPlayer mp) {

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

            }

        });

       

   }

    @Override

    protected void onDestroy() {

        if(mp.isPlaying()){

            mp.stop();

        }

        mp.release();

        super.onDestroy();

    }

   

}


 

 

你可能感兴趣的:(android)