Возможно ли иметь скрытую запись устройства камеры с ID0 и возможным потоком предварительного просмотра, а также ID 0 одновременно? - PullRequest
2 голосов
/ 17 мая 2019

Я создаю приложение, в котором у пользователя есть FAB, чтобы начать запись скрытого изображения с camera2 API и некоторые другие данные о местоположении - теперь у пользователя есть возможность открыть предварительный просмотр с помощью элемента из ящика навигации.Проблема заключается в том, что если я запускаю скрытую запись через FAB, а затем нажимаю, чтобы открыть предварительный просмотр, вызывается обратный вызов состояния onDisconnected из CameraDevice и скрытая запись отключается, поскольку CameraDevice с идентификатором 0 больше не доступен.

Мой код похож на пример Camera2Video от Google: https://github.com/googlesamples/android-Camera2Video

    private CameraDevice mCameraDevice;
    private CaptureRequest.Builder mPreviewBuilder;
    private CameraCaptureSession mPreviewSession;

    /**
     * A {@link Semaphore} to prevent the app from exiting before closing the camera.
     */
    private Semaphore mCameraOpenCloseLock = new Semaphore(1);

    /**
     * {@link CameraDevice.StateCallback} is called when {@link CameraDevice} changes its status.
     */
    private CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() {

        @Override
        public void onOpened(@NonNull CameraDevice cameraDevice) {
            mCameraDevice = cameraDevice;
            Log.d(TAG, "onOpened: ");
            File dir = new File(mNextVideoDirPath);
            if(dir.mkdirs()) {
                startRecordingVideo();
            }
            else {
                Toast.makeText(context,
                        "Error: Could not start recording. Directory for saved files could not be created", Toast.LENGTH_SHORT).show();
            }
            mCameraOpenCloseLock.release();
        }

        @Override
        public void onDisconnected(@NonNull CameraDevice cameraDevice) {
            mCameraOpenCloseLock.release();
            cameraDevice.close();
            mCameraDevice = null;
        }

        @Override
        public void onError(@NonNull CameraDevice cameraDevice, int error) {
            mCameraOpenCloseLock.release();
            cameraDevice.close();
            mCameraDevice = null;
        }
    };

Если я сделаю сначала предварительный просмотр, а затем начну скрытую запись, предварительный просмотр зависнет и начнется скрытая запись.

У меня есть Huawei P30 pro, и я попытался просто изменить идентификатор устройства камеры, но вместо фронтальной камеры происходит сбой.

Так что для некоторых случаев использования, таких как этот, или существует другой подход?разве это невозможно? ИЛИ как я могу предотвратить некоторые отключения?

ОБНОВЛЕНИЕ

Я нашел статью о нескольких потоках изна электронное устройство на среде от разработчиков Android https://medium.com/androiddevelopers/using-multiple-camera-streams-simultaneously-bf9488a29482

Может быть, я могу добавить эти цели, прежде чем делать вещи .. Примерно так: https://gist.github.com/owahltinez/f615e13bfc3497a0bd5d1427eae6c54f#file-using-multiple-camera-streams-01-kt

ОБНОВЛЕНИЕ КОНЕЦ

При необходимости я могу предоставить еще немного кода, но это больше похоже на пример из Google.

Спасибо за ваше время!

...