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

Flutter iOS端实现200毫秒间隔Burst Mode连拍的方案咨询

单张拍摄耗时1秒的核心原因

通用Camera Plugin封装的takePicture()接口默认走完整拍摄链路:触发3A(自动对焦/自动曝光/自动白平衡)重算、全分辨率图像采样、平台端内置后处理(HDR/美颜/畸变校正)、编码JPEG、写入临时存储、跨线程/跨平台通道返回数据,整套流程空载耗时就在800ms-1200ms区间,本身就不支持高频连拍,不是参数配置错误导致的。

高频连拍实现方案(按落地优先级排序)
  • 预览帧截帧方案(性能最高,可稳定实现200ms以内间隔)
    完全弃用takePicture()接口,直接复用相机预览链路输出帧:
    1. 启动相机时将预览分辨率设置为你需要的连拍输出分辨率(例如需要1080p成片就把预览尺寸设为1920*1080,不要用默认的低分辨率预览)
    2. 连拍开始前提前调用接口锁定AE/AF/AWB,避免连拍过程中触发3A重算导致帧间隔波动
    3. 注册预览帧回调,每收到一帧Image数据就丢到子线程做格式转换(转JPEG/位图),暂存到内存队列,不要阻塞相机帧输出线程
    4. 连拍结束后再统一把内存队列里的图片写入本地存储
      该方案可稳定跑到30fps(约33ms每帧),完全覆盖200ms间隔的需求。
  • 原生连拍API调用方案(画质最优)
    如果跨平台插件没有暴露预览帧操作能力,直接通过平台通道调用系统原生相机的连拍能力,避免插件封装带来的额外开销:
    • Android端:创建CameraCaptureSession时绑定ImageReader作为输出目标,用setRepeatingRequest发送连续捕获请求,原生层可实现15-30fps的全尺寸图像输出
    • iOS端:用AVCaptureVideoDataOutput做帧输出,关闭高分辨率捕获开关和不必要的后处理,帧输出间隔可稳定压到100ms以内
  • 原有接口优化方案(改造成本最低,性能上限有限)
    如果必须复用现有takePicture()逻辑,可通过以下优化把单张拍摄耗时压到400-500ms,但无法稳定达到200ms间隔要求:
    • 拍摄前提前锁定3A参数,禁止每次拍摄触发3A重算
    • 将拍摄分辨率降到实际业务需要的尺寸,不要使用传感器默认最高输出像素
    • 关闭HDR、自动畸变校正、滤镜等所有内置后处理逻辑
    • 拍摄回调中不要同步执行文件写入、图像缩放等重操作,先把字节数据暂存内存,拍摄结束后再异步处理
注意事项

所有图像格式转换、缩放、文件写入操作必须放到独立后台线程执行,绝对不能阻塞相机回调线程或者UI线程,否则会出现严重掉帧、卡顿甚至应用崩溃。
连拍过程中如果需要展示实时缩略图,不要直接对全尺寸帧做缩放,单独绑定一个低分辨率的输出Surface给缩略图模块,减少不必要的性能消耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 09:03:33