我尝试使用这个简单的代码获取视频宽度和大小:
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中无法做到?
答案 0 :(得分: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 或更高。
修改强>
我不确定但是,我认为您需要使用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));
}