¿Cómo usar setCamera (MediaRecorder)?

De acuerdo con Android SDK MediaRecorder.setCamera se puede utilizar para reciclar la instancia de la cámara existente para la captura de vídeo y vista previa sin restablecer la vista previa. No pude encontrar ninguna muestra, y todos mis intentos fueron inútiles: o bien obtener la excepción de estado equivocado, o MediaRecorder.prepare falla.

  • ¿Alguien sabe si este método se puede utilizar en absoluto?
  • ¿Cómo puedo usarlo entonces?
  • ¿Alguna muestra disponible en la Web?

Para referencia: http://developer.android.com/reference/android/media/MediaRecorder.html#setCamera(android.hardware.Camera)

La fuente de la aplicación de cámara Android proporciona el mejor ejemplo. Después de una investigación, descubrí que se debería llamar a recorder.setCamera(camera) inmediatamente después de instanciar el MediaRecorder , o al menos antes de que se le apliquen ajustes. La aplicación de cualquier configuración ( setVideoSource() , etc.) antes de llamar a setCamera() da como resultado un error.

Me encontré con el mismo problema y descubrí cómo puede funcionar. Algunas cosas tienen que ser hechas correctamente. En primer lugar, debe comprobar el gráfico de estado desde el enlace android doku.

Un orden de trabajo de comandos es como sigue.

 mCamera = Camera.open(); rec = new MediaRecorder(); // state "Initial" mCamera.lock(); mCamera.unlock(); rec.setCamera(mCamera); // state still "Initial" rec.setVideoSource(MediaRecorder.VideoSource.CAMERA); // state "Initialized" rec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); // state "DataSourceConfigured" rec.setVideoEncoder(MediaRecorder.VideoEncoder.H264); rec.setPreviewDisplay(surfaceHolder.getSurface()); rec.setOutputFile(Environment.getExternalStorageDirectory() + "/test.mp4"); rec.prepare(); // state "Prepared" rec.start(); // state "Recording" // ... rec.stop(); // state "Initial" 

Un ejemplo completo se puede encontrar aquí .

¿Ha intentado utilizar las siguientes funciones después de crear una instancia de mediarecorder?

// Desbloquea la cámara para permitir que otro proceso acceda a ella.

MCameraDevice.unlock ();

// Establece una cámara para la grabación. Utilice esta función para cambiar rápidamente entre la vista previa y el modo de captura // sin el desmontaje del objeto de la cámara.

MMediaRecorder.setCamera (mCameraDevice);

Me dieron una pista de @lyron.

Primero , abra la cámara frontal.

  int cameraId = -1; int camNums = Camera.getNumberOfCameras(); for( int i = 0 ; i < camNums ; i++) { CameraInfo info = new CameraInfo(); Camera.getCameraInfo(i, info); if( info.facing == CameraInfo.CAMERA_FACING_FRONT ) { cameraId = i; break; } } mCamera = Camera.open(cameraId); mCamera.unlock(); 

Necesito usar la cámara delantera como arriba.

Y NO OLVIDE DESBLOQUEAR la cámara.

Si no lo hace, verá los errores a continuación.

 E/MediaRecorder(15509): start failed: -19 E/SampleVideoRecorder(15509): Exception : E/SampleVideoRecorder(15509): java.lang.RuntimeException: start failed. E/SampleVideoRecorder(15509): at android.media.MediaRecorder.start(Native Method) 

En segundo lugar , establecer la cámara antes de configurar los otros como este.

  recorder = new MediaRecorder(); recorder.setCamera( mCamera ); // like this! recorder.setAudioSource( MediaRecorder.AudioSource.MIC); recorder.setVideoSource( MediaRecorder.VideoSource.CAMERA); recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); recorder.setVideoSize( 2560, 1440 ); recorder.setVideoFrameRate(30); recorder.setPreviewDisplay(holder.getSurface()); recorder.setOutputFile( s_dir ); try { recorder.prepare(); recorder.start(); } catch( Exception e ) { Log.e("SampleVideoRecorder", "Exception : ", e ); recorder.release(); recorder = null; } 

Alguien dice que setCamera () debe ser llamado antes de preparar ().

Pero estoy viendo mi código está funcionando.

Hice iniciar mi MediaRecorder:

 MediaRecorder mediaRecorder = null; 

Pero no así:

 MediaRecorder mediaRecorder = new MediaRecorder(); 

(Headbang) haha ​​.. ahora mi problema es un kalydascope para una vista previa .. tiempo para buscar en el interwebs ..

Espero que esto ayudó a alguien.

He encontrado 2 enlaces que te pueden resultar útiles. Android Camera git repo y un ejemplo de MediaRecorder

  • ¿Por qué `` OnInfoListener` de MediaRecorder no se llama en código inferior cuando se alcanza el tamaño máximo de archivo
  • Dividir y combinar / grabar audio grabado
  • Cómo silenciar el "pitido" por MediaRecorder.start ()?
  • ¿Es posible reducir el tiempo de cambio de contexto
  • Android: Dos instancias de Media Recorder al mismo tiempo
  • Cómo cambiar framerate cuando se utiliza clase MediaRecorder
  • Error en MediaRecorder.stop (): -1007
  • Frecuencia de muestreo y ruido de Android MediaRecorder
  • Interrumpir la grabación de medios mediante programación. Camera.apk de samsung galaxy tiene `this.mMediaRecorder.pause ();` no funciona en mi código
  • Android agrega texto (marca de tiempo) al vídeo grabado
  • Android: ¿Cómo inicializar MediaRecorder sin una superficie válida para la vista previa de vídeo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.