2016-07-25 18 views
1

Ich entwickle gerade eine App mit der Twilio Video API: https://www.twilio.com/video Es ist immer noch in der Beta, funktioniert aber in den meisten Fällen gut. Und vielleicht gibt es auch einen Weg, mein Problem zu lösen.Android Twilio Video - get Kamera Stream

Für meine App muss ich die Kamera wechseln und das Licht der Rückfahrkamera einschalten. Der erste ist leicht mit Twilio zu machen, aber für den zweiten habe ich kein Kameraobjekt, um das Kameralicht zu steuern. Gibt es eine Möglichkeit, das Kameraobjekt zu bekommen? Oder kann ich das Kameraobjekt selbst erstellen und es dann an Twilio weitergeben? Oder gibt es einen anderen Ansatz, um das Licht einzuschalten?

Mein Code für die Kameravorschau. Wie in den Beispielen verwende ich die CameraCapturer die Kameravorschau in eine Ansicht zu erhalten:

cameraCapturer = CameraCapturer.create(MyActivity.this, CameraCapturer.CameraSource.CAMERA_SOURCE_FRONT_CAMERA, capturerErrorListener()); 
startPreview(); 

und die Vorschau:

private void startPreview() { 
    if (cameraCapturer != null) { 
     cameraCapturer.startPreview(previewFrameLayout); 
    } 
} 

Antwort

1

Twilio Entwickler Evangelist hier. Sie haben Recht, und die aktuelle Version des SDK ermöglicht es Ihnen nicht, den Camera Capturer so zu steuern, wie Sie könnten, wenn Sie das Kameraobjekt selbst erstellt haben.

Wir sind uns dessen jedoch bewusst und arbeiten an einer neuen Version, wo Sie genau das tun können.

Vorläufig würde ich vorschlagen, immer noch manuell ein eigenes Kameraobjekt zu erstellen, nur damit Sie die Hintergrundbeleuchtung einschalten können, und ich denke, solange Sie keine Vorschau darauf aufrufen, sollten Sie nicht enden mit einem Konflikt.

Ich könnte mir vorstellen, dass so etwas (ungetestet) funktionieren würde.

private void turnOnFlash() { 
    Camera camera = Camera.open(); 
    Camera.Parameters params = camera.getParameters(); 
    params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
    camera.setParameters(params); 
} 

Fügen Sie diese auch zu Ihrem AndroidManifest hinzu.

<permission android:name="android.permission.FLASHLIGHT" 
     android:permissionGroup="android.permission-group.HARDWARE_CONTROLS" 
     android:protectionLevel="normal" /> 

Und dann würden Sie diese Methode aufrufen, wo Sie startPreview() aufrufen.

Diese Lösungen sollten Sie vorerst in Schwung bringen, aber Sie werden in Zukunft Ihr eigenes Kameraobjekt weitergeben können. Wenn das vorerst keine dringende Funktion ist, würde ich dann auf die aktualisierte Version warten .

Hoffnung, dies hilft Ihnen

+0

Vielen Dank, dies funktioniert, wenn Sie vor dem Starten des CameraCapturer aufgerufen werden. Leider muss ich in meinem Szenario das Licht während des Videoanrufs ein- und ausschalten (Befehl über Websocket-Verbindung umschalten). Das Anhalten und Neustarten der Vorschau wäre in Ordnung, aber im Moment hält der CameraCapturer die Kamera auf Pause und ich bekomme eine 'java.lang.RuntimeException: Verbindung zum Kamera-Service fehlgeschlagen', wenn ich die Kamera selbst besorge – gtRfnkN

0

Sie sollten diese erstellen:

private boolean flashOn = false; 

private final CameraParameterUpdater flashToggler = new CameraParameterUpdater() { 
    @Override public void apply(Camera.Parameters parameters) { 
     if (parameters.getFlashMode() != null) { 
      String flashMode = flashOn ? 
        Camera.Parameters.FLASH_MODE_OFF : 
        Camera.Parameters.FLASH_MODE_TORCH; 
      parameters.setFlashMode(flashMode); 
      flashOn = !flashOn; 
     } else { 
      Toast.makeText(*context*, 
        R.string.flash_not_supported, 
        Toast.LENGTH_LONG).show(); 
     } 
    } 
}; 

Setzen Sie diese und die Func unten in einer Klasse, wo Sie einen Zugang zum CameraCapturerCompat (Name von einem Twilio Beispiel) haben Objekt

public void setFlashOn(boolean state) { 
    flashOn = !state; 

    cameraCapturerCompat.updateCameraParameters(flashToggler); 
} 

und dann auf CameraCapturerCompat Klasse:

public void updateCameraParameters(CameraParameterUpdater flashToggler) { 
    if (usingCamera1()) { 
     camera1Capturer.updateCameraParameters(flashToggler); 
    } 
}