Affdex Android SDK - Simpan dan gunakan CameraDetector

Sebagian besar saya ingin tahu apakah ada konflik mendasar karena saya tidak dapat berbagi sumber daya yang sama dengan perpustakaan, jika demikian, saya perlu mengambil pendekatan yang berbeda.

Sasaran saya adalah memiliki video berkualitas rendah dengan data meta detektor yang disimpan pada saat yang sama, sehingga saya dapat melakukan beberapa pemrosesan pasca dan pemotongan tanpa banyak penundaan.

Berdasarkan CameraDetectorDemo - detektor kamera

Saya telah menginisialisasi MediaRecorder, tetapi ini menyimpan layar hitam jika saya memulainya sebelum detektor, dan crash saat mulai (dengan kode -19) jika saya memulainya setelah detektor. Detektor melampirkan pratinjau, mungkin ada hubungannya dengan itu.

Saya menambahkan beberapa tombol untuk mengontrol fungsi-fungsi ini:

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 sumber


Jawaban (1)


CameraDetector SDK Affdex memerlukan akses ke kamera untuk mendapatkan bingkai pratinjau dan memprosesnya, jadi itu tidak akan berfungsi jika MediaRecorder memiliki kendali atas kamera.

Mungkin pilihan terbaik Anda adalah mengambil bingkai pratinjau dari kamera, memasukkannya ke Affdex FrameDetector untuk diproses, dan juga menyimpannya ke file video melalui MediaCodec dan MediaMuxer, meskipun saya belum mencobanya.

person Andy Dennie    schedule 19.07.2016
comment
Hm, saya ingin tahu apakah saya dapat mengatur perekam media agar menggunakan permukaan yang sama dengan CameraDetector dan merekam dari sana? - person exrhizo; 20.07.2016
comment
Saya rasa tidak, seingat saya, menurut saya ketika MediaRecorder mulai merekam, ia mengambil kendali kamera, jadi CameraDetector tidak akan mendapatkan bingkai pratinjau setelah titik itu. - person Andy Dennie; 20.07.2016