Android,哪个相机与MediaStore.ACTION_VIDEO_CAPTURE一起使用? (正面或背面)

时间:2014-10-12 05:39:41

标签: android android-intent video camera back

简单的工作代码:

m_TakeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
if (m_TakeVideoIntent.resolveActivity(MainActivity.this.getPackageManager()) != null) {
    startActivityForResult(m_TakeVideoIntent, REQUEST_VIDEO_CAPTURE);
}

// and when done:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == REQUEST_VIDEO_CAPTURE) {
            // code
        } else {
            // other code
        }
    }
}

问题:

我如何知道onActivityResult(..)使用了什么相机,正面还是背面?

OR

如何强制新的Intent(MediaStore.ACTION_VIDEO_CAPTURE)使用前置或后置摄像头?

(这是因为使用前置摄像头时 - 结果视频会颠倒过来。)

2 个答案:

答案 0 :(得分:2)

这有点长,但有关于视频以错误方向播放时实际出错的有用信息。喝上一杯好酒,然后阅读...

原始问题

  

如何强制新的Intent(MediaStore.ACTION_VIDEO_CAPTURE)使用前置或后置摄像头?

如其他地方所述,有一种(不可靠)方法要求相机或视频活动在前置摄像头或后置摄像头模式下打开。

除了这种方法的不可靠性之外,没有什么可以阻止用户在相机打开后切换前/后模式,因此它不会是解决倒置视频播放问题的好方法。 / p>

  

我如何知道onActivityResult(..)使用了什么相机,正面还是背面?

我无从知晓。但...

无论如何,正面和背面相机都不是问题。

潜在的问题是,对于某些媒体播放器,Android设备捕获的视频可能会以错误的方向播放。这是因为,根据MediaRecorder文档,设置方向提示

  

...在视频录制过程中不会触发源视频帧旋转,而是在输出视频中添加包含旋转角度的合成矩阵...

不幸的是:

  

有些视频播放器可能会在播放过程中选择忽略视频中的构图矩阵。

阅读视频方向

虽然有些媒体播放器忽略了方向提示,但您自己的代码可以读取它。

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK && requestCode == REQUEST_VIDEO_CAPTURE) {
        Uri vid = data.getData();

        Log.i("xcode", "Video captured: " + data.getData());

        MediaMetadataRetriever mmr = new MediaMetadataRetriever();
        mmr.setDataSource(this, vid);
        String foo = mmr
                .extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);

        Log.i("xcode", "Video captured: " + data.getData() + " rotation: "
                + foo);
    }
}

(请注意,为了从返回的视频中读取元数据,您需要按照Camera docs的建议,在请求时提供MediaStore.EXTRA_OUTPUT字段。)

当我运行此代码时,我得到以下结果:

  • 后置摄像头,人像,旋转== 90
  • 前置摄像头,人像,旋转== 270
  • 后置摄像头,风景,旋转== 180
  • 前置摄像头,风景,旋转== 180

当旋转为270时,看起来这些视频捕捉对于某些玩家来说可能会有问题,所以那些是您应该选择通过后期处理来修复的视频。

答案 1 :(得分:1)

请参阅https://stackoverflow.com/a/11159760/192373 - 它使用未记录的额外来控制将打开哪个摄像头。

请注意,意图可能由不同的应用程序提供,具体取决于设备,ROM以及最终用户选择安装和激活的第三方应用程序。

对于图像捕捉,您有机会随后发现相机信息,但视频无法发现。