目录

一般使用流程

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;
            }
        });
    }

});