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

  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();
                }
            }
        });
    }
}

你可能感兴趣的:(android,视频,多媒体,mediaplayer)