Android如何通过Camera2 API将前后摄画面保存为单个视频文件
Android 双摄同屏预览+单视频文件录制实现方案(基于Camera2 API)
前置依赖要求
- 系统版本最低要求:Android 11(API 级别 30),更低版本系统在框架层做了摄像头资源互斥,无法同时稳定打开前后置摄像头,强行调用会出现前一个打开的摄像头被强制断开的问题
- 清单文件配置:必须在
AndroidManifest.xml中声明必要权限与特性<!-- 基础权限 --> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 安卓10及以下写存储权限,11及以上用MediaStore可不用 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" /> <!-- 过滤不支持双摄并发的设备 --> <uses-feature android:name="android.hardware.camera.concurrent" android:required="true" />
核心实现流程
- 第一步:校验设备双摄并发能力
调用CameraManager的getConcurrentCameraIds()接口,获取设备支持同时开启的摄像头ID组合列表,筛选出同时包含前置、后置摄像头的ID对。不要硬编码假设摄像头ID 0为后置、1为前置,不同厂商机型的摄像头ID分配规则不统一,硬写会在大量机型上适配失败。 - 第二步:搭建同屏预览容器
布局中放两个独立的TextureView(性能优于SurfaceView,做帧变换更灵活),按你想要的展示效果分配位置:比如左右分屏各占一半、或者后置全屏+前置小窗悬浮,提前给两个控件设置匹配摄像头输出比例的宽高,避免预览画面拉伸变形。 - 第三步:搭建单路合成录制通道
这是最终只生成单个视频文件的核心:不要给前后摄像头分别绑定录制输入Surface,而是先创建和目标输出视频分辨率一致的离屏合成Surface,优先用OpenGL ES实现合成逻辑(Canvas合成性能差,高分辨率录制容易掉帧):把前后摄像头输出的每一帧纹理,按你布局里的位置、缩放比例、旋转角度(前置帧记得做水平镜像,符合用户日常使用前置的视觉习惯)绘制到同一个合成Surface上,再把这个合成Surface作为唯一输入源绑定给MediaRecorder。注意:如果需要同时录环境音,直接给MediaRecorder绑定音频源即可,音轨会自动封装到同一个视频文件里,不需要额外做音频合成。
- 第四步:创建并发摄像头捕获会话
用前面筛选到的前后摄ID组合创建捕获会话,会话配置里要把三个Surface加进去:两个预览控件对应的Surface、合成通道的输入Surface。给前后摄像头分别创建独立的CaptureRequest,请求类型设为TEMPLATE_PREVIEW,把对应位置的预览Surface、合成Surface都加到请求的输出目标列表中,保证两路摄像头的帧同时输出到预览层和合成层。 - 第五步:配置录制参数与输出
给MediaRecorder配置常规录制参数即可:输出格式选MPEG_4,视频编码选H264,音频编码选AAC,码率根据实际输出分辨率匹配(比如1080P分辨率设8-12Mbps,720P设4-6Mbps即可)。输出路径通过MediaStore接口直接写入系统公共视频目录,录制停止后调用MediaScannerConnection扫描输出文件,文件就会直接显示在系统图库中,全程只会生成一个独立的MP4文件。 - 第六步:资源释放管控
录制结束、页面销毁时,严格按顺序释放资源:先停止MediaRecorder,再关闭两个摄像头的捕获会话,最后释放打开的CameraDevice实例,漏释放会导致后续摄像头调用出现资源占用报错。
常见适配坑点
- 双摄并发模式下,单个摄像头支持的最大输出分辨率会比单开模式低,配置参数前一定要通过
getCameraCharacteristics查询并发场景下支持的输出尺寸列表,不要硬设4K等高分辨率,否则会直接导致捕获会话创建失败 - 部分机型在双摄并发时不支持30帧以上的帧率输出,不要硬绑60帧参数,优先从支持的帧率范围里选稳定值
- 如果需要做前后摄画面的圆角、边框等效果,直接在OpenGL合成阶段处理即可,不需要额外加布局层,避免增加性能开销
内容的提问来源于stack exchange,提问作者Pranit Shirsath
相关产品推荐
相关产品推荐

