1.第一種播放通過跳轉系統(tǒng)進入播放頁面
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});
·②跳轉系統(tǒng)文件播放器
//跳轉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();
}