Android 多媒体应用——MediaPlayer与SurfaceView播放视频

来源:互联网 发布:photoshopcs4软件下载 编辑:程序博客网 时间:2024/06/11 14:03

  MediaPlayer大家一定不陌生,可以用于播放视频和音频。之前我们已经在《Android 多媒体应用——MediaPlayer音频播放 》文章中讲过MediaPlayer播放音频了,今天来看MediaPlayer播放视频。
  MediaPlayer播放视频需要与SurfaceView配合使用。

SurfaceView

  SurfaceView可以直接从内存或者DMA等硬件接口取得图像数据。它的特点是:SurfaceView有自己的绘制线程,它的绘制是独立于主线程的,不依靠主线程。SurfaceView依靠自己的绘制线程绘制图像。也就是说它可以在主线程之外的线程中向屏幕绘图上。这样可以避免画图任务繁重的时候造成主线程阻塞,从而提高了程序的反应速度。在游戏开发中多用到SurfaceView,游戏中的背景、人物、动画等等尽量在画布canvas中画出。
  SurfaceView的使用是很广泛的,这里我们主要先学习它与MediaPlayer搭配实现视频的播放。
  

视频播放

1. 首先在布局中定义SurfaceView。

<LinearLayout  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:orientation="vertical"    tools:context=".MainActivity">    <Button        android:id="@+id/button_surface"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="播放视频"/>    <SurfaceView        android:id="@+id/surface"        android:layout_width="match_parent"        android:layout_height="match_parent" /></LinearLayout>

2. Activity中获得SurfaceView的对象。
3. 获得MediaPlayer的对象。
4. 获得视频的来源,通过调用方法setDataSource(String path)。
5. 设置视频的输出方式,通过调用方法setAudioStreamType(int streamtype)。
6. 调用setDisplay(SurfaceHolder sh)方法,设置视频在SrufaceView中显示。
7. 调用prepare()方法,准备播放视频。
8. 调用start(), stop(), pause()等方法对视频的播放进行操作。

public class MainActivity extends Activity {    private Button mButtonSurace;    private SurfaceView mSurfaceView;    private MediaPlayer player;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mButtonSurace = (Button) findViewById(R.id.button_surface);        mSurfaceView = (SurfaceView) findViewById(R.id.surface);        mButtonSurace.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (player == null) {                    player = new MediaPlayer();                }                player.reset();//复位                try {                    player.setDataSource(Environment.getExternalStorageDirectory() + "/xiaoxian.3gp");//设置播放的视频资源                    player.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置视频的输出形式。                    player.setDisplay(mSurfaceView.getHolder());//设置在SurfaceView中显示                    player.prepare();//准备                    player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {                        @Override                        public void onPrepared(MediaPlayer mp) {                            mp.start();//视频准备完成后,开始播放                        }                    });                } catch (IOException e) {                    e.printStackTrace();                }            }        });    }}
0 0
原创粉丝点击