2011-12-27 3 views
14

Sono di fronte all'errore 100 della videocamera durante il test della mia applicazione Android, ho trovato alcuni argomenti su StackOverflow ma non sono stati così utili. Sto cercando una soluzione pertinente per correggere l'errore.Errore del server della fotocamera Android e telecamera - 100

codice che ho scritto:

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

Codice di registrare fotocamera:

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


} 

Ecco l'output 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

Puoi pubblicare i messaggi logcat? – slayton

+0

Grazie per la tua risposta @slayton. Ho modificato la mia domanda con gli errori logcat. –

+0

Come lo aggiustate? Sto affrontando lo stesso – kinghomer

risposta

5

È necessario impostare la visualizzazione di anteprima al registratore.

mrec.setPreviewDisplay(SurfaceHolder.getSurface());

I dati video in atti anteprima di visualizzazione quale entrata al videoregistratore. Inoltre è necessario assicurarsi che la risoluzione video per la registrazione e la risoluzione di anteprima siano le stesse.

+0

Ciao @Ravi, grazie mille per la risposta. Potete darmi ulteriori dettagli su questa anteprima? Devo fare l'anteprima privata di SurfaceHolder? e poi la tua linea di codice? –

+0

[Qui] (http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html) è un'app di esempio nell'anteprima – bluefalcon

+0

Ho risolto questo problema, grazie. –

3

Questa eccezione si verifica quando i parametri della telecamera non sono stati impostati prima dell'uso.

Ecco un metodo per impostare i valori predefiniti più comuni. Si noti che questo metodo utilizza i valori predefiniti in base al presupposto che la fotocamera venga utilizzata per la fotografia. Rimuovi i formati di immagine supportati per l'acquisizione 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); 
} 
0

Utilizzare Camera.ErrorCallback che viene attivato quando il server della fotocamera non funziona. Camera.ErrorCallback Android documentation È quindi possibile controllare le proprietà della telecamera lì.