2011-12-27 102 views
14

我面对摄像机错误100在测试我的Android应用程序,我发现在StackOverflow一些议题,但他们没有这样的帮助。我正在寻找相关的解决方案来解决错误。我写Android相机服务器死亡,相机错误 - 100

代码:

mrec = new MediaRecorder(); // Works well 

mCamera = Camera.open(); 
mCamera.unlock(); 

mrec.setCamera(mCamera); 
mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
mrec.setAudioSource(MediaRecorder.AudioSource.MIC); 

mrec.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); 

mrec.setOutputFile("/sdcard/zzzz.3gp"); 

mrec.prepare(); 
mrec.start(); 

代码来记录摄像头:

protected void startRecordingVideo() throws IOException 
{ 
camera = Camera.open(); 
camera.unlock(); 
SimpleDateFormat timeStampFormat = new SimpleDateFormat(
     "yyyy-MM-dd-HH.mm.ss"); 
String fileName = "video_" + timeStampFormat.format(new Date()) 
     + ".3gp"; 
String fileURL = "/sdcard/"+fileName; 
surfaceView = (SurfaceView) findViewById(R.id.surface_camera); 
surfaceHolder = surfaceView.getHolder(); 
surfaceHolder.addCallback(this); 
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
mrec = new MediaRecorder(); 

mrec.setCamera(camera); 

mrec.setPreviewDisplay(surfaceHolder.getSurface()); 
mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
    mrec.setAudioSource(MediaRecorder.AudioSource.MIC); 
    mrec.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW)); 
    mrec.setPreviewDisplay(surfaceHolder.getSurface()); 
    mrec.setOutputFile("/sdcard/"+fileName); 

    mrec.prepare(); 
    mrec.start(); 
} 

protected void stopRecordingVideo() { 
mrec.stop(); 
mrec.release(); 
camera.release(); 
} 

private void releaseMediaRecorder(){ 
if (mrec != null) { 
    mrec.reset(); // clear recorder configuration 
    mrec.release(); // release the recorder object 
    mrec = null; 
    camera.lock();   
    } 
} 

private void releaseCamera(){ 
if (camera != null){ 
    camera.release();   
    camera = null; 
} 
} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, 
    int height) { 
// TODO Auto-generated method stub 
} 


@Override 
public void surfaceCreated(SurfaceHolder holder) { 
// TODO Auto-generated method stub 

if (camera != null){ 
    Parameters params = camera.getParameters(); 
    camera.setParameters(params); 
} 
else { 
    Toast.makeText(getApplicationContext(), "Camera not available!", Toast.LENGTH_LONG).show(); 
    finish(); 
} 
} 


@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
releaseMediaRecorder(); 
camera.stopPreview(); 
camera.release(); 


} 

这里是logcat的输出:

12-27 17:52:02.788: W/IMediaDeathNotifier(21434): media server died! 
12-27 17:52:02.788: W/Camera(21434): Camera server died! 
12-27 17:52:02.788: W/Camera(21434): ICamera died 
12-27 17:52:03.048: E/Camera(21434): Error 100 
+1

你能后的logcat的消息? – slayton 2011-12-27 18:02:25

+0

谢谢你回答@slayton。 我编辑我的问题与logcat错误。 – 2011-12-27 18:09:37

+0

你如何解决它?我面临着同样的 – kinghomer 2012-11-13 19:31:41

回答

5

您需要设置预览显示到录音机。

mrec.setPreviewDisplay(SurfaceHolder.getSurface());

在预览显示充当输入到录像机的视频数据。您还需要确保录制的视频分辨率和预览分辨率相同。

+0

Hi @Ravi,非常感谢你的回答。 能否请你给我更详细的信息abaut这个预览? 我必须做私人预览SurfaceHolder?然后你的代码行? – 2011-12-28 09:29:07

+0

[这里](http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html)是在预览 – bluefalcon 2011-12-29 05:07:50

+0

一个示例应用程序我解决了这个问题,谢谢。 – 2011-12-29 07:14:17

3

此异常。

这里是设置最常见的默认值的方法。请注意,此方法假定相机正在用于静态拍摄时使用默认值。删除视频捕捉支持的图片格式。

/** 
* This method configures the camera with a set of defaults for brightness, 
* flash, camera mode, and picture sizes. 
*/ 
private void setCameraDefaults() 
{ 
    Camera.Parameters params = mCamera.getParameters(); 

    // Supported picture formats (all devices should support JPEG). 
    List<Integer> formats = params.getSupportedPictureFormats(); 

    if (formats.contains(ImageFormat.JPEG)) 
    { 
     params.setPictureFormat(ImageFormat.JPEG); 
     params.setJpegQuality(100); 
    } 
    else 
     params.setPictureFormat(PixelFormat.RGB_565); 

    // Now the supported picture sizes. 
    List<Size> sizes = params.getSupportedPictureSizes(); 
    Camera.Size size = sizes.get(sizes.size()-1); 
    params.setPictureSize(size.width, size.height); 

    // Set the brightness to auto. 
    params.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO); 

    // Set the flash mode to auto. 
    params.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO); 

    // Set the scene mode to auto. 
    params.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO); 

    // Lastly set the focus to auto. 
    params.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); 

    mCamera.setParameters(params); 
}