2010-05-18 4 views
6

Gemäß Android SDK kann MediaRecorder.setCamera verwendet werden, um die vorhandene Kamera-Instanz für die Videoaufnahme und -vorschau zu recyceln, ohne die Vorschau zurückzusetzen. Ich konnte keine Probe finden, und alle meine Versuche waren zwecklos: Ich bekomme entweder die falsche Ausnahme, oder MediaRecorder.prepare schlägt fehl.Wie benutzt man setCamera (MediaRecorder)?

  • Weiß jemand, ob diese Methode überhaupt verwendbar ist?
  • Wie kann ich es dann verwenden?
  • Alle verfügbaren Beispiele im Internet?

Zum Vergleich: http://developer.android.com/reference/android/media/MediaRecorder.html#setCamera(android.hardware.Camera)

Antwort

-3

fand ich 2 Links können Sie nützlich finden. Android Camera git repo und a MediaRecorder example

+0

Darf ich nach dem Grund fragen, warum diese Antwort herabgesetzt wurde? Wenn man bedenkt, dass ich auf diese Frage geantwortet habe, ist die Android-Kamera die richtige Referenz für diese Frage geblieben. Ist es nur eine Frage von jemandem, der faul ist, nach dem zu suchen, was er dort braucht? Oder hast du lieber einen Kommentar als eine Antwort? – gamadeus

+0

Das Bereitstellen der Links, insbesondere außerhalb der Stackexchange-Netzwerkwebsite, ohne zusätzliche Erklärungen ist nicht die beste Vorgehensweise bei der Beantwortung der Frage. Wenn die Verbindung unterbrochen ist, wird Ihre Antwort nutzlos sein (tatsächlich ist Ihr Link jetzt kaputt. Bitte überprüfen). – melvynkim

6

Die Android-Kamera App-Quelle bietet das beste Beispiel. Nach einigen Untersuchungen entdeckte ich, dass recorder.setCamera(camera) sofort nach Instanziierung der MediaRecorder aufgerufen werden sollte, oder zumindest bevor irgendwelche Einstellungen darauf angewendet werden. Das Anwenden von Einstellungen (setVideoSource() usw.) vor dem Aufruf von setCamera() führt zu einem Fehler.

1

Haben Sie nach dem Erstellen einer Instanz von mediarecorder versucht, die folgenden Funktionen zu verwenden?

// Entsperrt die Kamera, damit ein anderer Prozess darauf zugreifen kann.

mCameraDevice.unlock();

// Legt eine Kamera für die Aufnahme fest. Verwenden Sie diese Funktion, um schnell zwischen Vorschau- und // Capture-Modus umzuschalten, ohne dass das Kameraobjekt aufgebrochen wird.

mMediaRecorder.setCamera (mCameraDevice);

0

Ich hatte meine MediaRecorder begonnen:

MediaRecorder mediaRecorder = null; 

aber nicht so:

MediaRecorder mediaRecorder = new MediaRecorder(); 

(headbang) haha ​​.. jetzt ist mein Problem ein kalydascope für eine Vorschau .. Zeit suche die interwebs ..

hoffentlich hat das jemandem geholfen.

6

Ich stieß auf das gleiche Problem und fand heraus, wie es funktionieren kann. Manche Dinge müssen richtig gemacht werden. Zuerst sollten Sie das Statusdiagramm von der Android-Doku link überprüfen.

Eine funktionierende Reihenfolge der Befehle ist wie folgt.

mCamera = Camera.open(); 
rec = new MediaRecorder();        // state "Initial" 

mCamera.lock(); 
mCamera.unlock(); 

rec.setCamera(mCamera);         // state still "Initial" 
rec.setVideoSource(MediaRecorder.VideoSource.CAMERA); // state "Initialized" 
rec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); // state "DataSourceConfigured" 
rec.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 

rec.setPreviewDisplay(surfaceHolder.getSurface()); 

rec.setOutputFile(Environment.getExternalStorageDirectory() + "/test.mp4"); 

rec.prepare();           // state "Prepared" 
rec.start();            // state "Recording" 

// ... 

rec.stop();            // state "Initial" 

Ein vollständiges Beispiel kann here finden.

1

Ich habe einen Hinweis von @lyron bekommen.

Zuerst, öffnen Sie die Frontkamera.

int cameraId = -1; 
    int camNums = Camera.getNumberOfCameras(); 

    for(int i = 0 ; i < camNums ; i++) { 
     CameraInfo info = new CameraInfo(); 
     Camera.getCameraInfo(i, info); 
     if(info.facing == CameraInfo.CAMERA_FACING_FRONT) { 
      cameraId = i; 
      break; 
     } 
    } 
    mCamera = Camera.open(cameraId); 
    mCamera.unlock(); 

Ich muss die Frontkamera wie oben verwenden.

Und VERGESSEN SIE NICHT, um die Kamera zu entsperren.

Wenn nicht, sehen Sie unten Fehler.

E/MediaRecorder(15509): start failed: -19 
E/SampleVideoRecorder(15509): Exception : 
E/SampleVideoRecorder(15509): java.lang.RuntimeException: start failed. 
E/SampleVideoRecorder(15509): at android.media.MediaRecorder.start(Native Method) 

Zweite, stellen Sie die Kamera aus, bevor die anderen wie diese Einstellung.

   recorder = new MediaRecorder(); 
       recorder.setCamera(mCamera); // like this! 

       recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
       recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
       recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
       recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
       recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); 

       recorder.setVideoSize(2560, 1440); 
       recorder.setVideoFrameRate(30); 

       recorder.setPreviewDisplay(holder.getSurface()); 
       recorder.setOutputFile(s_dir); 

       try { 
        recorder.prepare(); 
        recorder.start(); 
       } catch(Exception e) { 
        Log.e("SampleVideoRecorder", "Exception : ", e); 

        recorder.release(); 
        recorder = null; 
       } 

Someone says dass setCamera() sollte vor (genannt werden vorbereitet).

Aber ich sehe meinen Code funktioniert.