如何在Android上确定视频宽度和高度
我有一个视频文件,我想得到视频的宽度和高度。我不想玩它,只是为了变大。 我尝试使用MediaPlayer:如何在Android上确定视频宽度和高度,android,video,media-player,android-videoview,Android,Video,Media Player,Android Videoview,我有一个视频文件,我想得到视频的宽度和高度。我不想玩它,只是为了变大。 我尝试使用MediaPlayer: MediaPlayer mp = new MediaPlayer(); mp.setDataSource(uriString); mp.prepare(); int width = mp.getVideoWidth(); int height = mp.getVideoHeight(); 但它返回0表示宽度和高度,因为VideoSizeChangedEvent尚未启动。 如何获取视频的宽
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(uriString);
mp.prepare();
int width = mp.getVideoWidth();
int height = mp.getVideoHeight();
但它返回0表示宽度和高度,因为VideoSizeChangedEvent尚未启动。
如何获取视频的宽度和高度
UPD:我需要API版本7
private static final Uri MOVIE_URI = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
private static final String[] MOVIE_PJT = new String[] {
MediaStore.Video.Media._ID, MediaStore.Video.Media.DATA,
MediaStore.Video.Media.TITLE, MediaStore.Video.Media.DATE_TAKEN,
MediaStore.Video.Media.MIME_TYPE, MediaStore.Video.Media.DURATION,
MediaStore.Video.Media.SIZE, MediaStore.Video.Media.RESOLUTION };
尝试从系统内容提供程序进行查询。它将返回一些有用的视频信息(本地文件)在某些情况下,我们无法读取元数据。为了确保获得宽度和高度,最好使用
MediaMetadataRetriever
创建位图
,然后从创建的位图
获取宽度和高度,如下所示:
public int getVideoWidthOrHeight(File file, String widthOrHeight) {
MediaMetadataRetriever retriever = null;
Bitmap bmp = null;
FileInputStream inputStream = null;
int mWidthHeight = 0;
try {
retriever = new MediaMetadataRetriever();
inputStream = new FileInputStream(file.getAbsolutePath());
retriever.setDataSource(inputStream.getFD());
bmp = retriever.getFrameAtTime();
if (widthOrHeight.equals("width")){
mWidthHeight = bmp.getWidth();
}else {
mWidthHeight = bmp.getHeight();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (RuntimeException e) {
e.printStackTrace();
} finally{
if (retriever != null){
retriever.release()
}if (inputStream != null){
inputStream.close()
}
}
return mWidthHeight;
}
您可以这样调用上述方法:
// Get the video width
int mVideoWidth = getVideoWidthOrHeight(someFile, "width");
// Get the video height
int mVideoHeight = getVideoWidthOrHeight(someFile, "height");
ISize size = new SizeFromVideoFile(videoFilePath);
size.width();
size.hight();
API 7级解决方案:
// get video dimensions
MediaPlayer mp = new MediaPlayer();
try {
mp.setDataSource(filename);
mp.prepare();
mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() {
@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
int orient = -1;
if(width < height)
orient = 1;
else
orient = 0;
}
});
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//获取视频尺寸
MediaPlayer mp=新的MediaPlayer();
试一试{
mp.setDataSource(文件名);
mp.prepare();
mp.setOnVideoSizeChangedListener(新的OnVideoSizeChangedListener(){
@凌驾
VideoSizeChanged上的公共空白(MediaPlayer mp、整数宽度、整数高度){
int-orient=-1;
if(宽度<高度)
方向=1;
其他的
方向=0;
}
});
}捕获(IllegalArgumentException e){
e、 printStackTrace();
}捕获(安全异常e){
e、 printStackTrace();
}捕获(非法状态){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
这适用于API级别10及以上:
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource("/path/to/video.mp4");
int width = Integer.valueOf(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH));
int height = Integer.valueOf(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT));
retriever.release();
这对我有用
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(final MediaPlayer mp) {
int width = mp.getVideoWidth();
int height = mp.getVideoHeight();
}
});
这将与Android中的大小抽象配合使用
它包含一个类
您可以这样使用它:
// Get the video width
int mVideoWidth = getVideoWidthOrHeight(someFile, "width");
// Get the video height
int mVideoHeight = getVideoWidthOrHeight(someFile, "height");
ISize size = new SizeFromVideoFile(videoFilePath);
size.width();
size.hight();
对不起,我忘了写,我需要API verion 7,所以没有MediaMetadataRetrieverTransk用于该代码,但是我不知道如何为项目的res/raw文件夹中的文件获取适当的字符串,有什么建议吗?至少在某些时候,
分辨率
为空。(我还不确定它什么时候是非空的,但我遇到了这个问题,想找到一种方法来解决这个问题(关于姜饼和其他东西,唉)当解析
不可用时。@TigranSarkisian在android 6.0中应用程序会崩溃吗?它在API 10之后工作。但如果路径无效或文件不存在,它会抛出IllegalArgumentException
。在android 7.1上工作时应使用parseInt()
方法而不是valueOf
。无论如何,你救了我的一天!当从某些url应用程序获取视频的高度和宽度时,应用程序会挂起,如果我们无法从视频应用程序获取高度和宽度时,应用程序会挂起。当从某些url应用程序获取视频的高度和宽度时,应用程序会挂起,如果我们无法获取高度和宽度,应用程序也会挂起从视频应用程序得到挂起。唯一对我有效的事情-那个MediaMetadataRetriever似乎不太了解视频大小。。。