第一种播放:跳转到系统自带的播放器
①创建button按钮
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/start1"
android:text="第一种方式"
/>
②创建button按钮点击事件,查找播放资源并播放
case R.id.start1:
//sdcard资源
Uri uri = Uri.parse("storage/emulated/legacy/ace1.mp4");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "video/mp4");
//播放代码
startActivity(intent);
break;
第二种播放:用VideoView组件播放(此方法可以有播放上一个/下一个)
①创建button按钮和VideoView组件
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/start2"
android:text="第二种方式"
/>
<VideoView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/vv"
/>
②创建button按钮点击事件,查找播放资源并播放
private String[] videoPath = {"ace1.mp4","first.mp4"};
private int index = 0;
MediaController controller = new MediaController(this);//控制条
mVv.setMediaController(controller);//添加控制条
mVv.setVideoURI(Uri.parse("storage/emulated/legacy/"+videoPath[index]));
mVv.start();
//添加上一个下一个视频的监听
controller.setPrevNextListeners(new View.OnClickListener() {
@Override
public void onClick(View v) {
index--;
if(index<0){
index = videoPath.length-1;
}
mVv.setVideoURI(Uri.parse("storage/emulated/legacy/"+videoPath[index]));
mVv.start();
}
}, new View.OnClickListener() {
@Override
public void onClick(View v) {
index ++;
if(index >= videoPath.length){
index = 0;
}
mVv.setVideoURI(Uri.parse("storage/emulated/legacy/"+videoPath[index]));
mVv.start();
}
});
break;
第三种播放:用SurfaceView组件播放(此方法只可以播放)
①创建ImageView和SurfaceView组件
<ImageView
android:layout_width="200dp"
android:layout_height="50dp"
android:id="@+id/img"
/>
<SurfaceView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/sfv"
/>
②设置首帧图片
private void getFirstFrame() {
MediaMetadataRetriever mr = new MediaMetadataRetriever();
mr.setDataSource("storage/emulated/legacy/ace1.mp4");
//option
//OPTION_CLOSEST 在给定的时间,检索最近一个帧,这个帧不一定是关键帧。
//OPTION_CLOSEST_SYNC 在给定的时间,检索最近一个同步帧(关键帧)。
//OPTION_NEXT_SYNC 在给定时间之后检索一个同步帧(关键帧)。
//OPTION_PREVIOUS_SYNC 在给定时间之前检索一个同步帧(关键帧)
Bitmap frameAtTime = mr.getFrameAtTime(1000 * 1000, MediaMetadataRetriever.OPTION_CLOSEST);
mImg.setImageBitmap(frameAtTime);
}
③使用SurfaceView组件播放
setContentView(R.layout.activity_surface_view);
mImg = (ImageView) findViewById(R.id.img);
mSfv = (SurfaceView) findViewById(R.id.sfv);
MediaPlayer mp = new MediaPlayer();
try {
mp.setDataSource("storage/emulated/legacy/ace1.mp4");
mp.prepareAsync();//准备一下资源,加载资源
holder = mSfv.getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
mp.setDisplay(holder);//mp和surfaceview的结合
mp.start();//播放视频开始
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
});
} catch (IOException e) {
e.printStackTrace();
//解决万一ace1.mp4被删除了的,第二套
}
不要忘记:
要写出sdcard权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
最后编辑于 :2019.03.25 16:52:07
©著作权归作者所有,转载或内容合作请联系作者 平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。