Android 相机服务器死机和相机错误 - 100

标签 android android-camera

我在测试我的 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  

最佳答案

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

mrec.setPreviewDisplay(SurfaceHolder.getSurface());

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

关于Android 相机服务器死机和相机错误 - 100,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8647628/

相关文章:

android - 为什么私有(private)集不适用于 MutableLiveData?

android - 如果 SurfaceView 尺寸不是支持的尺寸之一,camera2 将崩溃

android - 如何将 OpenGl 对象添加到 surfaceView 相机中?

android - 保存在 ImageView 中时,从自定义相机拍摄的图像会被拉伸(stretch)

android - ClassCastException : android. 支持.v7.widget.ShareActionProvider

java - 在特定日期和时间创建警报

java - ImageIO.read() 和 BitmapFactory.decodeByteArray()

java - 线性布局环绕 TextView

java - Android 简单相机 Activity

android - 如何解决某些 Android 设备上前置摄像头视频录制的伪影问题?