目录
一般使用流程
layout文件中定义VideoView组件
代码中的初始化使用
组件获取
设置视频播放路径
设置视频播放控制器
获取焦点开始播放
设置视频封面
Layout文件内添加RelativeLayout
控件获取
监听视频播放完成设置图片可见
解决视频播放第一帧时的短暂黑屏
一般使用流程
layout文件中定义VideoView组件
<VideoView android:id="@+id/video" android:layout_width="match_parent" android:layout_height="410dp" />
代码中的初始化使用
组件获取
kotlin中可以直接使用VideoView的id(这里是video)来进行操作
java中需要findViewById来获取控件
view=findViewById(R.id.video);
设置视频播放路径
通过VideoView类对象的setVideoPath来设置视频路径
这里的视频路径可以是Android本地的视频也可以是视频的网页url链接
当要播放Android本地视频时,需要添加访问存储的权限(Andoridmanifest.xml文件内添加,代码动态申请)
/
/网页视频Url链接
//String Path="https://mos-vod-drcn.dbankcdn.cn/P_VT/video_injection/711346606/v3/52B0F7951327599661900370304/MP4Mix_H.264_1920x1080_6000_HEAAC1_PVC_NoCut.mp4?accountinfo=0N4yN1mj5VdH9HFql04pfwgjH5f9%2Fd0uVg9g40mn3NWLOJOG7eYt8reLME3%2FDKUKDvOYMWk86UCXjG3tLFa4wg%3D%3D%3A20211206095003%3AUTC%2C%2C%2C20211206095003%2C%2C%2C-1%2C1%2C0%2C%2C%2C1%2C%2C%2C%2C1%2C%2C0%2C%2C%2C%2C%2C1%2CEND&GuardEncType=2&contentCode=M202112061761327599233494155265&spVolumeId=MP202112061761327599230507810816&server=mosplay-drcn.himovie.hicloud.com&protocolType=1&formatPriority=504*%2C204*%2C2"
//view.setVideoPath(Path)
// Android本地视频
String path = Environment.getExternalStorageDirectory().getPath()+"/test.mp4";
view.setVideoPath(path);
设置视频播放控制器
MediaController mediaController = new MediaController(MainActivity.this); //VideoView与MediaController建立关联 view.setMediaController(mediaController);
获取焦点开始播放
view.requestFocus(); view.start();
设置视频封面
设置视频封面的解决方法是采用RelativeLayout的布局方式,在Layout布局内添加ImageView覆盖掉VideoView,当视频播放时ImageView的可见性为Gone,视频播放完成时ImageView的可见性为Visible
Layout文件内添加RelativeLayout
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="410dp">
<VideoView
android:id="@+id/video"
android:layout_width="match_parent"
android:layout_height="410dp"/>
<ImageView
android:id="@+id/video_holder"
android:layout_width="match_parent"
android:layout_height="410dp"
android:background="@drawable/image"/>
</RelativeLayout>
要确保ImageView的尺寸大于等于VideoView的尺寸
控件获取
仍与VideoView控件的获取方式类似,Kotlin可以直接使用id而Java需要findViewById
监听视频播放完成设置图片可见
监听视频播放完成的监听器方法是:setOnCompletionListener
具体代码如下:
view.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
view.pause(); //视频暂停
imageView.setVisibility(View.VISIBLE); //遮挡图片设置可见
}
});
视频播放时设置ImageView不可见的具体操作在解决播放第一帧短暂黑屏中解决
解决视频播放第一帧时的短暂黑屏
视频播放第一帧时的短暂黑屏可以监听视频播放的第一帧开始时再设置ImageView不可见
具体的监听方法是:setOnPreparedListener和其内嵌套的setOnInfoListener
代码如下:
view.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
mp.setOnInfoListener(new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
//播放第一帧时设置图片消失
if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START)
imageView.setVisibility(View.GONE);
return true;
}
});
}
});