>source

두 개의 캡처 세션을 사용하고 있습니다. 하나는 previewsession ()이며 두 번째는 recordingsession ()

private fun previewSession() {
    val surfaceTexture= textureView.surfaceTexture
    MAX_PREVIEW_HEIGHT= textureView.height
    MAX_PREVIEW_WIDTH= textureView.width
    surfaceTexture?.setDefaultBufferSize(MAX_PREVIEW_HEIGHT, MAX_PREVIEW_WIDTH)
    val surface= Surface(surfaceTexture)
    captureRequestBuilder= mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)
    captureRequestBuilder.addTarget(surface)
    mCameraDevice.createCaptureSession(
        listOf(surface),
        object : CameraCaptureSession.StateCallback() {
            override fun onConfigured(session: CameraCaptureSession) {
                if (session != null) {
                    captureSession= session
                    captureSession.setRepeatingRequest(
                        captureRequestBuilder.build(),
                        null,
                        null
                    )
                }
            }
            override fun onConfigureFailed(session: CameraCaptureSession) {
                showLog(TAG, "Failed to create CameraCaptureSession")
            }
        },
        mBackgroundHandler
    )
}

및 recordingsesion ()은 다음과 같습니다.

private fun recordSession() {
    setUpMediaRecorder()
    val surfaceTexture= textureView.surfaceTexture
    MAX_PREVIEW_HEIGHT= textureView.height
    MAX_PREVIEW_WIDTH= textureView.width
    surfaceTexture?.setDefaultBufferSize(MAX_PREVIEW_HEIGHT, MAX_PREVIEW_WIDTH)
    val textureSurface= Surface(surfaceTexture)
    val recordSurface= mediaRecorder.surface
    captureRequestBuilder= mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD)
    captureRequestBuilder.addTarget(textureSurface)
    captureRequestBuilder.addTarget(recordSurface)
    val surfaces= ArrayList<Surface>().apply {
        add(textureSurface)
        add(recordSurface)
    }
    mCameraDevice.createCaptureSession(
        surfaces,
        object : CameraCaptureSession.StateCallback() {
            override fun onConfigured(session: CameraCaptureSession) {
                captureSession= session
                captureSession.setRepeatingRequest(
                    captureRequestBuilder.build(),
                    null,
                    null
                )
                isRecording= true
                mediaRecorder.start()
            }
            override fun onConfigureFailed(session: CameraCaptureSession) {
                showLog(TAG, "Failed to create CameraRecordSession!")
            }
        },
        mBackgroundHandler
    )
}

및 toggleflash 메소드를 켜거나 끌 수 있습니다.

fun toggleFlashState(view: View) {
        if (isFlashOn) {
                captureRequestBuilder.set(
                    CaptureRequest.FLASH_MODE,
                    CaptureRequest.FLASH_MODE_OFF
                )
                captureSession.setRepeatingRequest(captureRequestBuilder.build(), null, null)
                isFlashOn= false
        } else {
                captureRequestBuilder.set(
                    CaptureRequest.FLASH_MODE,
                    CameraMetadata.FLASH_MODE_TORCH
                )
                captureSession.setRepeatingRequest(captureRequestBuilder.build(), null, null)
                isFlashOn= true
        }
}

문제는 플래시를 켜고 녹음을 시작하면 플래시가 꺼지고 있습니다. 플래시가 자동으로 꺼지지 않도록하는 방법을 어떻게 영구적으로 켜는가? ToggleFlash () 메서드를 호출하여 꺼야합니다.

문서에 따르면 자동 노출은 켜짐 또는 꺼져 있어야합니다. 그렇지 않으면 AutoExposure (AE)가 플래시 모드 설정보다 우선합니다.

W0rmH0le2021-06-23 00:56:31
  • 이전 javascript : 탬퍼 원숭이에서 물건의 색을 어떻게 바꿀 수 있습니까?
  • 다음 ios : "Untitled"Xcode 서명 인증서를 어떻게 삭제합니까?