Android Twilio Video - 获取相机流
Android Twilio Video - get camera stream
我目前正在使用 Twilio 视频开发应用程序 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);
}
}
此处为 Twilio 开发人员布道师。你是对的,当前版本的 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() 的地方调用该方法。
这个解决方案应该可以让你暂时使用,但你将来可以传递你自己的相机对象,所以如果这暂时不是一个紧迫的功能,我会等待更新版本。
希望对您有所帮助
你应该创建这个:
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 示例的名称)对象的 class 中设置这个和下面的函数
public void setFlashOn(boolean state) {
flashOn = !state;
cameraCapturerCompat.updateCameraParameters(flashToggler);
}
然后在您的 CameraCapturerCompat class:
public void updateCameraParameters(CameraParameterUpdater flashToggler) {
if (usingCamera1()) {
camera1Capturer.updateCameraParameters(flashToggler);
}
}
现在在他们的 Github 页面上有来自 Twilio 的官方示例:exampleAdvancedCameraCapturer
中查看切换的工作原理
我目前正在使用 Twilio 视频开发应用程序 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);
}
}
此处为 Twilio 开发人员布道师。你是对的,当前版本的 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() 的地方调用该方法。
这个解决方案应该可以让你暂时使用,但你将来可以传递你自己的相机对象,所以如果这暂时不是一个紧迫的功能,我会等待更新版本。
希望对您有所帮助
你应该创建这个:
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 示例的名称)对象的 class 中设置这个和下面的函数
public void setFlashOn(boolean state) {
flashOn = !state;
cameraCapturerCompat.updateCameraParameters(flashToggler);
}
然后在您的 CameraCapturerCompat class:
public void updateCameraParameters(CameraParameterUpdater flashToggler) {
if (usingCamera1()) {
camera1Capturer.updateCameraParameters(flashToggler);
}
}
现在在他们的 Github 页面上有来自 Twilio 的官方示例:exampleAdvancedCameraCapturer
中查看切换的工作原理