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视频框架。