2016-12-10 4 views
0

Я пытаюсь получить ширину видео и размера, используя этот простой код:Получение видео Информации из хранилища не работает

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

Unfortunatelly Я всегда получаю 0 ширину и высоту для каждого видеофайла в моей галерее, но получение видеоданных.

Я делаю что-то не так, или это невозможно в Android?

ответ

1

Вы можете использовать MediaMetadataRetriever для получения высоты & Ширина видеофайла.

Вы должны использовать метод extractMetadata() с использованием констант METADATA_KEY_VIDEO_HEIGHT и METADATA_KEY_VIDEO_WIDTH, как показано ниже.

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

Примечание:MediaMetadataRetriever требуется уровень API 10 или выше.

Edit:

Я не уверен, но, я думаю, вам нужно использовать RESOLUTION колонку, чтобы получить разрешение (ширина × высота) формы файла видео ContentResolver, как показано ниже. Например,

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

Это работает отлично, мой вопрос, почему код в вопросе не работает? Если вы сможете объяснить, я приму ваш ответ. – ThirdMartian

+0

@ThirdMartian проверяет измененный ответ для получения формы разрешения видео 'ContentResolver'. –

Смежные вопросы