10

我使用 MediaRecorder 录制视频。使用后置摄像头时,它工作正常,但使用前置摄像头时,捕获的视频正在翻转/反转。意味着右侧的项目将出现在左侧。相机预览工作正常,只是最后捕获的视频翻转了。

这是相机预览的样子

在此处输入图像描述

但最终的视频看起来像这样(左侧的所有项目,出现在右侧)

在此处输入图像描述

到目前为止我尝试了什么:

我试图应用matrix准备记录器时,但它似乎确实改变了任何东西。

private boolean prepareRecorder(int cameraId){

    //# Create a new instance of MediaRecorder
    mRecorder = new MediaRecorder();

    setCameraDisplayOrientation(this,cameraId,mCamera);
    int angle = getVideoOrientationAngle(this,cameraId);
    mRecorder.setOrientationHint(angle);

    if(cameraId == Camera.CameraInfo.CAMERA_FACING_FRONT){
        Matrix matrix = new Matrix();
        matrix.preScale(1.0f,-1.0f);
    }

    //all other code to prepare recorder here
  }

我已经阅读了下面所有这些问题,但这一切似乎并没有解决我的问题。有关信息,我SurfaceView用于相机预览,所以这里的这个问题没有帮助。

1)安卓翻转前置摄像头后视镜翻转视频

2)如何防止android反转前置摄像头的图像?

3)防止前置摄像头翻转

所以我的问题是:

1)如何通过前置摄像头捕获视频不反转的视频(与摄像头预览完全相同)?

SurfaceView2)当相机预览正在使用但不使用时如何实现这一点TextureView?(因为我上面提到的所有问题,说说使用TextureView

所有可能的解决方案都非常受欢迎..Tq

编辑

我做了2个短视频来澄清问题,请下载看看

1)录制的相机预览期间的视频

2)录制最终产品的视频

4

1 回答 1

3

因此,如果系统相机应用程序产生的视频与您的应用程序相似,那么您并没有做错什么。现在是时候了解前置摄像头视频录制会发生什么了。

前置摄像头在拍摄静态图片或视频的方式上与后置摄像头没有什么不同。手机在屏幕上显示相机预览的方式有所不同。为了让用户看起来更自然,Android(和所有其他系统)会镜像预览,这样您就可以像在镜子中一样看到自己。

请务必了解,这仅适用于预览呈现给您的方式。如果你拿起任何视频会议应用程序,连接你两只手拿着的两个设备,然后看看你自己,你会惊讶地发现自己的两个实例被翻转了。

这不是错误,这是将视频呈现给对方的自然方式。

见草图:

这是您看到场景的方式:

你怎么看这个场景

这就是你的同伴看到相同场景的方式

你的同伴如何看待同一个场景

通常,视频的录制是从您的同伴的角度完成的,如第二张图片所示。这是例如视频会议的自然设置。

但是 Snapchat 和其他一些社交应用程序选择存储前置视频剪辑,就好像你从镜子里录制它一样(就好像第一张照片上录像机就在你手中一样)。有些人喜欢这个功能,有些人讨厌它(参见https://forums.androidcentral.com/general-help-how/664539-front-camera-pics-mirrored-reversed-only-snapchat.htmlhttps://www .reddit.com/r/nexus6/comments/3846ay/has_anyone_found_a_fix_for_snapchat_flipping

您不能为此使用 MediaRecorder。您可以使用 MediaCodec 的较低级别 API 来记录处理后的帧。您需要“手动”翻转每一帧,这可能会对性能造成重大影响,因为通常 MediaRecorder 以非常有效的方式将相机“连接”到硬件编码器,甚至不需要将像素复制到用户内存。这个答案显示了如何操纵相机渲染到纹理的方式。

于 2017-11-12T12:55:44.840 回答