【问题标题】:android camera error 1001 - what the heck is that?android相机错误1001 - 那是什么鬼?
【发布时间】:2013-01-24 03:45:23
【问题描述】:

我在网上搜索了所有内容,但找不到那个 1001 错误是什么。几秒钟后,我收到相机 100 错误,但我无法找出第一个错误是什么。有人有什么想法吗?

【问题讨论】:

  • 我回滚到我的代码的早期版本修复了它,但我仍然想知道 wtf 1001 错误是这样我将来可以避免它。

标签: android camera


【解决方案1】:

我在 S3 上也遇到了这个错误。我相信我追踪到了 MediaRecorder 如何使用相机预览表面。在我的情况下,当我尝试开始录制时,预览显示正在重置。我通过清理我的代码解决了这个问题,并在下面的 SurfaceView 实现中使用了调用来设置、启动和停止预览显示(来自Android Camera developer guide):

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;

public CameraPreview(Context context, Camera camera) {
    super(context);
    mCamera = camera;

    // Install a SurfaceHolder.Callback so we get notified when the
    // underlying surface is created and destroyed.
    mHolder = getHolder();
    mHolder.addCallback(this);
    // deprecated setting, but required on Android versions prior to 3.0
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void surfaceCreated(SurfaceHolder holder) {
    // The Surface has been created, now tell the camera where to draw the preview.
    try {
        mCamera.setPreviewDisplay(holder);
        mCamera.startPreview();
    } catch (IOException e) {
        Log.d(TAG, "Error setting camera preview: " + e.getMessage());
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {
    // empty. Take care of releasing the Camera preview in your activity.
}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    // If your preview can change or rotate, take care of those events here.
    // Make sure to stop the preview before resizing or reformatting it.

    if (mHolder.getSurface() == null){
      // preview surface does not exist
      return;
    }

    // stop preview before making changes
    try {
        mCamera.stopPreview();
    } catch (Exception e){
      // ignore: tried to stop a non-existent preview
    }

    // set preview size and make any resize, rotate or
    // reformatting changes here

    // start preview with new settings
    try {
        mCamera.setPreviewDisplay(mHolder);
        mCamera.startPreview();

    } catch (Exception e){
        Log.d(TAG, "Error starting camera preview: " + e.getMessage());
    }
}
}

【讨论】:

    【解决方案2】:

    只是想我会在这里添加一个帖子以供将来参考。这个问题困扰了我很久。 原来我的问题是预览尺寸不正确造成的,虽然分辨率设置是通过getSupportedPictureSize方法获得的。

    例如,您可以获得如下尺寸:

    //first entry in list is 1392x1392 for front facing camera on an S3
    List<Camera.Size> supportedPictureSizes = params.getSupportedPictureSizes();
    

    设置此分辨率或忽略设置图片大小将导致可怕的错误 1001。

    如果您在任何其他设备上遇到此问题,我建议您尝试不同的图片尺寸。

    【讨论】:

      【解决方案3】:

      所以我在 Galaxy S3 上安装它还有另一个原因。我正在使用 TextureView 来显示我的相机预览,并且在成功预览后按下主页按钮然后再次进入应用程序时遇到了这个可怕的错误。在 onResume() 函数中我再次启动预览,发现我没有在 onSurfaceTextureDestroyed() 函数中释放 SurfaceTexture 实例变量。

      我在这个函数中添加了发布行,它现在看起来像这样并且完美地工作:

      @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
          mSurfaceTexture = null; //This was the offending culprit.
      
          releaseMediaPlayer();
          releaseVideoRecorder();
          releaseCamera();
      
          return false;
      }
      

      【讨论】:

        【解决方案4】:

        在我的情况下,在三星 S3 中,未设置 video-size 参数,这导致了 1001 错误。使用预览大小在媒体记录器上设置视频大小修复了该问题。但是,此更改可能会在其他设备上失败,因为该参数可能在所有设备中都可用/设置,也可能不可用/设置。以下代码适用于大多数设备:

        if(params.get("video-size") != null && params.get("video-size").isEmpty()) {
            int videoWidth = params.getPreviewSize().width;
            int videoHeight = params.getPreviewSize().height;
            mediaRecorder.setVideoSize(videoWidth, videoHeight);
        } else {
            mediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-05-19
          • 2015-01-14
          • 2019-07-21
          • 1970-01-01
          • 1970-01-01
          • 2014-10-02
          • 1970-01-01
          相关资源
          最近更新 更多