1.第一种播放通过跳转系统进入播放页面
vedios = new String[]{Environment.getExternalStorageDirectory() + "a.mp4"};
·①获取权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
PermissionsUtil.requestPermission(this, new PermissionListener() {
@Override
public void permissionGranted(@NonNull String[] permission) {
//成功就跳转
Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show();
}
@Override
public void permissionDenied(@NonNull String[] permission) {
}
}, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE});
·②跳转系统文件播放器
//跳转intent.ACTION_VIEW
Intent intent = new Intent(Intent.ACTION_VIEW);
//类型video/mp4
intent.setDataAndType(Uri.parse(vedios[0]), "video/mp4");
startActivity(intent);
VideoView跳转播放器
private void vv() {
//mediocontroller
MediaController mediaController = new MediaController(this);
//vv兼容mediaController
vv.setMediaController(mediaController);
//开始播放的方法
vvPaly();
//点击事件
mediaController.setPrevNextListeners(new View.OnClickListener() {
@Override
public void onClick(View v) {
//定义int 值等于0 下一个 i++判断i0大于所有视频文件-1 如果大于那么i=0
//不等于零就播放
//下一个
i++;
if (i > vedios.length - 1) {
i = 0;
}
vvPaly();
}
}, new View.OnClickListener() {
@Override
public void onClick(View v) {
//上一个 i--
i--;
if (i < 0) {
//i=视频文件长度-1
i = vedios.length - 1;
}
//开始播放
vvPaly();
}
});
}
//vv加载视频路径 start开始播放
private void vvPaly() {
vv.setVideoPath(vedios[0]);
vv.start();
}
3.通过mediopalyer音频播放 视频文件
1.获取路径
2.获取权限
3.注意只能在initview 或者oncreate 方法里进项加载视频
private void initView() {
sf = (SurfaceView) findViewById(R.id.sf);
btn_goon = (Button) findViewById(R.id.btn_goon);
btn_pasume = (Button) findViewById(R.id.btn_pasume);
btn_stop = (Button) findViewById(R.id.btn_stop);
btn_goon.setOnClickListener(this);
btn_pasume.setOnClickListener(this);
btn_stop.setOnClickListener(this);
mediaPlayer = new MediaPlayer();//音乐播放器
try {
mediaPlayer.reset();//防止崩溃
mediaPlayer.setDataSource(path);//保存路径
mediaPlayer.prepare();//清理出局
SurfaceHolder holder = sf.getHolder();//获取holder
//通过sfvholder.add获取点击事件
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
mediaPlayer.setDisplay(holder);//音乐播放器包括holder
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
});
} catch (IOException e) {
e.printStackTrace();
}
btn_yi = (Button) findViewById(R.id.btn_yi);
btn_yi.setOnClickListener(this);
iv = (ImageView) findViewById(R.id.iv);
iv.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_goon:
mediaPlayer.start();
break;
case R.id.btn_pasume:
mediaPlayer.pause();
break;
case R.id.btn_stop:
mediaPlayer.stop();
break;
case R.id.btn_yi:
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(path);
//timeUs 微秒
//option
//OPTION_CLOSEST 在给定的时间,检索最近一个帧,这个帧不一定是关键帧。
//OPTION_CLOSEST_SYNC 在给定的时间,检索最近一个同步帧(关键帧)。
//OPTION_NEXT_SYNC 在给定时间之后检索一个同步帧(关键帧)。
//OPTION_PREVIOUS_SYNC 在给定时间之前检索一个同步帧(关键帧)
Bitmap frameAtTime = mediaMetadataRetriever.getFrameAtTime(0);
iv.setImageBitmap(frameAtTime);
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
mediaPlayer.stop();
}