【问题标题】:Android Camera Server Died and Camera Error - 100Android 相机服务器死机和相机错误 - 100
【发布时间】:2023-03-16 20:14:01
【问题描述】:

我在测试我的 android 应用程序时遇到相机错误 100,我在 StackOverflow 上找到了一些主题,但它们并没有太大帮助。我正在寻找相关的解决方案来修复错误。

我写的代码:

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  

【问题讨论】:

  • 你能发布 logcat 消息吗?
  • 感谢您的回答@slayton。我用 logcat 错误编辑了我的问题。
  • 你如何解决它?我也面临同样的情况
  • 那么你能告诉人们你是如何修复它的吗?

标签: android android-camera


【解决方案1】:

您需要将预览显示设置为刻录机。

mrec.setPreviewDisplay(SurfaceHolder.getSurface());

预览显示中的视频数据作为录像机的输入。此外,您需要确保录制的视频分辨率和预览分辨率相同。

【讨论】:

  • 嗨@Ravi,非常感谢您的回答。你能告诉我更多关于这个预览的细节吗?我必须做私人预览SurfaceHolder?然后是你的代码行?
  • Here 是预览中的示例应用
【解决方案2】:

在使用前未设置相机参数时会出现此异常。

这是一种设置最常用默认值的方法。请注意,此方法在假设相机用于静态摄影的情况下使用默认值。移除支持的视频捕获图片格式。

/**
 * 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);
}

【讨论】:

    【解决方案3】:

    这是一个示例,相机可以正常工作。希望有所帮助。 https://github.com/josnidhin/Android-Camera-Example

    【讨论】:

      【解决方案4】:

      使用 Camera.ErrorCallback,它在相机服务器出现故障时触发。 Camera.ErrorCallback Android documentation 然后,您可以在那里检查相机属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-09
        • 1970-01-01
        • 2014-10-02
        • 2011-12-01
        • 2016-09-24
        相关资源
        最近更新 更多