2016-07-25 91 views
1

我目前正在開發使用Twilio視頻API的應用程序:https://www.twilio.com/video 它仍處於測試階段,但大多數情況下效果很好。也許還有一種方法可以解決我的問題。Android Twilio視頻 - 獲取相機流

對於我的應用我需要切換相機並打開相機背面的光。第一個很容易用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開發者在這裏傳播者。您是對的,如果您剛剛創建相機對象,則當前版本的SDK不允許您像使用相機捕捉器那樣控制相機捕捉器。

我們都意識到這一點,雖然,在一個新的版本,你將能夠做到這一點的工作。

暫且我建議想還是創建自己的相機對象手動,所以您可以打開背光,我認爲,只要你不調用它的預覽,你應該不會結束髮生衝突。

我可以想象這樣的(未經測試)會工作。

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叫。不幸的是,在我的情況下,我必須在視頻通話期間打開和關閉指示燈(通過websocket連接切換命令)。暫停並重新啓動預覽會沒問題,但是現在CameraCapturer會讓相機暫停,並且在自己拿到相機時出現'java.lang.RuntimeException:無法連接到相機服務' – 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,你有(從Twilio例如名稱)到CameraCapturerCompat的訪問對象

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

    cameraCapturerCompat.updateCameraParameters(flashToggler); 
} 

,然後在你的CameraCapturerCompat類:

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