Kotlin

Iniciando a captura: integração ao ciclo de vida do Publisher

  1. Como usar o capturador personalizado no Publisher

Onde quer que você crie sua editora (por exemplo, em MainActivity ou um gerenciador de chamadas dedicado), você passa uma instância do capturador personalizado para o Publisher.Builder:

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

Depois de criar um Publisher e forneça seu MirrorVideoCapturer Por exemplo: todo o vídeo transmitido por esse editor vem do seu capturador personalizado, em vez do capturador padrão.

  1. Depois de criar um Publisher com seu capturador personalizado e chamar session.publish(editor), o SDK fará uma chamada para o capturador do usuário 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
    }

O fluxo geral é o seguinte:

Verificar o estado da câmera: certifique-se de que o recurso de câmera subjacente esteja inicializado e pronto. Iniciar ciclo de captura: Abra a câmera (caso ainda não esteja aberta). Inicie uma solicitação de captura repetitiva (Camera2) ou inicie o pipeline de visualização (CameraX / Camera1). Lidar com casos do tipo “ainda não está pronto”: Se a configuração da câmera ainda estiver em andamento, adie o início efetivo até que a câmera seja aberta (isso evita condições de corrida). Tratamento de erros: Se houver algum problema grave (por exemplo, se a função startCapture for chamada muito cedo), deve-se lançar ou sinalizar um erro.

Após a função startCapture() ser executada com sucesso, seu capturador começa a receber quadros da câmera e a enviá-los para o SDK.