根據Android SDK MediaRecorder.setCamera可用於回收現有攝像頭實例以進行視頻拍攝和預覽,而無需重新設置預覽。我無法找到任何示例,並且我所有的嘗試都是徒勞的:我得到錯誤的狀態異常,或者MediaRecorder.prepare失敗。如何使用setCamera(MediaRecorder)?
- 有誰知道這種方法是否可用?
- 那我該怎麼用呢?
- Web上有任何樣本?
根據Android SDK MediaRecorder.setCamera可用於回收現有攝像頭實例以進行視頻拍攝和預覽,而無需重新設置預覽。我無法找到任何示例,並且我所有的嘗試都是徒勞的:我得到錯誤的狀態異常,或者MediaRecorder.prepare失敗。如何使用setCamera(MediaRecorder)?
我發現了2個鏈接可能對你有用。 Android Camera git repo和a MediaRecorder example
Android Camera應用程序源代碼提供了最好的示例。經過一番調查後,我發現recorder.setCamera(camera)
應該在實例化MediaRecorder
後立即調用,或者至少在應用任何設置之前調用。在調用setCamera()
之前應用任何設置(setVideoSource()
等)會導致錯誤。
在創建mediarecorder的實例後,您是否嘗試過使用以下函數?
//解鎖相機以允許其他進程訪問它。
mCameraDevice.unlock();
//設置一個攝像頭用於錄製。使用此功能可在預覽和/或拍攝模式之間快速切換,而無需拆卸相機對象。
mMediaRecorder.setCamera(mCameraDevice);
我有我的MediaRecorder啓動:
MediaRecorder mediaRecorder = null;
,但不喜歡這樣的:
MediaRecorder mediaRecorder = new MediaRecorder();
(headbang)哈哈..現在我的問題是一個預覽kalydascope ..時間搜索interwebs ..
希望這可以幫助某人。
我遇到了同樣的問題,並發現它如何工作。有些事情必須正確完成。首先你應該檢查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。
我從@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()之前調用。
但我在看我的代碼正在工作。
我可以問這個答案被降低的原因嗎?考慮到我回答了這個問題,Android相機仍然是這個問題的正確參考。這只是一個懶惰的人尋找他們需要什麼的問題嗎?或者你更喜歡評論而不是迴應? – gamadeus 2012-01-20 02:27:40
只需提供鏈接,特別是在stackexchange網站之外的鏈接,沒有額外的解釋並不是回答問題的最佳實踐。如果鏈接被破壞,你的回答將毫無用處(實際上你的鏈接已經被破壞,請檢查)。 – melvynkim 2013-03-15 20:38:59