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

How to detect orientation of recorded video in android

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

现在的问题是,当我拍摄视频时,我想知道视频是以哪个方向录制的?因为我通过使用库来提高或降低视频的速度。当我在另一个 activity 中传递这个录制的视频时,这个视频与录制的不一样。所以帮我解决这个问题。

您可以尝试这样做:(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

用于录制视频的 class MediaRecorder 具有以下内容:

mMediaRecorder.setOrientationHint(90);

此提示是在 mp4 容器上设置的,但要注意的是并非所有 mp4 "reader" 或提取器都会考虑此方向。

Android 似乎不是很在意,虽然我可能是错的。 如果我用 ffmpeg 构建 opencv,方向将被忽略,但如果我用 quicktime 构建 opencv,帧会以正确的方向出现。

对文件使用 ffprobe 应该会告诉您文件是否按方向保存。

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