打开相册选择视频
/**
* 打开相册,选择视频
*/
public void pickVideo(View view) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("video/*");
startActivityForResult(intent, REQUEST_CODE);
}
使用系统播放器播放视频
/**
* 调用系统播放器播放视频
*/
private void playVideoBySystemPlayer(Uri uri) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "video/*");
startActivity(intent);
}
使用VideoView播放视频
public void playInVideoView(Uri uri) {
VideoView videoView = this.findViewById(R.id.videoView);
//创建视频设置控制栏
MediaController controller = new MediaController(activity);
// 必须传有Window的Context,比如Activity
//给videoview设置控制栏
videoView.setMediaController(controller);
//控制栏的位置依附到videoview上
controller.setAnchorView(videoView);
//加载视频
videoView.setVideoURI(uri);
//开启视频
videoView.start();
}
// 获取视频的长度
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
// 视频的播放时长
int duration = videoView.getDuration();
}
});
使用SurfaceView播放视频
- void surfaceCreated(SurfaceHolder holder):当SurfaceHolder被创建的时候回调。
- void surfaceChange(SurfaceHolder holder):当SurfaceHolder的尺寸发生变化的时候被回调。
- void surfaceDestroyed(SurfaceHolder holder):当SurfaceHolder被销毁的时候回调。
private void playVideo(SurfaceView surfaceView) {
try {
// MediaPlayer
final MediaPlayer mediaPlayer = new MediaPlayer();
Uri uri =
mediaPlayer.setDataSource(this, uri);
// SurfaceHolder
surfaceView.getHolder().addCallback(new SurfaceHolder.Callback2() {
@Override
public void surfaceRedrawNeeded(SurfaceHolder holder) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// SurfaceView创建时调用
try {
mediaPlayer.setDisplay(holder);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// 横竖屏切换
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// SurfaceView销毁时调用
mediaPlayer.stop();
mediaPlayer.release();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
获取视频封面
public void getVideoCover() {
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
Uri uri =
retriever.setDataSource(uri.toString(), new HashMap<String, String>()); // 获取网络视频的元信息
// retriever.setDataSource(context,uri); // 获取本地视频的元信息
Bitmap bitmap = retriever.getFrameAtTime();
imageView.setImageBitmap(bitmap);
// 获取屏幕的宽高
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
int widthPixels = metrics.widthPixels;
int heightPixels = metrics.heightPixels;
// 重新设置SurfaceView宽高
int width = bitmap.getWidth();
int height = bitmap.getHeight();
// 计算最佳缩放比例
float widthRatio = width * 1.0f / widthPixels;
float heightRatio = height * 1.0f / heightPixels;
float ratio = Math.max(widthRatio, heightRatio);
// 计算视频显示的宽高
int displayWidth = (int) (width / ratio);
int displayHeight = (int) (height / ratio);
// 设置SurfaceView的宽高
ViewGroup.LayoutParams layoutParams = surfaceView.getLayoutParams();
layoutParams.width = displayWidth;
layoutParams.height = displayHeight;
surfaceView.requestLayout();
}