Preparar la cámara de Android falla
Pregunta
Estoy tratando de construir una grabadora de video simple para un dispositivo Android y he tenido un éxito limitado y resultados mixtos. Funcionó una vez, pero ahora, sin cambiar nada, obtengo una "Cámara no disponible". error seguido de " preparación fallida -2147483648 " error
El constructor para el previsualizador se parece a
private SurfaceHolder holder_;
private MediaRecorder r_;
public CameraPreview(Context context, AttributeSet attrs) {
super(context, attrs);
holder_ = getHolder();
holder_.addCallback(this);
holder_.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
r_ = new MediaRecorder();
r_.setAudioSource(MediaRecorder.AudioSource.MIC);
r_.setVideoSource(MediaRecorder.VideoSource.CAMERA);
r_.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
r_.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
r_.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
}
Y mi
surfaceCreated()
El método se parece a
@Override
public void surfaceCreated(SurfaceHolder holder) {
r_.setPreviewDisplay(holder_.getSurface());
r_.setOutputFile("/sdcard/test.mpg");
if (r_ != null){
try{
r_.prepare();
r_.start();
}catch(Exception e){
e.printStackTrace();
}
}
}
¿Alguna idea?
Gracias, Chris
Solución
No he usado grabación de video, pero con la clase Camera
para imágenes fijas, debe liberar expresamente el objeto Camera
a través de la liberación de () . Si no lo hace, la cámara estará atada indefinidamente (probablemente hasta que se reinicie).
Si no ha llamado a release ()
en el MediaRecorder
, es posible que tenga el mismo problema.
Otros consejos
Debe llamar a camera.unlock ()
.
Debe llamar a su objeto MediaRecorder
:
setCamera(theCameraObject)
// I have this after 'new MediaRecorder' and before 'setAudioSource()
//everything u wrote goes in here and then:
setVideoSize()
setVideoFrameRate()