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

Flutter中CameraController启动视频录制存在非固定延迟如何处理

解决方案

现有代码问题

  • 当前await _audioCache.play(_soundPath)仅等待蜂鸣音启动完成,而非播放结束,因此后续录制逻辑会提前触发
  • Vibration.vibrate默认是异步触发,不会阻塞后续逻辑执行
  • camera: ^0.8.1+7的startVideoRecording默认会在调用时才初始化视频编码、硬件相关资源,导致非固定延迟

优化方案

  1. 提前调用prepareForVideoRecording预初始化录制相关资源,消除启动时的硬件初始化延迟
  2. 监听音频播放完成事件,确保蜂鸣音完全结束后再触发录制
  3. 对齐振动时长与蜂鸣音时长,保证两者同步结束
// 可以在页面初始化、相机初始化完成后就预调用,提前准备录制资源
Future<void> initCameraResource() async {
  await _cameraController.prepareForVideoRecording();
}

Future _handleRecording() async {
  try {
    // 同时触发蜂鸣音和振动
    Vibration.vibrate(duration: 350);
    final player = await _audioCache.play(_soundPath);
    
    // 等待蜂鸣音播放完成
    await player.onPlayerCompletion.first;
    
    // 此时直接启动录制,已经提前预初始化过,延迟会降到最低
    await _cameraController.startVideoRecording();
  } catch (e) {
    rethrow;
  }
}

注意事项

  • 请确认你的蜂鸣音素材时长和振动的350ms对齐,如果蜂鸣音更长,把振动的duration调整为和蜂鸣音时长一致即可
  • 如果你的业务场景允许,也可以在蜂鸣音播放到最后100ms左右就提前调用startVideoRecording,抵消剩余的微小启动延迟,确保蜂鸣音结束的瞬间录制刚好启动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:48:03