📹

Flutterのcamera pluginを使ってiosで動画を撮ると最初に真っ黒のフレームが生成される

2023/02/06に公開

Flutterの camera 0.10.3 を使ってiosで動画を撮ると最初のほうに真っ黒のフレームが生成されてしまいました。

動画を撮影したあとサムネイル用に1フレーム目を画像として保存するプログラムを書いたときに真っ暗な画像が保存されてしまいこの問題に気づきました。

おそらく最初のvideo bufferよりも早いタイムスタンプでaudio bufferが最初に到着した場合、真っ暗なフレームが保存されるようです。

なので enableAudio: false を指定してオーディオの録音を無効にすると解消しました。

録画も録音も行いたい場合にはGithubのissueに下記のような回避策が紹介されています。

 if (firstTake && Platform.isIOS) {
      // Flag for first take
      firstTake = false;
      try {
        await cameraController.startVideoRecording();
        await Future.delayed(const Duration(milliseconds: 300));
        final file = await cameraController.stopVideoRecording();
        File(file.path).deleteSync();
        await cameraController.startVideoRecording();
      } on CameraException catch (e) {
        log(e.description!);
      }
      return;
    }

https://github.com/flutter/flutter/issues/57831#issuecomment-1113125562

また、これは camera plugin の ObjectiveC のコードの問題なので、ほかのplugin、camerawesome を使ったときは問題ありませんでした。

https://pub.dev/packages/camerawesome

Discussion