我在网上搜索了所有内容,但找不到那个 1001 错误是什么。几秒钟后,我收到相机 100 错误,但我无法找出第一个错误是什么。有没有人有任何想法?
4 回答
我在 S3 上也遇到了这个错误。我相信我追踪到了 MediaRecorder 如何使用相机预览表面。在我的情况下,当我尝试开始录制时,预览显示正在重置。我通过清理我的代码解决了这个问题,并在下面的 SurfaceView 实现中使用调用来设置、启动和停止预览显示(来自Android Camera 开发人员指南):
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());
}
}
}
只是想我会在这里添加一个帖子以供将来参考。这个问题困扰了我很久。事实证明,我的问题是由不正确的预览大小引起的,尽管分辨率设置是从 getSupportedPictureSize 方法获得的。
因此,例如,您可以获得如下尺寸:
//first entry in list is 1392x1392 for front facing camera on an S3
List<Camera.Size> supportedPictureSizes = params.getSupportedPictureSizes();
设置此分辨率或忽略设置图片大小将导致可怕的错误 1001。
如果您在任何其他设备上遇到此问题,我建议您尝试不同的图片尺寸。
所以我在 Galaxy S3 上安装它还有另一个原因。我正在使用 TextureView 来显示我的相机预览,并且在成功预览后按下主页按钮然后再次进入应用程序时遇到了这个可怕的错误。在 onResume() 函数中我再次启动预览,发现我没有在 onSurfaceTextureDestroyed() 函数中释放 SurfaceTexture 实例变量。
我在这个函数中添加了发布行,它现在看起来像这样并且完美地工作:
@Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
mSurfaceTexture = null; //This was the offending culprit.
releaseMediaPlayer();
releaseVideoRecorder();
releaseCamera();
return false;
}
就我而言,在三星 S3 中,未设置视频大小参数,这导致了 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);
}