如何让前置摄像头拍摄的视频不是逆Android?

问题描述 投票:3回答:1

我使用MediaRecorder录制视频。当使用后置摄像头时,它工作正常,但是当使用前置摄像头时,捕获的视频正在翻转/反转。右侧的项目将显示在左侧。摄像头预览工作正常,最后拍摄的视频被翻转了。

这是相机预览的样子

enter image description here

但是最终的视频看起来像这样(左手边的所有项目都显示在右侧)

enter image description here

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

我准备在准备录音机时应用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)Android flip front camera mirror flipped video

2)How to keep android from inverting the image from the front facing camera?

3)Prevent flipping of the front facing camera

所以我的问题是:

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

2)如何在Camera预览使用SurfaceView但不使用TextureView时实现此目的? (引起我上面提到的所有问题,讲述使用TextureView

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

编辑

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

1)The video during camera preview of recording

2)The video of the final product of recording

android-camera video-recording front-camera
1个回答
1
投票

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

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

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

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

看草图:

这是你看场景的方式:

how you see the scene

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

how your peer sees the same scene

通常情况下,视频的录制是从对等点查看的,如第二张图片所示。这是例如视频会议的自然设置。

但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以非常有效的方式将相机连接到硬件编码器,甚至不需要将像素复制到用户存储器。 This answer展示了如何操纵相机渲染到纹理的方式。

© www.soinside.com 2019 - 2024. All rights reserved.