You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android CameraX前置摄像头录制视频如何实现水平镜像?

前置摄像头视频水平镜像实现方案

不能直接像ImageCapture那样通过设置元数据实现视频水平翻转——图片的EXIF元数据可以标记镜像状态让系统渲染时翻转,但视频录制的元数据体系(不管是CameraX的VideoCapture还是原生MediaRecorder)都没有类似的标记项,必须通过采集/编码阶段的变换或者后期处理来实现。

下面是几种实用的实现方式:

1. CameraX 实时录制时镜像

如果用CameraX框架,直接给VideoCapture设置目标变换矩阵即可:

// 初始化VideoCapture
val videoCapture = VideoCapture.Builder()
    .setTargetRotation(activity.windowManager.defaultDisplay.rotation)
    .build()

// 判断是否为前置摄像头
val isFrontCamera = cameraSelector == CameraSelector.DEFAULT_FRONT_CAMERA
if (isFrontCamera) {
    // 创建水平镜像变换矩阵:x轴方向缩放-1实现翻转,以预览视图中心为原点
    val mirrorTransform = Matrix().apply {
        postScale(-1f, 1f, viewFinder.width / 2f, viewFinder.height / 2f)
    }
    videoCapture.setTargetTransform(mirrorTransform)
}

// 绑定UseCases开始录制
cameraProvider.bindToLifecycle(this, cameraSelector, videoCapture)

这种方式会让录制的视频直接是水平镜像后的内容,不需要额外后期处理。

2. Camera2 + MediaRecorder 实现

用Camera2 API时,需要在配置录制会话时对采集帧应用变换:

// 配置MediaRecorder
MediaRecorder mediaRecorder = new MediaRecorder();
// ... 常规配置(输出路径、编码格式等)
if (isFrontCamera) {
    // 前置摄像头配合方向调整,再通过Surface变换实现镜像
    mediaRecorder.setOrientationHint(180);
}

// 创建CaptureRequest时,设置变换参数
CaptureRequest.Builder captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
captureRequestBuilder.addTarget(mediaRecorder.getSurface());
// 针对前置摄像头添加水平镜像的裁剪区域变换
if (isFrontCamera) {
    Rect cropRegion = new Rect(0, 0, sensorSize.getWidth(), sensorSize.getHeight());
    captureRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, new Rect(cropRegion.right, cropRegion.top, cropRegion.left, cropRegion.bottom));
}

如果需要更灵活的处理,也可以用OpenGL ES对摄像头采集的每一帧做水平翻转后再送入MediaRecorder编码。

3. 后期处理已录制的视频

如果已经录制好视频再处理,最简单的方式是用FFmpeg命令:

ffmpeg -i input.mp4 -vf hflip output.mp4

也可以用Android原生的MediaCodec API,读取视频帧后做水平翻转再重新编码输出。

内容的提问来源于stack exchange,提问作者BestFromAbove

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:25:21