獲取本地視頻顯示封面、時長,點擊播放

github代碼傳送門

先看圖:

giphy.gif

1.獲取本地視頻文件路徑,也是最關鍵步驟。

    public List<LocalVideoBean> getList(Context context) {
        List<LocalVideoBean> sysVideoList = new ArrayList<>();
        // MediaStore.Video.Thumbnails.DATA:視頻縮略圖的文件路徑
        String[] thumbColumns = {MediaStore.Video.Thumbnails.DATA,
                MediaStore.Video.Thumbnails.VIDEO_ID};
        // 視頻其他信息的查詢條件
        String[] mediaColumns = {MediaStore.Video.Media._ID,
                MediaStore.Video.Media.DATA, MediaStore.Video.Media.DURATION};

        Cursor cursor = context.getContentResolver().query(MediaStore.Video.Media
                        .EXTERNAL_CONTENT_URI,
                mediaColumns, null, null, null);

        if (cursor == null) {
            return sysVideoList;
        }
        if (cursor.moveToFirst()) {
            do {
                LocalVideoBean info = new LocalVideoBean();

                info.setPath(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media
                        .DATA)));
                info.setDuration(cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video
                        .Media.DURATION)));
                sysVideoList.add(info);
            } while (cursor.moveToNext());
        }
        return sysVideoList;
    }

MediaStore內部類所管理的文件類型。

  • MediaStore.Audio 是所有音頻文件的容器
  • MediaStore.Files 多媒體存儲中所有文件的索引
  • MediaStore.Images 包含所有可用圖片的元數據。
  • MediaStore.Video包含視頻文件的元數據,并提供相應字段和方法。
  • MediaStore.Video.Media提供和獲取視頻文件的Uri,繼承VideoColumns
  • MediaStore.Video.Thumbnails這個類讓開發者去查詢并且得到兩種略縮圖:MINI_KIND: 512 x 384 thumbnail MICRO_KIND: 96 x 96 thumbnail
  • MediaStore.Video.VideoColumns代表所有視頻文件的列

2.將秒鐘的時間轉為分:秒的顯示格式。除以60得到分鐘,取余60得到秒鐘。各自除以10得到十位,取余10得到個位,連接起來就成了"00:00"的表示。

    public static String parseTime(int seconds) {
        StringBuilder stringBuilder = new StringBuilder();
        int min = seconds / 60;
        int sec = seconds % 60;
        int minHeigh = min / 10;
        int minLow = min % 10;
        int secHeight = sec / 10;
        int secLow = sec % 10;
        stringBuilder.append(minHeigh).append(minLow).append(":").append(secHeight).append(secLow);
        return stringBuilder.toString();
    }

3.封面的顯示我采用的是glide,直接傳入視頻路徑可加載到封面圖。顯示的Imageview我才用的寬高相同的SquareImageview。

Glide.with(getApplicationContext()).load(localVideoBean.getPath()).into(ivCover);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容