2016-07-25 8 views
1

В настоящее время я разрабатываю приложение с использованием API Twilio Video: https://www.twilio.com/video Он по-прежнему находится в бета-версии, но отлично работает по большей части. И, возможно, есть также способ решить мою проблему.Android Twilio Video - получить поток камеры

Для моего приложения мне нужно переключить камеру и включить свет задней камеры. Первый из них легко выполняется с Twilio, но для второго у меня нет объекта камеры для управления светом камеры. Есть ли способ получить объект камеры? Или я могу сам создать объект камеры, а затем передать его Twilio? Или есть другой подход, чтобы включить свет?

Мой код для предварительного просмотра камеры. Как и в примерах я использую CameraCapturer, чтобы получить предварительный просмотр камеры в вид:

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

и предварительный просмотр:

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

ответ

1

Twilio Developer евангелист здесь. Вы правы, и текущая версия SDK не позволяет вам управлять Camera Capturer, как вы могли бы, если бы вы сами создали объект камеры.

Мы знаем об этом, хотя и работаем над новой версией, где вы сможете это сделать.

В настоящее время я предлагаю попробовать создать свой собственный объект камеры вручную, чтобы вы могли включить подсветку, и я думаю, что до тех пор, пока вы не вызываете предварительный просмотр, вы не должны заканчивать с конфликтом.

Я бы предположил, что что-то вроде этого (непроверено) будет работать.

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

Также добавьте это в свой AndroidManifest.

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

А затем вы бы назвали этот метод, когда вы вызываете startPreview().

В настоящее время эти решения должны вас устраивать, но вы сможете передать свой собственный объект камеры в будущем, поэтому, если это пока не актуально, я бы подождал обновленную версию ,

Надеется, что это помогает вам

+0

Спасибо, это работает при вызове перед запуском CameraCapturer. К сожалению, в моем сценарии я должен включать и выключать свет во время видеовызова (переключение команды через соединение через веб-соединение). Приостановка и перезапуск предварительного просмотра будет в порядке, но сейчас CameraCapturer удерживает камеру на паузе, и я получаю «java.lang.RuntimeException: Fail to connect to camera service», когда сам камера – gtRfnkN

0

Вы должны создать этот один:

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(); 
     } 
    } 
}; 

Установите и Func ниже в классе, где у вас есть доступ к CameraCapturerCompat (имя из примера Twilio) объекта

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

    cameraCapturerCompat.updateCameraParameters(flashToggler); 
} 

, а затем на классе CameraCapturerCompat:

public void updateCameraParameters(CameraParameterUpdater flashToggler) { 
    if (usingCamera1()) { 
     camera1Capturer.updateCameraParameters(flashToggler); 
    } 
} 
Смежные вопросы