1

私は現在、Twilio Video API を使用してアプリを開発しています: https://www.twilio.com/video まだベータ版ですが、ほとんどの部分でうまく機能します。そして、私の問題を解決する方法もあるかもしれません。

私のアプリでは、カメラを切り替えて、背面カメラのライトをオンにする必要があります。1 つ目は Twilio で簡単に実行できますが、2 つ目はカメラ ライトを制御するカメラ オブジェクトがありません。カメラオブジェクトを取得する方法はありますか? または、自分でカメラ オブジェクトを作成して、それを Twilio に渡すことはできますか? または、ライトをオンにする別の方法はありますか?

カメラプレビュー用の私のコード。例のように、 を使用しCameraCapturerてカメラのプレビューをビューに取り込みます。

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

そしてプレビュー:

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

3 に答える 3

1

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() を呼び出す場所でそのメソッドを呼び出します。

このソリューションは当面はうまくいくはずですが、将来的には独自のカメラ オブジェクトを渡すことができるようになるため、当面の差し迫った機能でない場合は、更新されたバージョンを待ちます。

これがお役に立てば幸いです

于 2016-07-27T14:56:32.413 に答える
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);
    }
}
于 2017-10-04T14:19:39.557 に答える