ビデオファイルがあり、ビデオの幅と高さを取得したい。サイズを決めるためだけに、プレイしたくありません。 MediaPlayerを使おうとしました:
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(uriString);
mp.prepare();
int width = mp.getVideoWidth();
int height = mp.getVideoHeight();
ただし、VideoSizeChangedEventがまだ発生していないため、幅と高さは0を返します。ビデオの幅と高さを取得するにはどうすればよいですか?
UPD:APIバージョン7が必要です
これは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();
メタデータを読み取れない場合があります。幅と高さを確実に取得するには、以下に示すように、Bitmap
を使用してMediaMetadataRetriever
を作成し、作成したBitmap
から幅と高さを取得するのが最善です。
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");
これは私のために働いた
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(final MediaPlayer mp) {
int width = mp.getVideoWidth();
int height = mp.getVideoHeight();
}
});
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();
}
これ ユーティリティのセット Androidのサイズ抽象化で動作します。
クラスが含まれています SizeFromVideoFile.Java 次のように使用できます。
ISize size = new SizeFromVideoFile(videoFilePath);
size.width();
size.hight();
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 };
これを試して、システムコンテンツプロバイダーからクエリを実行してください。それはビデオ(ローカルファイル)のいくつかの有用な情報を返します