Android 使用VideoView播放本地视频详解
Posted 路 宇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 使用VideoView播放本地视频详解相关的知识,希望对你有一定的参考价值。
前言:由于视频源的尺寸导致播放的时候不能全屏,需要重写VideoView的onMeasure方法,所以我们创建ConditionVideoView继承于VideoView。
ConditionVideoView类代码如下:
public class ConditionVideoView extends VideoView {
public ConditionVideoView(Context context) {
super(context);
}
public ConditionVideoView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ConditionVideoView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//使视频全屏播放
int width = getDefaultSize(0, widthMeasureSpec);
int height = getDefaultSize(0, heightMeasureSpec);
setMeasuredDimension(width, height);
}
}
之后在activity_video_play.xml中引入重写后的VideoView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".VideoPlayActivity">
<com.example.daydemo.view.ConditionVideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
之后在VideoPlayActivity中实现播放本地视频的功能:
具体注释已经在代码中给出
public class VideoPlayActivity extends AppCompatActivity {
private ConditionVideoView videoView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video_play);
videoView = findViewById(R.id.videoView);
//获取文件对象
File file = new File(Environment.getStorageDirectory() + "/live.mp4");
if (file.exists()) {
//如果文件存在,则指定要播放的视频
videoView.setVideoPath(file.getAbsolutePath());
} else {
Toast.makeText(this, "要播放的视频文件不存在", Toast.LENGTH_SHORT).show();
}
/**
* 控制视频的播放 主要通过MediaController控制视频的播放
*/
//创建MediaController对象
MediaController mediaController = new MediaController(this);
videoView.setMediaController(mediaController); //让videoView 和 MediaController相关联
videoView.setFocusable(true); //让VideoView获得焦点
videoView.start(); //开始播放视频
//给videoView添加完成事件监听器,监听视频是否播放完毕
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Toast.makeText(VideoPlayActivity.this, "该视频播放完毕!", Toast.LENGTH_SHORT).show();
}
});
}
}
最后不要忘了在AndroidManifest.xml清单文件中加入允许访问SD卡的权限:
<!--允许访问SD卡的权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions" />
注意:如果按照如上步骤播放视频时,出现无法播放视频的提示框,那么可能就是文件路径出现了错误,或者指定的文件路径下没有视频资源。而且VideoView 只支持播放.mp4和.3GP格式
mp4格式:优点:分辨率高,大小适中
3GP格式:体积小,移动性强,适合在移动设备上使用。缺点:在电脑上兼容性差。
这样就能实现使用VideoView实现播放本地视频的功能~ 如有任何问题,可以在评论区指正!
以上是关于Android 使用VideoView播放本地视频详解的主要内容,如果未能解决你的问题,请参考以下文章
零基础用Android Studio实现简单的本地视频播放器