2011-12-27 23 views
14

Tôi đang gặp lỗi Máy ảnh 100 trong khi thử nghiệm ứng dụng Android của mình, tôi đã tìm thấy một số chủ đề trên StackOverflow nhưng chúng không hữu ích. Tôi đang tìm kiếm giải pháp có liên quan để sửa lỗi.Máy chủ Android Camera bị lỗi và lỗi máy ảnh - 100

Mã mà tôi đã viết:

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(); 

Mã để ghi Camera:

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(); 


} 

Dưới đây là đầu ra 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

Bạn có thể đăng các tin nhắn logcat không? – slayton

+0

Cảm ơn bạn đã trả lời bạn @slayton. Tôi đã chỉnh sửa câu hỏi của mình với lỗi logcat. –

+0

Bạn sửa nó như thế nào? Tôi đang đối mặt với cùng một – kinghomer

Trả lời

5

Bạn cần phải thiết lập hiển thị xem trước cho máy ghi âm.

mrec.setPreviewDisplay(SurfaceHolder.getSurface());

Dữ liệu video trong màn hình xem trước hoạt động như đầu vào cho máy quay video. Ngoài ra, bạn cần đảm bảo rằng độ phân giải video cho bản ghi và độ phân giải xem trước giống nhau.

+0

Xin chào @Ravi, cảm ơn bạn rất nhiều vì câu trả lời. Bạn có thể vui lòng cho tôi biết thêm chi tiết về bản xem trước này không? Tôi phải làm SurfaceHolder Preview riêng tư? và sau đó là dòng mã của bạn? –

+0

[Ở đây] (http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html) là một ứng dụng mẫu trên bản xem trước – bluefalcon

+0

Tôi đã giải quyết vấn đề này, cảm ơn bạn. –

3

Ngoại lệ này sẽ xảy ra khi thông số máy ảnh chưa được đặt trước khi sử dụng.

Đây là phương pháp để đặt các giá trị mặc định phổ biến nhất. Lưu ý rằng phương pháp này sử dụng mặc định trên giả định rằng máy ảnh đang được sử dụng để chụp ảnh. Xóa các định dạng hình ảnh được hỗ trợ để quay video.

/** 
* 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); 
} 
Các vấn đề liên quan