Mendapatkan info video dari penyimpanan tidak berfungsi

Saya mencoba mendapatkan lebar dan ukuran video menggunakan kode sederhana ini:

String[] filePathColumn = {MediaStore.Video.VideoColumns.DATA,
                        MediaStore.Video.VideoColumns.WIDTH,
                        MediaStore.Video.VideoColumns.HEIGHT};
cursor = mContext.getContentResolver().query(mVideoUri, filePathColumn, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
      mVideoDecodableString = cursor.getString(cursor.getColumnIndex(filePathColumn[0]));
      mVideoWidth = cursor.getInt(cursor.getColumnIndex(filePathColumn[1]));
      mVideoHeight = cursor.getInt(cursor.getColumnIndex(filePathColumn[2]));
}

Sayangnya saya selalu mendapatkan 0 lebar dan tinggi untuk setiap file video di galeri saya, tetapi mendapatkan data video berhasil.

Apakah saya melakukan sesuatu yang salah, atau tidak mungkin dilakukan di Android?


person Nominalista    schedule 10.12.2016    source sumber


Jawaban (1)


Anda dapat menggunakan MediaMetadataRetriever untuk mengambil tinggi & lebar file video.

Anda perlu menggunakan metode extractMetadata() menggunakan konstanta METADATA_KEY_VIDEO_HEIGHT dan METADATA_KEY_VIDEO_WIDTH seperti di bawah ini.

MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();
metaRetriever.setDataSource(/* file path goes here. eg."/path/to/video.mp4" */);
String height = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
String width = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);

Catatan: MediaMetadataRetriever memerlukan API level 10 atau lebih tinggi.

Sunting:

Saya tidak yakin, tetapi menurut saya Anda perlu menggunakan Kolom RESOLUTION untuk mendapatkan resolusi (lebar × tinggi) file video berbentuk ContentResolver seperti contoh di bawah ini.

String[] projection = new String[] {MediaStore.Video.VideoColumns.RESOLUTION};
Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null);
if (cursor.moveToFirst()) {
    String resolution = cursor.getString(0);
    if(!StringUtils.isEmpty(resolution)) {
        int index = resolution.indexOf('x');
        width = Integer.parseInt(resolution.substring(0, index));
        height = Integer.parseInt(resolution.substring(index + 1));
}
person Priyank Patel    schedule 10.12.2016
comment
Ini berfungsi dengan baik, pertanyaan saya adalah mengapa kode dalam pertanyaan tidak berfungsi? Jika Anda bisa menjelaskan, saya akan menerima jawaban Anda. - person Nominalista; 10.12.2016
comment
@ThirdMartian periksa jawaban saya yang telah diedit untuk mendapatkan formulir resolusi video ContentResolver. - person Priyank Patel; 10.12.2016