Android Twilio视频 - 获取相机流

时间:2016-07-25 18:16:54

标签: android video android-camera twilio twilio-api

我目前正在使用Twilio Video API开发应用:https://www.twilio.com/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);
    }
}

3 个答案:

答案 0 :(得分:1)

Twilio开发者传播者在这里。您是对的,如果您刚刚自己创建了相机对象,则当前版本的SDK不允许您控制Camera Capturer。

我们已经意识到这一点,并且正在开发一个新版本,你可以做到这一点。

目前我建议您尝试手动创建自己的相机对象,这样就可以打开背光,而且我认为只要您不打电话预览,就不应该&#39 ; t结束了冲突。

我会想象这样的事情(未经测试)可行。

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()的方法。

这个解决方案应该让你暂时离开,但是将来你可以通过你自己的相机对象,所以如果暂时不是一个紧迫的功能,我会等待更新版本。

希望这有助于你

答案 1 :(得分: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();
        }
    }
};

在可以访问CameraCapturerCompat(来自Twilio示例的名称)对象的类中设置此和下面的func

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

    cameraCapturerCompat.updateCameraParameters(flashToggler);
}

然后在你的CameraCapturerCompat类上:

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

答案 2 :(得分:0)

Twilio的Github页面上现在有一个官方样本:exampleAdvancedCameraCapturer

您可以在AdvancedCameraCapturerActivity.java

中查看切换的工作原理