Android翻盖前置摄像头镜头翻转视频

时间:2013-08-27 01:46:36

标签: android video camera

我正在尝试从Android的前置摄像头录制视频,同时在表面视图上显示。

我在前置摄像头发现的是,即使表面视图显示正常视图,它也会在录制过程中镜像翻转视频。

有什么方法可以阻止或修复它吗?

我读过其他stackoverflow文章,如How to keep android from inverting the image from the front facing camera?

但它似乎只是谈论用前置摄像头拍摄照片并反转图像,我已经使用矩阵自行修复。但是,似乎使用视频矩阵不起作用。

4 个答案:

答案 0 :(得分:3)

我没有解决方案,但在我看来关键是:

MediaRecorder.setOrientationHint

  

设置输出视频播放的方向提示。应在prepare()之前调用此方法。此方法在视频录制期间不会触发源视频帧旋转,但如果输出格式为 OutputFormat.THREE_GPP或OutputFormat.MPEG_4 ,则在输出视频中添加包含旋转角度的合成矩阵,以便视频播放器可以选择正确的播放方向。请注意,某些视频播放器可能会在播放过程中选择忽略视频中的构图矩阵。

我在H264录制视频,它对我不起作用:( 但它可能对你有帮助。做了尝试吗?

答案 1 :(得分:3)

在我的情况下,我只需要在播放时进行水平翻转。录制时,它已经翻转镜像效果,因为我看到它无法修改它。但是下面的代码在播放时解决了我的问题。

videoPlayer.setScaleX(-1);

答案 2 :(得分:1)

在setDisplayOrientation方法(http://developer.android.com/reference/android/hardware/Camera.html)的文档中,我们可以找到:

  

请注意,前置摄像头的预览显示会被翻转   旋转前水平,即图像被反射   沿着相机传感器的中心垂直轴。所以用户可以   看着自己盯着镜子。

因此,您的预览显示应该翻转,而不是您录制的视频。通过预览显示,您是否将自己视为镜子?如果是这样,一切都运转良好。

答案 3 :(得分:0)

你必须应用矩阵变换,如:

if(isFrontCamera) {
    m.preScale(-ratio, ratio);
} else {
    m.preScale(ratio, ratio);
}

假设您没有调整任何大小,则定量为1,使非前置摄像头preScale过时。