我使用 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) Android 翻转前置摄像头镜子翻转视频
2) 如何防止 Android 反转前置摄像头的图像?
3) 防止前置摄像头翻转
所以我的问题是:
1)如何通过前置摄像头拍摄视频,并且视频不反转(与相机预览完全相同)?
2)使用Camera预览时如何实现SurfaceView
但不是TextureView
? (因为我上面提到的所有问题,请讲述如何使用TextureView
)
所有可能的解决方案都是受欢迎的..Tq
EDIT
我制作了2个短片来澄清问题,请下载观看
1) 录制时相机预览时的视频
2) 录制的最终产品视频
因此,如果系统相机应用程序生成与您的应用程序类似的视频,则您没有做错什么。现在是时候了解前置摄像头视频录制会发生什么情况了。
前置摄像头在拍摄静态图片或视频方面与后置摄像头没有什么不同。手机在屏幕上显示相机预览的方式有所不同。为了让用户看起来更自然,Android(和所有其他系统)镜像预览,以便您可以像在镜子中一样看到自己。
重要的是要了解这仅适用于向您呈现预览的方式。如果您拿起任何视频会议应用程序,连接两只手中握着的两个设备,然后看看自己,您会惊讶地发现自己的两个实例被翻转了。
这不是错误,这是向对方呈现视频的自然方式。
看草图:
你看到的场景是这样的:
这就是你的同伴看到同一场景的方式
通常,视频录制是从您的同伴的视角进行的,如第二张图片所示。这是视频会议等的自然设置。
但 Snapchat 和其他一些社交应用程序选择存储前置视频剪辑,就好像您从镜子中录制它一样(就好像在第一张图片中录音机在您手中一样)。有些人喜欢这个功能,有些人讨厌它(请参阅https://forums.androidcentral.com/general-help-how/664539-front-camera-pics-mirrored-reversed-only-snapchat.html and https://www.reddit.com/r/nexus6/comments/3846ay/has_anyone_found_a_fix_for_snapchat_flipping)
您不能为此使用 MediaRecorder。您可以使用 MediaCodec 的较低级别 API 来记录处理后的帧。您需要“手动”翻转每一帧,这可能会严重影响性能,因为通常 MediaRecorder 会以非常有效的方式将相机“连接”到硬件编码器,甚至不需要将像素复制到用户内存。这个答案展示了如何操纵相机渲染为纹理的方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)