플러터 Camera 플러그인에서 ImageStream 재시작시, 이전 프레임이 남아있고 그 프레임부터 시작되는 이슈
Camera Plugin
https://pub.dev/packages/camera
camera | Flutter package
A Flutter plugin for controlling the camera. Supports previewing the camera feed, capturing images and video, and streaming image buffers to Dart.
pub.dev
환경
flutter: 3.32.7
camera: ^0.10.0+1
android: 10 ~ 15
문제
controller.startImageStream -> stopImageStream -> startImageStream 할 때,
start 시점에 최신 프레임이 아니라 stop 이전의 프레임이 하나 남아있다.
해결
https://github.com/flutter/flutter/issues/115925?utm_source=chatgpt.com
[camera] StartImageStream after stopImageStream returns old imageData. · Issue #115925 · flutter/flutter
Description ImageStream returns old imageData when imageStream is started after stopImageStream call. This is causing barcode scanner to find the same barcode twice even though user is not pointing...
github.com
이전 프레임이 하나 남아있는 것도 그렇고,
해당 이슈 논의를 보면, 프레임 버퍼와 브로커 사이 타이밍에 빈틈이 있는 듯 하다.
그래서 근본적인 해결은 아니고,
Lexical Closure 특성으로 Wrapper 함수 내에서 skipped 변수를 유지하며,
startImageStream 이후 몇 프레임을 건너뛰는 방식으로 해결한다.
Future<void> startSkipImageStream({
required CameraController controller,
required void Function(CameraImage image) listener,
int skipFrameCount = 1,
}) async {
int skipped = 0;
await controller.startImageStream((image) {
if (skipped < skipFrameCount) {
skipped++;
return;
}
listener(image);
});
}
'flutter' 카테고리의 다른 글
| Flutter FFI Plugin Project (0) | 2025.11.26 |
|---|---|
| Flutter ML Kit FaceMesh 실시간 얼굴 인식 예제 (0) | 2025.10.24 |
| Flutter Camera Preview Blank - Android10 (0) | 2025.08.04 |
| Flutter C++ OpenCV로 이미지 처리하기 + 16KB Memory Page Size (0) | 2025.04.08 |