SurfaceView播放MediaPlayer视频

MediaPlayer能够播放的视频格式有mp4,3gp。
在这里插入图片描述

public class MainActivity extends Activity {

	private MediaPlayer mediaPlayer;
	private int currentPosition;//当前视频播放的位置
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//[0]找到控件 用来显示播放视频的内容
		SurfaceView sfv=(SurfaceView) findViewById(R.id.sfv);
		//获取holder 用来维护视频播放的内容
		final SurfaceHolder holder=sfv.getHolder();
		
		//[0.1]添加holder声明周期方法
		holder.addCallback(new Callback() {
			

			//当surfaceview销毁的时候调用
			@Override
			public void surfaceDestroyed(SurfaceHolder holder) {
				System.out.println("surfaceDestroyed");
				//停止播放视频
				if(mediaPlayer!=null&&mediaPlayer.isPlaying()){
					//获取到当前播放视频的位置
					
					currentPosition = mediaPlayer.getCurrentPosition();
					mediaPlayer.stop();
				}
				
			}
			
			//这个方法执行了 说明surfaceview准备好了
			@Override
			public void surfaceCreated(SurfaceHolder holder) {
				System.out.println("surfaceCreated");
				//[1]初始化mediaPlayer
				
				 mediaPlayer = new MediaPlayer();
		        try {
					//[2]设置要播放的资源位置   path  可以是网络路径 也可以是本地路径
		        	//TODO  部署网络路径  用tomcat开启本地服务器   里面有相应的歌曲资源
					mediaPlayer.setDataSource("/mnt/sdcard/Ringtones/hxn.mp4");
					//[3]准备播放   异步准备
					mediaPlayer.prepareAsync();
					
					//[3.0]设置显示给sfv surfaceholder是用来维护视频播放的内容
					mediaPlayer.setDisplay(holder);
					
					//[3.1]设置一个准备完成的监听
					mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
						
						@Override
						public void onPrepared(MediaPlayer mp) {
							//[4]开始播放
							mediaPlayer.start();
				
							//[5]继续上次的位置进行播放
							mediaPlayer.seekTo(currentPosition);
							
						}
					});
				
				} catch (Exception e) {
					e.printStackTrace();
				} 
				
			}
			
			@Override
			public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
				// TODO Auto-generated method stub
			}
		});
	
	}

}

activity_main

<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="com.example.palymusic.MainActivity" >

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

</RelativeLayout>

在这里插入图片描述
但是这不是最好的用法,了解即可。
VideoView控件
在这里插入图片描述

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//[1]找到控件
		VideoView vv=(VideoView) findViewById(R.id.vv);
		//[2]设置播放的路径
		vv.setVideoPath("/mnt/sdcard/Ringtones/hxn.mp4");
		//[3]开始播放
		vv.start();
	}

}

布局

<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="com.example.videoview.MainActivity" >

    <VideoView 
        android:id="@+id/vv"
        android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
        />

</RelativeLayout>

同样实现视频播放,但是依然只能播放MP4和3gp格式。 vitamio视频框架,市面上用的比较多,基于谷歌的ffmpeg视频框架。