2016-07-19 2 views
2

Meistens möchte ich wissen, ob es einen grundsätzlichen Konflikt gibt, dass ich die gleiche Ressource nicht mit der Bibliothek teilen kann, wenn ja, muss ich einen anderen Ansatz wählen.Affdex Android SDK - Speichern und verwenden CameraDetector

Mein Ziel ist es, eine niedrige Qualität Video mit den Metadaten des Detektors gleichzeitig gespeichert zu haben, so dass ich einige Nachbearbeitung und Slicing ohne große Verzögerung tun kann.

Basierend auf dem CameraDetectorDemo - camera detector

Ich habe eine MediaRecorder wurde initialisiert, aber es spart einen schwarzen Bildschirm, wenn ich es vor dem Detektor zu starten, und es stürzt beim Start (mit Code -19), wenn ich es starten nach dem Detektor. Der Detektor bringt die Vorschau an, vielleicht hat er damit zu tun.

Ich habe einige Schaltflächen um diese Funktionen zu steuern:

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(); 
} 

Antwort

1

Die CameraDetector des Affdex SDK Zugriff auf die Kamera braucht, um seine Bilder in der Vorschau zu erhalten und sie zu verarbeiten, so das wird nicht funktionieren, wenn die MediaRecorder Kontrolle hat von die Kamera.

Wahrscheinlich ist es am besten, Vorschaubilder von der Kamera zu nehmen, sie einem Affdex FrameDetector zur Verarbeitung zuzuführen und sie auch über einen MediaCodec und MediaMuxer in eine Videodatei zu speichern, obwohl ich das nicht ausprobiert habe.

+0

Hm, ich frage mich, ob ich den Mediagerekorder so einstellen kann, dass er die gleiche Oberfläche wie der CameraDetector verwendet und davon aufnimmt? – exrhizo

+0

Ich denke nicht, ich denke, wenn MediaRecorder mit der Aufnahme beginnt, übernimmt es die Kontrolle über die Kamera, so dass der CameraDetector nach diesem Punkt keine Vorschaubilder mehr bekommt. –

Verwandte Themen