Как использовать Android-камеру в фоновом режиме?

В настоящее время я разрабатываю приложение, которое должно записывать видео в фоновом режиме и обрабатывать его.

(Он должен получать данные предварительного просмотра в реальном времени в фоновом режиме и обрабатывать данные предварительного просмотра)

Однако для этого мне нужно использовать Camera и OpenCV как Service, и кажется, что невозможно использовать JavaCameraView в OpenCV и Android.Hardware.Camera без предварительного просмотра.

Вот мои вопросы.

  • Я слышал, что NativeCamera в OpenCV можно использовать для этой цели. Является ли это возможным? (Возможно, с примерами?)

  • Есть ли какой-нибудь метод, с помощью которого я могу использовать JavaCameraView (или аналогичный материал) для этой цели? В настоящее время я использую Galaxy S4.

  • Возможны ли какие-либо возможные обходные пути, если андроид не поддерживает такой метод? (Используя предварительный просмотр камеры без какого-либо поверхностного просмотра или обрабатывать данные камеры без предварительного просмотра)

  • (ДОПОЛНИТЕЛЬНО) Почему андроид не поддерживает такую ​​операцию? Это очень раздражает!

Спасибо, что ответили на вопрос.

Ответ 1

Да можно выполнить следующие шаги.

Создайте одно действие, которое запустит фоновое обслуживание на каком-либо событии, или вы также можете использовать диспетчер аварийных сигналов для запуска и остановки службы в соответствии с вашими требованиями.

См. ниже код, который поможет вам.

public boolean starMediaRecording(){
        Camera.Parameters params = mServiceCamera.getParameters();
        mServiceCamera.setParameters(params);
        Camera.Parameters p = mServiceCamera.getParameters();

        final List<Size> listSize = p.getSupportedPreviewSizes();
        Size mPreviewSize = listSize.get(2);
        p.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
        p.setPreviewFormat(PixelFormat.YCbCr_420_SP);
        mServiceCamera.setParameters(p);

        try {
            mServiceCamera.setPreviewDisplay(mSurfaceHolder);
            mServiceCamera.startPreview();
        }
        catch (IOException e) {
            Log.e(TAG, e.getMessage());
            e.printStackTrace();
        }

        mServiceCamera.unlock();

        mMediaRecorder = new MediaRecorder();
        mMediaRecorder.setCamera(mServiceCamera);
        mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
        mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
        mMediaRecorder.setOutputFile("/sdcard/filenamevideo.mp4");
        mMediaRecorder.setVideoFrameRate(30);
        mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height);
        mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());

        mMediaRecorder.prepare();
        mMediaRecorder.start(); 

        mRecordingStatus = true;

        return true;

}

public void stopMediaRecorder() {
    mServiceCamera.reconnect();

    mMediaRecorder.stop();
    mMediaRecorder.reset();

    mServiceCamera.stopPreview();
    mMediaRecorder.release();

    mServiceCamera.release();
    mServiceCamera = null;
    }
}

Ответ 2

Вы можете использовать сервис, чтобы запустить камеру в фоновом режиме. Вы можете обратиться к этому. Надеюсь, это поможет вам.