仰天大笑出门去,我辈岂是蓬蒿人。这篇文章主要讲述Android翻盖前置摄像头镜头翻转视频相关的知识,希望能为你提供帮助。
我正在尝试从android的前置摄像头录制视频,同时在表面视图上显示。
【Android翻盖前置摄像头镜头翻转视频】我在前置摄像头发现的是,即使表面视图显示正常视图,它也会在录制过程中镜像翻转视频。
有什么方法可以防止这种情况或修复它吗?
我读过其他stackoverflow文章,如How to keep android from inverting the image from the front facing camera?
但它似乎只是谈论用前置摄像头拍摄照片并反转图像,我已经使用矩阵自行修复了这些照片。但是,似乎使用矩阵的视频不起作用。
答案我没有解决方案,但在我看来关键是:
MediaRecorder.setOrientationHint
设置输出视频播放的方向提示。应在prepare()之前调用此方法。如果输出格式为OutputFormat.THREE_GPP或OutputFormat.MPEG_4,则此方法不会在视频录制期间触发源视频帧旋转,而是在输出视频中添加包含旋转角度的合成矩阵,以便视频播放器可以选择正确的播放方向。请注意,某些视频播放器可能会选择在播放期间忽略视频中的合成矩阵。我在H264录制视频并且它对我不起作用:(但它可能对你有所帮助。尝试过吗?
另一答案在我的情况下,我只需要在播放时水平翻转。录制时,它已经翻转镜像效果,因为我看到它无法修改它。但是下面的代码解决了我的问题。
videoPlayer.setScaleX(-1);
另一答案在setDisplayOrientation方法(http://developer.android.com/reference/android/hardware/Camera.html)的文档中,我们可以找到:
请注意,前置摄像头的预览显示在旋转之前水平翻转,即图像沿着摄像头传感器的中心垂直轴反射。因此,用户可以将自己视为镜子。因此,您的预览显示应该翻转,而不是您录制的视频。通过预览显示,您是否将自己视为镜子?如果是这样,一切都很好。
另一答案你必须应用矩阵变换,如:
if(isFrontCamera) {
m.preScale(-ratio, ratio);
} else {
m.preScale(ratio, ratio);
}
假设您没有调整任何大小,则定量为1,使非前置摄像头preScale过时。
推荐阅读
- 如何记录在Android中打开相机的历史记录
- Android ACTION_IMAGE_CAPTURE意图
- Android相机照片预览正在逆转
- Android相机预览始终是侧面的
- Android(java.lang.RuntimeException:takePicture失败)
- Android - Things Raspberry Pi - Google移动视觉支持
- Android保存视图到jpg或png
- E / AndroidRuntime(致命异常:主PID:4435)
- 如何检测android中是否有前置摄像头()