2010-05-18 67 views
6

根據Android SDK MediaRecorder.setCamera可用於回收現有攝像頭實例以進行視頻拍攝和預覽,而無需重新設置預覽。我無法找到任何示例,並且我所有的嘗試都是徒勞的:我得到錯誤的狀態異常,或者MediaRecorder.prepare失敗。如何使用setCamera(MediaRecorder)?

  • 有誰知道這種方法是否可用?
  • 那我該怎麼用呢?
  • Web上有任何樣本?

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

回答

-3

我發現了2個鏈接可能對你有用。 Android Camera git repoa MediaRecorder example

+0

我可以問這個答案被降低的原因嗎?考慮到我回答了這個問題,Android相機仍然是這個問題的正確參考。這只是一個懶惰的人尋找他們需要什麼的問題嗎?或者你更喜歡評論而不是迴應? – gamadeus 2012-01-20 02:27:40

+0

只需提供鏈接,特別是在stackexchange網站之外的鏈接,沒有額外的解釋並不是回答問題的最佳實踐。如果鏈接被破壞,你的回答將毫無用處(實際上你的鏈接已經被破壞,請檢查)。 – melvynkim 2013-03-15 20:38:59

6

Android Camera應用程序源代碼提供了最好的示例。經過一番調查後,我發現recorder.setCamera(camera)應該在實例化MediaRecorder後立即調用,或者至少在應用任何設置之前調用。在調用setCamera()之前應用任何設置(setVideoSource()等)會導致錯誤。

1

在創建mediarecorder的實例後,您是否嘗試過使用以下函數?

//解鎖相機以允許其他進程訪問它。

mCameraDevice.unlock();

//設置一個攝像頭用於錄製。使用此功能可在預覽和/或拍攝模式之間快速切換,而無需拆卸相機對象。

mMediaRecorder.setCamera(mCameraDevice);

0

我有我的MediaRecorder啓動:

MediaRecorder mediaRecorder = null; 

,但不喜歡這樣的:

MediaRecorder mediaRecorder = new MediaRecorder(); 

(headbang)哈哈..現在我的問題是一個預覽kalydascope ..時間搜索interwebs ..

希望這可以幫助某人。

6

我遇到了同樣的問題,並發現它如何工作。有些事情必須正確完成。首先你應該檢查android doku link的狀態圖表。

命令的工作順序如下。

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" 

完整的例子可以發現here

1

我從@lyron得到了提示。

第一個,打開前置攝像頭。

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

我需要像上面那樣使用前置攝像頭。

不要忘記解鎖相機。

如果你不這樣做,你會在下面看到錯誤。

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) 

,設置攝像機的設置和其他人一樣在此之前。

   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 setCamera()應該在prepare()之前調用。

但我在看我的代碼正在工作。