Affdex Android SDK - Сохраните и используйте CameraDetector

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

Моя цель — получить видео низкого качества с одновременным сохранением метаданных детектора, чтобы я мог выполнять некоторую постобработку и нарезку без особых задержек.

На основе CameraDetectorDemo - детектор камеры

Я инициализировал MediaRecorder, но он сохраняет черный экран, если я запускаю его до детектора, и вылетает при запуске (с кодом -19), если я запускаю его после детектора. Детектор прикрепляет превью, может быть из-за этого.

Я добавил несколько кнопок для управления этими функциями:

protected void cameraInit() {
    String state = Environment.getExternalStorageState();
    if (!Environment.MEDIA_MOUNTED.equals(state)) {
        Log.d(LOG_TAG, "Drive not mounted - cannot write video");
        return;
    }

    File file = new File(getExternalFilesDir(Environment.DIRECTORY_MOVIES), "demo.gp3");

    Log.d(LOG_TAG, String.format("Camera Initializing. Setting output to: %s", file.getAbsolutePath()));

    // Set sources
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

    // Set profile
    recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW));

    // Set output profile
    recorder.setOutputFile(file.getAbsolutePath());

    // Set preview output
    recorder.setPreviewDisplay(cameraPreview.getHolder().getSurface());



    try {
        this.recorder.prepare();
    } catch (IOException e) {
        Log.e(LOG_TAG, "IO exception on camera Initialization");
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // This is thrown if the previous calls are not called with the
        // proper order
        Log.e(LOG_TAG, "Failed to initialize things properly :(  ");
        e.printStackTrace();
    }
}

protected void cameraStart() {
    Log.d(LOG_TAG, "Camera Start");
    this.recorder.start();
}

protected void cameraStop() {
    Log.d(LOG_TAG, "Camera Stop");
    this.recorder.stop();
}

person exrhizo    schedule 19.07.2016    source источник


Ответы (1)


CameraDetector из Affdex SDK требуется доступ к камере, чтобы получать кадры предварительного просмотра и обрабатывать их, поэтому это не сработает, если MediaRecorder контролирует камеру.

Вероятно, вам лучше всего взять кадры предварительного просмотра с камеры, передать их в Affdex FrameDetector для обработки, а также сохранить их в видеофайл с помощью MediaCodec и MediaMuxer, хотя я этого не пробовал.

person Andy Dennie    schedule 19.07.2016
comment
Хм, интересно, могу ли я настроить медиарекордер на использование той же поверхности, что и CameraDetector, и записывать с нее? - person exrhizo; 20.07.2016
comment
Я так не думаю, насколько я помню, я думаю, что когда MediaRecorder начинает запись, он берет на себя управление камерой, поэтому CameraDetector не будет получать кадры предварительного просмотра после этого момента. - person Andy Dennie; 20.07.2016