Сервер камеры Android умер и ошибка камеры - 100 - PullRequest
15 голосов
/ 27 декабря 2011

Я сталкиваюсь с ошибкой камеры 100 при тестировании своего приложения для Android. Я нашел несколько тем на 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  

Ответы [ 4 ]

6 голосов
/ 28 декабря 2011

Вам необходимо установить отображение предварительного просмотра на диктофон.

mrec.setPreviewDisplay(SurfaceHolder.getSurface());

Видеоданные на дисплее предварительного просмотра действуют как вход для видеомагнитофона. Также необходимо убедиться, что разрешение видео для записи и разрешение предварительного просмотра совпадают.

3 голосов
/ 31 июля 2013

Это исключение произойдет, если параметры камеры не были установлены до использования.

Вот метод установки наиболее распространенных значений по умолчанию.Обратите внимание, что этот метод использует значения по умолчанию при условии, что камера используется для фотосъемки.Удалите поддерживаемые форматы изображений для захвата видео.

/**
 * 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);
}
1 голос
/ 15 марта 2013

Вот пример, камера может хорошо работать.Надеюсь помочь.https://github.com/josnidhin/Android-Camera-Example

0 голосов
/ 29 декабря 2016

Использовать Camera.ErrorCallback, который срабатывает при сбое сервера камеры. Camera.ErrorCallback Android документация Затем вы можете проверить свойства камеры там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...