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

¿Fue útil?

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()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top