3

そのため、従来のカメラ API の使用から CameraX に移行しました。セットアップは非常に簡単でしたが、1 つの問題に気付きました。現在、カメラはプレビューの表示を開始するのに以前よりも長くはないにしても、ほぼ 2 倍かかるようです。私はgalaxy s7でテストしています。私のコードは次のようになります。

val previewConfig = PreviewConfig.Builder().apply {
    setTargetAspectRatio(Rational(1, 1))
    setTargetResolution(Size(binding.codeScannerView.width, binding.codeScannerView.height))
}.build()

val preview = Preview(previewConfig)

preview.setOnPreviewOutputUpdateListener { preview ->
    val parent = binding.codeScannerView.parent as ViewGroup
    parent.removeView(binding.codeScannerView)
    parent.addView(binding.codeScannerView, 0)
    binding.codeScannerView.surfaceTexture = preview.surfaceTexture
}

val analyzerConfig = ImageAnalysisConfig.Builder().apply {
    val analyzerThread = HandlerThread(
            "QrCodeReader").apply { start() }
    setCallbackHandler(Handler(analyzerThread.looper))
    setImageReaderMode(
            ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)
}.build()

val analyzerUseCase = ImageAnalysis(analyzerConfig).apply {
    analyzer = QrCodeAnalyzer(requireContext(), Handler(), { qrCode ->
        if (activity == null) {
            return@QrCodeAnalyzer
        }
        presenter.disableCameraPreview()
        presenter.updateTable(qrCode.toLowerCase().parseTableId(), isFromOrder, Screens.MENU_SCREEN)
    })
}

CameraX.bindToLifecycle(this, preview, analyzerUseCase)

より速く表示する方法についてのアイデアはありますか?

PS たまにプレビューでテアリングが見られることもあります

4

1 に答える 1

8

そのため、解決策を見つけるのにかなりの時間を費やしましたが、役に立ちませんでした。次のような(alpha04で)複数の問題に遭遇しました:

  • カメラのオン/オフを切り替えると、SIGSEGV がランダムにクラッシュする
  • Google のサンプル プロジェクトとコードラボを試してみましたが、テスト済みのデバイスでは 100% 動作しませんでした。
  • ある時点で、カメラがバックグラウンドで使用されているという通知を受け取りましたが、それはライフサイクルにバインドされており、ウィンドウが閉じられていたため、ユーザーに最後に見せたいものではありませんでした。
  • カメラの読み込みが実際に遅くなり、アナライザーをオフにしても FPS がひどいものになりました。
  • 解像度が可能な限り低くなり、一部のデバイスでプレビューがピクセル化される
  • 時々、プレビューが垂直方向に裂け始めました
  • アナライザー フレームはプレビューとはサイズが異なり、アスペクト比の問題がいくつかあり、解決するのにかなりの時間がかかりました。
  • それが機能するために必要なボイラープレートはまだかなりあります
  • エッジケースのドキュメントはほとんど存在しないため、ほとんどのものは試行錯誤です.

最終的に、他のライブラリを探し始めたところ、 https://github.com/natario1/CameraViewにたどり着きました。camerax よりもはるかに単純で、機能しているように見え、ロードが高速で、バックグラウンドでアナライザー ステップが実行されていても、2 倍から 3 倍高い FPS でプレビューをレンダリングします。これまでのところ、問題はありませんでした。

私は何かが欠けていたと強く信じていますが、CameraX を使用していて、おそらくそれを機能させる方法がある場合、最終的には今のところ価値がないように思われ、製品版がリリースされるまで待つことになるでしょう。もう一度試すまで。

于 2019-08-14T04:46:20.753 に答える