MadiaPlayer之Android视频播放器完整解析!!!

本文详细介绍了如何使用Android的MediaPlayer实现视频播放器的核心功能,包括读取本地视频、播放与暂停、进度条与音量关联、缓冲效果、全屏切换、网速获取、监听卡顿等。通过设置各种监听器和处理滑动事件,实现了完整的视频播放体验。
摘要由CSDN通过智能技术生成

上篇文章我们讲了音乐播放器,这篇我们来讲一下视频播放器。
MadiaPlayer不是特别了解的请看上一篇文章的解析图。这次我们直接写了

首先,先看一下效果:
这里写图片描述

本次介绍的功能点:
1、读取本地视频文件,保存在List中
2、设置播放暂停
3、设置进度条和音量的关联
4、设置进度条和视频进度的关联
5、设置缓冲效果
6、设置全屏
7、获取网速
8、自定义监听卡
9、滑动屏幕改变音量

基本上这就是核心功能吧!开始了

读取本地视频文件,保存在List中

  /**
     * 从本地sdcard获取数据
     * 1、遍历sdcard,通过后缀名获取(效率比较慢)
     * 2、通过内容提供者数据库中获取(Android系统内部有一个扫描器 ———— “媒体扫描器”,当手机开机完成后,或者sdcard插好后,
     *    系媒体扫描器会发送一个广播开始工作,开始扫描sdcard,然后把数据存到数据库中,从而提供给第三方使用)
     *   todo 内容提供者:解决应用与应用共享数据,通过内容提供者暴露出来使用。
     * 3、6.0动态权限
     */
    public void getDataFromLocal() {
        // 新建一个线程,比较耗时
        new Thread(){
            public void run(){
                // 获取内容提供者
                ContentResolver contentResolver = getContext().getContentResolver();
                Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                String[] obj = {
                        MediaStore.Video.Media.DISPLAY_NAME,//视频文件在sdcard的名称
                        MediaStore.Video.Media.DURATION,//视频总时长
                        MediaStore.Video.Media.SIZE,//视频的文件大小
                        MediaStore.Video.Media.DATA,//视频的绝对地址(视频的播放地址)
                        MediaStore.Video.Media.ARTIST,//歌曲的演唱者
                };
                // 查询方法。 参数1:uri.  参数2: 查询的指令
                Cursor cursor = contentResolver.query(uri, obj, null, null, null);
                if(cursor != null) {
                    while(cursor.moveToNext()) {
                        MediaItem mediaItem = new MediaItem();
                        mList.add(mediaItem);
                        // TODO: 2018/1/4  查询的0 1等位置是根据contentResolver.query()方法传入的obj参数获取的。
                        //视频的名称
                        String name = cursor.getString(0);
                        mediaItem.setName(name);
                        //视频的时长
                        long duration = cursor.getLong(1);
                        mediaItem.setDuration(duration);
                        //视频的文件大小
                        long size = cursor.getLong(2);
                        mediaItem.setSize(size);
                        //视频的播放地址
                        String data = cursor.getString(3);
                        mediaItem.setData(data);
                        //艺术家
                        String artist = cursor.getString(4);
                        mediaItem.setArtist(artist);
                    }
                    cursor.close();
                }
                // 更新UI
                handler.sendEmptyMessage(MAG_HANDLER);
            }
        }.start();
    }

    /**
     * 6.0动态获取sd卡权限
     */
    public  boolean isGrantExternalRW(Activity activity) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && activity.checkSelfPermission(
                Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            activity.requestPermissions(new String[]{
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
            }, 1);
            return false;
        }
        return true;
    }

API与音乐的API是一样的 ,接下面我们直接看一下几个监听
// 准备好的监听
video_view.setOnPreparedListener(onPreparedListener);
// 播放出错了监听
video_view.setOnErrorListener(onErrorListener);
// 播放完成了的监听
video_view.setOnCompletionListener(onCompListener);
// seekbar视频状态改变监听
seekbarVideo.setOnSeekBarChangeListener(seekBarListener);
// seekBar音量的状态改变
seekbarVoice.setOnSeekBarChangeListener(seekBarVoiceListener);

设置播放暂停 与 进度条与视频的同步

    /**
     * 准备好监听,播放并且更新seekBar
     */
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值