在android中检测录制video的方向

我想制作我的自定义媒体播放器并需要video的方向信息(用于检测它是从前置或后置摄像头录制的)。 对于jpeg图像,我可以使用ExifInterface.TAG_ORIENTATION但对于video我如何能够find这些信息。

我试图从video文件中获取帧并将其转换为jpeg,但在所有情况下它总是提供方向0

请帮帮我。 提前致谢。

Api等级17后,我们可以提取video的方向: MediaMetadataRetriever

 MediaMetadataRetriever m = new MediaMetadataRetriever(); m.setDataSource(path); Bitmap thumbnail = m.getFrameAtTime(); // if (Build.VERSION.SDK_INT >= 17) { String s = m.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); Log.e("Rotation", s); } 

FFmpegMediaMetadataRetriever可以执行此操作,它适用于API 7+:

 FFmpegMediaMetadataRetriever fmmr = new FFmpegMediaMetadataRetriever(); fmmr.setDataSource(path); String rotation = fmmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); Log.e("Rotation", rotation); fmmr.release(); 

经过太多的努力,我开始知道媒体播放器提供了video文件的高度和宽度,我们可以从中查看video的旋转。

 MediaPlayer mp = new MediaPlayer(); try { mp.setDataSource(viewSource); mp.prepare(); mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() { @Override public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { int orientation = -1; if(width < height){ orientation = 0; setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);} else{ orientation = 1; setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);} } }); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }