¿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)
- Android AudioRecord y MediaRecorder
- Grabar audio con MediaRecorder y reproducir simultaniosamente con MediaPlayer
- Mediarecorder de Android Volcado de salida reflejada
- MediaRecorder start () falla si se llama demasiado rápido
- Registro de video Android sin audio
- Android MediaRecorder: Sobreescritura continua
- Cómo cambiar entre la cámara delantera y trasera cuando se utiliza MediaRecorder android
- Pausa ... como la aplicación de cámara predeterminada?
- Error de la cámara "No se puede conectar a la cámara" o en algunos teléfonos aparece el error "La cámara está usando otra aplicación"
- Media Recorder start falló en android para cámara
- ¿Cómo saber si un MediaRecorder está en estado de ejecución o no?
- MediaRecorder falló cuando detengo la grabación
- AudioSource.VOICE_CALL no funciona en android 4.0 pero funciona en android 2.3
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
- Diseño personalizado para el elemento Spinner
- Uso de AsyncTask para enviar correo electrónico de Android