简介
在Android开发中许多应用都需要用到视频播放,VideoView是最简单的视频播放器,学会使用VideoView是Android开发中必备的技能。
- VideoView是使用MediaPlayer来对视频文件进行控制的。
- VideoView只支持mp4、avi、3gp格式的视频,支持格式相对单一,VideoView支持的格式可以参考MediaPlayer。
- VideoView可以播放网络视频,支持的网络视频的协议为:Http协议和RTSP协议两种。
常用方法
Android VideoView类为我们提供了十分方便的视频播放API,其主要方法如下:
- setVideoPath:设置要播放的视频文件的位置
- start:开始或继续播放视频
- pause:暂停播放视频
- resume:将视频从头开始播放
- seekTo:从指定的位置开始播放视频
- isPlaying:判断当前是否正在播放视频
- getCurrentPosition:获取当前播放的位置
- getDuration:获取载入的视频文件的时长
- setVideoPath(String path):以文件路径的方式设置VideoView播放的视频源
- setVideoURI(Uri uri):以Uri的方式设置视频源,可以是网络Uri或本地Uri
- setMediaController(MediaController controller):设置MediaController控制器
- setOnCompletionListener(MediaPlayer.onCompletionListener l):监听播放完成的事件
- setOnErrorListener(MediaPlayer.OnErrorListener l):监听播放发生错误时候的事件
- setOnPreparedListener(MediaPlayer.OnPreparedListener l):监听视频装载完成的事件
除了简单的操作和丰富的API以外,我们在装载视频时,无需进行编码,播放完成后也无需手动回收资源。
除了播放视频,Media Controller类则为我们提供了一个悬浮的操作栏,包含了播放,暂停,快进,快退,上一个,下一个等功能键。甚至连拖动进度条至某处播放都已经实现。在使用前VideoView和MediController需要相互指定控件。其内置方法有如下:
boolean isShowing:当前悬浮控制栏是否显示
setMediaPlayer(MediaController.MediaPlayerControl player):设置控制的组件
setPrevNextListeners(View.OnClickListener next,View.OnClickListener prev):设置上一个视频、下一个视频的切换事件。
默认情况下,Media Controller悬浮显示3s后隐藏,触摸响应的VideoView呼出。默认上一个,下一个按钮隐藏。
使用示例
播放在线视频流
声明权限
播放在线视频流需要使用网络权限,播放视频需要使用存储权限,将以下两行代码放到Mainfest.xml中
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
将VideoView添加到一个Activity中
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".MainActivity">
<VideoView
android:id="@+id/my_video"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
如果想要设置该Activity横屏,可以看这篇文章
https://hash070.top/android-activity-orientation.html
编写播放视频代码
VideoView videoView = findViewById(R.id.video_view);
videoView.setVideoPath("http://live.bilibili.com"); //方式一:播放视频流.随便写一个视频播放地址
Uri uri = Uri.parse("/sdcard/Download/test.mp4");//方式二:将视频路径解析到uri,设定videoview的uri
videoview.setVideoURI(uri);
videoView.start();
MediaController mediaController = new MediaController(this);
videoView.setMediaController(mediaController);
mediaController.setMediaPlayer(videoView);