Android视频播放

上节课我们讲了安卓MP3播放,现在我们学习视频播放,遗憾的是目前MediaPlayer只能播放3gp的视频格式,其他需要相应解码器。

视频中的渲染需要一个我们还没有学习过的组件SurfaceView,以及android.view.SurfaceHolder;对其实时渲染

先看主配置文件.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    
    tools:context=".MediaDemo" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <ImageButton
            android:id="@+id/start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="start"
            android:src="@drawable/start" />

        <ImageButton
            android:id="@+id/stop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="stop"
            android:src="@drawable/stop" />

    </LinearLayout>

    <SurfaceView
        android:id="@+id/surfaceView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

 

主Activity代码:

public class MediaDemo extends Activity {

	MediaPlayer mediaplayer;
	SurfaceView surfaceview;
	SurfaceHolder surfaceviewholder;
	Context context;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_media_demo);
		surfaceview=(SurfaceView)super.findViewById(R.id.surfaceView);
		this.context=MediaDemo.this;
		this.surfaceviewholder=surfaceview.getHolder();
		this.surfaceviewholder.setType(surfaceviewholder.SURFACE_TYPE_PUSH_BUFFERS);
		this.mediaplayer=new MediaPlayer();
		try {
			this.mediaplayer.setDataSource("/sdcard/ee.3gp");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void start(View v){
		this.mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
		this.mediaplayer.setDisplay(surfaceviewholder);
		try {
			this.mediaplayer.prepare();
			this.mediaplayer.start();
		} catch (IllegalStateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
	}
	public void stop(View v){
		this.mediaplayer.stop();
		
	}

}

 

实现效果如下: