下文将介绍 Camera 延时优化的几种方式,希望对你有所帮助:
前言: 需求起因是因为公司enheylig相机(300+ms) 对比 vhd相机(170ms) 本地预览延时存在 130ms 左右的延时差异
下图为优化前enheylig相机数据
数据准确性介绍 : 来源于人工本地手机秒表 以及本地预览数据 用另一手机录制 通过滑动取帧 逐帧对比 随机抽取几十帧所得均值数据 (300+ms)

下图为优化 后enheylig相机数据
数据准确性介绍 : 来源于人工本地手机秒表 以及本地预览数据 用另一手机录制 通过滑动取帧 逐帧对比 随机抽取几十帧所得均值数据 (170 ms 左右)

根据内部RTC到上层渲染延时可疑点 如下:
1. TextureView SurfaceView 渲染差异(经分析影响不大)
2. 内部低帧率补针逻辑耗时导致延时(经分析影响不大)
3. 内部rtc YUV数据处理导致 经分析 首帧处理时间在50ms左右 后续帧数据在5ms-20ms之间(经分析影响不大)

4. 相机捕获配置 ( 该参数影响 )
优化方案一 : 渲染View替换 效果不大
TextureView SurfaceView 对比效果可忽略
优化方案二 : 优化效果不明显
之前配置: TEMPLATE_RECORD 用于创建一个录像请求。相机会使用标准帧率,并设置录像级别的画质。适用于所有相机设备。
修改后配置 :
1. TEMPLATE_ZERO_SHUTTER_LAG : 用于创建一个零延迟拍照的请求。相机会尽可能的保证照片质量的同时不损失预览图像的帧率,3A(自动曝光、自动聚焦、自动白平衡)都为 auto 模式。只适用于支持 PRIVATE_REPROCESSING 和 YUV_REPROCESSING 的相机设备。
2.CONTROL_ENABLE_ZSL 开启零延迟 模式 该模式最低支持版本为 当前版本 >=Android API 26
优化方案三 : 祛除各类捕获参数
1. CONTROL_AE_TARGET_FPS_RANGE 祛除 该设置 效果提升明显
//设置曝光范围
builder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,
new Range(5, 25));
2. CONTROL_AE_MODE祛除 该设置 效果提升明显
//开启自动曝光模式
builder.set( CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
3.CONTROL_AE_LOCK 祛除 该设置 无影响
//自动曝光(AE)现在是否锁定为其最新计算值 否
builder.set(CaptureRequest.CONTROL_AE_LOCK, false);
网友评论