>

위대한 개발자. 화상 통화에 io.pristine.libjingle : 11139의 webRTC 라이브러리를 사용하고 있습니다. FLASHLIGHT를 켜고 싶습니다. FLASHLIGHT와 관련된 거의 모든 질문을 연구했습니다. FLASHLIGHT는 카메라의 기능이라는 것을 알았습니다. . 이제 라이브러리를 사용하고 있기 때문에 여기에 붙어있어 이미 열린 카메라 객체에 액세스 할 수 없습니다. 카메라가 webrtc 라이브러리에서 이미 사용되고 있기 때문에 카메라를 사용하지 않고 손전등을 켜는 방법은 무엇입니까? android 용 webrtc 용 libjingle의 카메라 객체에 액세스 할 수있는 다른 최신 라이브러리가 있습니까?

정말 어려운 도전이되도록 도와주세요.

안녕하세요 달마

  • 답변 # 1

    오늘 나는이 문제에 직면하고 있었고 해결책을 찾지 못했기 때문에 질문을 한 후에도 늦었지만 해결책을 공유하고 싶었습니다. 기본적으로 소스 수정 및 webrtc 라이브러리 컴파일 또는 더 쉬운 솔루션의 두 가지 옵션이 있습니다. 라이브러리의 기능을 약간 무시하십시오. Google의 저장소에서 바로 최신 사전 빌드 라이브러리를 사용하고 있으므로 libjingle 라이브러리가 약간 다를 수 있습니다.

    implementation 'org.webrtc:google-webrtc:1.0.28262'
    
    

    이제 코드 자체입니다. 패키지 org.webrtc 만들기  구현하거나 수정해야하는 패키지 전용 클래스 및 인터페이스에 액세스 할 수 있습니다.

    이것은 interface CameraSession 입니다 . 이 인터페이스의 인스턴스는 안드로이드 카메라에 대한 액세스를 처리합니다. 그래서 나는 class FlaslightCameraSession implements CameraSession 를 만들었습니다   class Camera1Session 에서 코드를 복사하여 붙여 넣기  다음과 같이 손전등을 켜거나 끄는 기능을 추가합니다.

       void setFlashlightActive(boolean isActive) {
            Camera.Parameters params = camera.getParameters();
            if (isActive) {
                params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            } else {
                params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
            }
            camera.setParameters(params);
        }
    
    

    다음 단계는 VideoCapturer 를 수정하는 것입니다   VideoFrame 를 얻는 데 사용 카메라의. 이를 위해 나는 단순히 class FlashlightCameraCapturer 를 만들었습니다.  webrtc의 class Camera1Capturer 를 확장함으로써  손전등을 제어하기 위해 간단한 수정을 추가했습니다.

       @Override
        protected void createCameraSession(CameraSession.CreateSessionCallback createSessionCallback, CameraSession.Events events, Context applicationContext, SurfaceTextureHelper surfaceTextureHelper, String cameraName, int width, int height, int framerate) {
            CameraSession.CreateSessionCallback myCallback = new CameraSession.CreateSessionCallback() {
                @Override
                public void onDone(CameraSession cameraSession) {
                    FlashlightCameraCapturer.this.cameraSession = (FlashlightCameraSession) cameraSession;
                    createSessionCallback.onDone(cameraSession);
                }
                @Override
                public void onFailure(CameraSession.FailureType failureType, String s) {
                    createSessionCallback.onFailure(failureType, s);
                }
            };
            FlashlightCameraSession.create(myCallback, events, captureToTexture, applicationContext, surfaceTextureHelper, Camera1Enumerator.getCameraIndex(cameraName), width, height, framerate);
        }
        public void turnOnFlashlight() {
            cameraSession.setFlashlightActive(true);
        }
        public void turnOffFlashlight() {
            cameraSession.setFlashlightActive(false);
        }
    
    

    최종 단계는 CameraEnumerator 를 수정하는 것입니다 . 특히 수정 된 캡처 기의 인스턴스를 만들려면 createCapturer 함수를 재정의해야합니다. 그래서 나는 class Camera1Enumerator 를 확장  이 기능을 다음과 같이 재정의하려면

       @Override
        public CameraVideoCapturer createCapturer(String deviceName, CameraVideoCapturer.CameraEventsHandler eventsHandler) {
            return new FlashlightCameraCapturer(deviceName, eventsHandler, true);
        }
    
    

    이제 수정 된 새로운 카메라 열거자를 사용하여 손전등을 제어 할 수있는 카메라 캡처 기 인스턴스를 얻을 수 있습니다.

    이것이 도움이되기를 바랍니다 :)

  • 이전 ruby on rails - 마지막 문자 발생시 문자열 분리
  • 다음 html5 - 자바 스크립트로 만든 이미지를 클립 보드에 복사