Android 使用VideoView播放本地视频详解

简介: Android 使用VideoView播放本地视频详解

前言:由于视频源的尺寸导致播放的时候不能全屏,需要重写VideoView的onMeasure方法,所以我们创建ConditionVideoView继承于VideoView。

ConditionVideoView类代码如下:

1. public class ConditionVideoView extends VideoView {
2.     public ConditionVideoView(Context context) {
3.         super(context);
4.     }
5. 
6.     public ConditionVideoView(Context context, AttributeSet attrs) {
7.         super(context, attrs);
8.     }
9. 
10.     public ConditionVideoView(Context context, AttributeSet attrs, int defStyleAttr) {
11.         super(context, attrs, defStyleAttr);
12.     }
13. 
14.     @Override
15.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
16.         //使视频全屏播放
17.         int width = getDefaultSize(0, widthMeasureSpec);
18.         int height = getDefaultSize(0, heightMeasureSpec);
19.         setMeasuredDimension(width, height);
20.     }
21. }

之后在activity_video_play.xml中引入重写后的VideoView

1. <?xml version="1.0" encoding="utf-8"?>
2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3.     xmlns:app="http://schemas.android.com/apk/res-auto"
4.     xmlns:tools="http://schemas.android.com/tools"
5.     android:layout_width="match_parent"
6.     android:layout_height="match_parent"
7.     tools:context=".VideoPlayActivity">
8. 
9.     <com.example.daydemo.view.ConditionVideoView
10.         android:id="@+id/videoView"
11.         android:layout_width="match_parent"
12.         android:layout_height="match_parent" />
13. </LinearLayout>

之后在VideoPlayActivity中实现播放本地视频的功能:

具体注释已经在代码中给出

1. public class VideoPlayActivity extends AppCompatActivity {
2.     private ConditionVideoView videoView;
3. 
4.     @Override
5.     protected void onCreate(Bundle savedInstanceState) {
6.         super.onCreate(savedInstanceState);
7.         setContentView(R.layout.activity_video_play);
8.         videoView = findViewById(R.id.videoView);
9. 
10.         //获取文件对象
11.         File file = new File(Environment.getStorageDirectory() + "/live.mp4");
12. if (file.exists()) {
13.             //如果文件存在,则指定要播放的视频
14.             videoView.setVideoPath(file.getAbsolutePath());
15.         } else {
16.             Toast.makeText(this, "要播放的视频文件不存在", Toast.LENGTH_SHORT).show();
17.         }
18.         /**
19.          * 控制视频的播放 主要通过MediaController控制视频的播放
20.          */
21.         //创建MediaController对象
22.         MediaController mediaController = new MediaController(this);
23.         videoView.setMediaController(mediaController); //让videoView 和 MediaController相关联
24.         videoView.setFocusable(true); //让VideoView获得焦点
25.         videoView.start(); //开始播放视频
26.         //给videoView添加完成事件监听器,监听视频是否播放完毕
27.         videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
28.             @Override
29.             public void onCompletion(MediaPlayer mp) {
30.                 Toast.makeText(VideoPlayActivity.this, "该视频播放完毕!", Toast.LENGTH_SHORT).show();
31.             }
32.         });
33.     }
34. }

最后不要忘了在AndroidManifest.xml清单文件中加入允许访问SD卡的权限:

1. <!--允许访问SD卡的权限-->
2.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3.     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
4.         tools:ignore="ProtectedPermissions" />

注意:如果按照如上步骤播放视频时,出现无法播放视频的提示框,那么可能就是文件路径出现了错误,或者指定的文件路径下没有视频资源。而且VideoView 只支持播放.mp4和.3GP格式

mp4格式:优点:分辨率高,大小适中

3GP格式:体积小,移动性强,适合在移动设备上使用。缺点:在电脑上兼容性差。

这样就能实现使用VideoView实现播放本地视频的功能~  如有任何问题,可以在评论区指正!


目录
相关文章
|
7天前
|
Android开发 内存技术
Android 通过tinyalsa调试解决录制和播放音频问题
Android 通过tinyalsa调试解决录制和播放音频问题
23 1
|
5月前
|
Web App开发 Android开发 ice
【Android App】给App集成WebRTC实现视频发送和接受实战(附源码和演示 超详细)
【Android App】给App集成WebRTC实现视频发送和接受实战(附源码和演示 超详细)
105 1
|
5月前
|
Java 定位技术 Android开发
【Android App】利用腾讯地图获取地点信息和规划导航线路讲解及实战(附源码和演示视频 超详细必看)
【Android App】利用腾讯地图获取地点信息和规划导航线路讲解及实战(附源码和演示视频 超详细必看)
65 1
|
5月前
|
JSON Android开发 数据格式
【Android App】实战项目之仿抖音的短视频分享App(附源码和演示视频 超详细必看)
【Android App】实战项目之仿抖音的短视频分享App(附源码和演示视频 超详细必看)
93 1
|
5月前
|
JSON 网络协议 Android开发
【Android App】实战项目之仿微信的私信和群聊App(附源码和演示视频 超详细必看)
【Android App】实战项目之仿微信的私信和群聊App(附源码和演示视频 超详细必看)
95 3
|
5月前
|
XML vr&ar Android开发
【Android App】实战项目之虚拟现实(VR)的全景相册(附源码和演示视频 可用于学习和大作业)
【Android App】实战项目之虚拟现实(VR)的全景相册(附源码和演示视频 可用于学习和大作业)
150 2
|
5月前
|
API Android开发 开发者
【Android App】Vulkan实现宇宙中旋转雷达动画效果(附源码和原始视频 超详细必看)
【Android App】Vulkan实现宇宙中旋转雷达动画效果(附源码和原始视频 超详细必看)
69 1
|
5月前
|
XML 小程序 Java
【Android App】给三维魔方贴图以及旋转动画讲解和实战(附源码和演示视频 超详细必看)
【Android App】给三维魔方贴图以及旋转动画讲解和实战(附源码和演示视频 超详细必看)
30 0
|
编解码 Shell Android开发
|
编解码 Shell Android开发
Android视频录制命令screenrecord
转自http://blog.csdn.net/wirelessqa/article/details/22725581 Android视频录制命令screenrecord 你要知道: screenrecord是一个shell命令 支持Android4.
1052 0