Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android上确定视频宽度和高度_Android_Video_Media Player_Android Videoview - Fatal编程技术网

如何在Android上确定视频宽度和高度

如何在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:

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似乎不太了解视频大小。。。