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实现播放本地视频的功能~  如有任何问题,可以在评论区指正!

  • 0
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android VideoView 是一个可以用来播放视频的视图控件,但是有时候会遇到无法播放某些视频的情况。 造成 Android VideoView 无法播放视频的原因有很多,下面是一些可能的原因: 1. 文件格式不受支持:Android VideoView支持播放视频格式有限,例如常见的MP4、3GP等格式,但是某些特殊格式如MKV、FLV等可能无法播放。 2. 编码方式不受支持:即使是支持的文件格式,如果视频使用了不受支持的编码方式,也无法播放Android支持的编码方式包括H.264、H.263等。 3. 视频文件损坏:如果视频文件本身损坏或者缺失必要的编码信息,也会导致无法播放。 4. 网络问题:如果播放视频来自网络,可能是网络连接问题导致无法播放。例如服务器问题、网络限速等。 解决这个问题的方法有几种: 1. 转码视频:将不受支持的视频格式或编码方式转换为支持的格式,可以使用一些视频转换工具来完成。 2. 使用其他视频播放器:如果VideoView无法播放某个视频,可以尝试其他的视频播放器,如ExoPlayer、VLC等。 3. 检查视频文件:确保视频文件没有损坏,尝试播放其他已知可以正常播放视频文件来检查。 4. 检查网络连接:如果视频来自网络,确保网络连接正常,并尝试使用其他网络或播放其他视频来排除网络问题。 总之,如果Android VideoView无法播放某个视频,我们需要先检查视频文件格式、编码方式、文件完整性以及网络连接等方面的问题,然后采取相应的解决方法来解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值