如何使前置摄像头捕获的视频不是反Android?

ken*_*ken 5 video-recording android-camera front-camera

我使用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
  }
Run Code Online (Sandbox Code Playgroud)

我已经在下面阅读了所有此问题,但似乎所有这些SurfaceView都未能解决我的问题。有关信息,我使用的是相机预览,所以这里的问题无济于事。

1)Android前置反光镜反光

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

3)防止前置摄像头翻转

所以我的问题是:

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

2)如何在SurfaceView不使用相机预览的情况下实现此目的TextureView?(因为我上面提到的所有问题,告诉有关使用TextureView

欢迎所有可能的解决方案..Tq

编辑

我制作了2个简短的视频片段以阐明问题,请下载并查看

1)摄像机预览录像时的录像

2)录制最终产品的视频

Ale*_*ohn 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 会以非常有效的方式将相机“连接”到硬件编码器,甚至不需要将像素复制到用户内存。这个答案展示了如何操纵相机渲染为纹理的方式。