从存储中获取视频信息无效

时间:2016-12-10 10:45:52

标签: java android video

我尝试使用这个简单的代码获取视频宽度和大小:

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

不幸的是,我的画廊中的每个视频文件总是得到0宽度和高度,但获取视频数据是有效的。

我做错了什么,或者在Android中无法做到?

1 个答案:

答案 0 :(得分:1)

您可以使用MediaMetadataRetriever来检索身高和身高。视频文件的宽度。

您需要使用extractMetadata()方法,使用METADATA_KEY_VIDEO_HEIGHTMETADATA_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 或更高。

修改

我不确定但是,我认为您需要使用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));
}