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