Kotlin

キャプチャの開始:パブリッシャーのライフサイクルへの配線

  1. パブリッシャーでのカスタムキャプチャーの使用

パブリッシャーを作成する場所(例えば MainActivity または専用のコールマネージャー)に、カスタムキャプチャーのインスタンスを渡す。 Publisher.Builder:

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

を構築した後 Publisher そして、あなたの MirrorVideoCapturer インスタンス - そのパブリッシャーのすべての送信ビデオは、デフォルトのキャプチャではなく、カスタムキャプチャから送信されます。

  1. カスタムキャプチャを使用してパブリッシャーを作成し、以下を呼び出します。 session.publish(パブリッシャー)、SDKはあなたのキャプチャーの startCapture() メソッドを使用する。
    @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
    }

大まかな流れは以下の通り:

カメラの状態をチェックする基礎となるカメラリソースが初期化され準備ができていることを確認します。 キャプチャ・ループの開始: カメラを開きます(まだ開いていない場合)。 繰り返しキャプチャ要求(Camera2)を開始するか、プレビューパイプライン(CameraX / Camera1)を開始します。 まだ準備ができていない」ケースを処理する: カメラのセットアップがまだ進行中の場合は、カメラが開くまで実際の開始を待ちます(競合状態を回避)。 エラー処理: 何か根本的に間違っている場合(startCaptureの呼び出しが早すぎるなど)、エラーを投げるかシグナルを送る。

startCapture()が成功すると、キャプチャーはカメラフレームの受信を開始し、SDKにプッシュします。