Kotlin

Captura inicial: cableado en el ciclo de vida de Publisher

  1. Uso del capturador personalizado en Publisher

Dondequiera que cree su editor (por ejemplo, en MainActivity o un gestor de llamadas dedicado), se pasa una instancia del capturador personalizado a la función Publisher.Builder:

    publisher = Publisher.Builder(this@MainActivity)
                .capturer(
                    MirrorVideoCapturer(
                        this@MainActivity,
                        Publisher.CameraCaptureResolution.HIGH,
                        Publisher.CameraCaptureFrameRate.FPS_30
                    )
                )
                .build()

Después de construir un Publisher y proporcione su MirrorVideoCapturer todos los vídeos salientes de ese editor proceden de su capturadora personalizada en lugar de la predeterminada.

  1. Una vez que cree un Publisher con su capturador personalizado y llame a session.publish(editor), el SDK llamará al capturador de su startCapture() método.
    @Synchronized
    override fun startCapture(): Int {
        Log.d(TAG, "startCapture() enter (cameraState: $cameraState)")
        val resume = Runnable {
            initCamera()
            scheduleStartCapture()
        }
        when (cameraState) {
            CameraState.CLOSING -> executeAfterClosed = resume
            CameraState.CLOSED -> resume.run()
            else -> scheduleStartCapture()
        }
        Log.d(TAG, "startCapture() exit")
        return 0
    }

El flujo de alto nivel es el siguiente:

Comprobar el estado de la cámaraAsegúrate de que el recurso de cámara subyacente está inicializado y listo. Iniciar bucle de captura: Abra la cámara (si no está ya abierta). Inicie una solicitud de captura repetida (Camera2) o inicie el canal de previsualización (CameraX / Camera1). Gestionar los casos de "todavía no está listo: Si la configuración de la cámara aún está en curso, espere a que se abra la cámara para iniciar el proceso (evita condiciones de carrera). Tratamiento de errores: Si algo está fundamentalmente mal (por ejemplo, startCapture se llama demasiado pronto), lanza o señala un error.

Después de que startCapture() tenga éxito, tu capturador empieza a recibir fotogramas de la cámara y a enviarlos al SDK.