如何在android中检测录制视频的方向

时间:2015-04-28 12:52:10

标签: android video camera orientation

朋友您好我是Android开发新手,我在使用相机时遇到了一些问题。我正在开发应用程序,在这个应用程序中我使用相机的内置功能。在我的应用程序相机中,将执行捕获视频的任务,然后保存捕获的视频。

现在的问题是,当我拍摄视频时,我想知道在哪个方向录制视频?因为我通过使用库来增加或减少视频的速度。当我在另一个活动中传递这个录制的视频时,这个视频并不像录制的那样。所以帮我解决这个问题。

2 个答案:

答案 0 :(得分:2)

您可以尝试执行以下操作:( viewSource是您的视频源)

MediaPlayer mp = new MediaPlayer();
String orientation = "";
try {
  mp.setDataSource(viewSource);
  mp.prepare();
  mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() {
      @Override
      public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
          if(width < height){
              orientation = "vertical";
          } else {
              orientation = "horizontal";
          }
      } 
  });
} catch (IllegalArgumentException e) {
  e.printStackTrace();
} catch (SecurityException e) {
  e.printStackTrace();
} catch (IllegalStateException e) {
  e.printStackTrace();
} catch (IOException e) {
  e.printStackTrace();
}

您可以在此处查看更多变体:Detect orientation of a recorded video in android

答案 1 :(得分:2)

用于录制视频的课程MediaRecorder包含:

mMediaRecorder.setOrientationHint(90);

此提示是在mp4容器上设置的,但问题是并非所有mp4“阅读器”或提取器都考虑到这种方向。

虽然我错了,但Android似乎并不在乎。 如果我使用ffmpeg构建opencv,则会忽略方向,但如果我使用quicktime构建opencv,则框架会以正确的方向显示。

在文件上使用ffprobe应告诉您文件是否以方向保存。

如果MediaPlayer不遵守方向,您可能必须自己解析mp4元数据以获取方向,然后按照旋转帧。