Visualización preliminar en el grabador de medios android

En android cómo mostrar la superficie de vista previa antes de iniciar la grabadora de medios. Mi aplicación tiene la funcionalidad de grabación de vídeo, cuando navego a fragmento de grabación de vídeo pantalla de visualización en negro, cuando comienzo a grabar con el botón de inicio de vista previa de la cámara es la pantalla y el inicio de grabación.

Cómo iniciar la vista previa antes de grabar. He agregado el código que he utilizado en onCreateView () de fragmento-

surfaceHolder = mySurfaceView.getHolder(); camera = Camera.open(); if(camera!=null){ camera.setDisplayOrientation(90); Camera.Parameters param; param = camera.getParameters(); param.setPreviewFrameRate(20); param.setPreviewSize(176, 144); camera.setParameters(param); camera.setPreviewDisplay(surfaceHolder); } mediaRecorder = new MediaRecorder(); camera.unlock(); mediaRecorder.setCamera(camera); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); CamcorderProfile camcorderProfile_HQ = CamcorderProfile .get(CamcorderProfile.QUALITY_HIGH); mediaRecorder.setProfile(camcorderProfile_HQ); String filePath = getOutputMediaFile(MEDIA_TYPE_VIDEO).getPath(); fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO); mediaRecorder.setOutputFile(filePath); 

Y el código que he utilizado en el botón de inicio haga clic-

 mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface()); mediaRecorder.prepare(); mediaRecorder.start(); 

Así que soy capaz de recodificar vídeo mediante el uso de código anterior, pero no capaz de mostrar la vista previa antes de iniciar la grabación. Por favor, ayúdame donde me falta.para que la pantalla negra se muestra antes de recodificar el vídeo.

Gracias por adelantado.

 public void surfaceCreated(SurfaceHolder holder) { if (mCamera != null) { Parameters params = mCamera.getParameters(); mCamera.setParameters(params); try { //mCamera.setDisplayOrientation(90); mCamera.setPreviewDisplay(holder); } catch (IOException e) { e.printStackTrace(); } mCamera.startPreview(); } } 

Si implementa SurfaceHolder.Callback, reemplace el método surfaceCreated como este. Esto funcionó para mí.

Tuve el mismo problema. Lo busqué y aquí está mi Actividad. Me tomó un poco de esfuerzo para que no se bloquee, así que aquí está el resultado final. Muestra la vista previa antes de que el usuario haga clic en el botón REC. (También estoy mostrando una cuenta atrás, pero no me importa eso). Observe también que hay mucho trabajo realizado en el hilo principal de este ejemplo (al hacer clic). Hay algunas cosas aquí que no son las mejores prácticas, pero para un ejemplo de trabajo creo que es lo suficientemente bueno.

 import android.app.Activity; import android.hardware.Camera; import android.media.CamcorderProfile; import android.media.MediaRecorder; import android.os.Bundle; import android.os.CountDownTimer; import android.os.Environment; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.io.File; import java.io.IOException; public class MainActivity extends Activity implements SurfaceHolder.Callback { private static final String LOG_TAG = MainActivity.class.getCanonicalName(); Button myButton; MediaRecorder mediaRecorder; SurfaceHolder surfaceHolder; boolean recording; private TextView mTimer; private Camera mCamera; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recording = false; mediaRecorder = new MediaRecorder(); mCamera = Camera.open(); initMediaRecorder(); SurfaceView myVideoView = (SurfaceView) findViewById(R.id.videoview); surfaceHolder = myVideoView.getHolder(); surfaceHolder.addCallback(this); myButton = (Button) findViewById(R.id.mybutton); myButton.setOnClickListener(myButtonOnClickListener); mTimer = (TextView) findViewById(R.id.timer); } private Button.OnClickListener myButtonOnClickListener = new Button.OnClickListener() { @Override public void onClick(final View arg0) { CountDownTimer countDownTimer = new CountDownTimer(90 * 1000, 1000) { @Override public void onTick(long millisUntilFinished) { mTimer.setText(String.valueOf(millisUntilFinished / 1000)); } @Override public void onFinish() { onClick(arg0); } }; if (recording) { // Stop recording and finish try { mediaRecorder.stop(); mediaRecorder.reset(); mediaRecorder.release(); finish(); } catch (Exception e) { Log.e(LOG_TAG, "Failed to stop recorder", e); } } else { // Release the camera and start recording mCamera.release(); countDownTimer.start(); mediaRecorder.start(); recording = true; myButton.setText("STOP"); } } }; @Override public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { } @Override public void surfaceCreated(SurfaceHolder holder) { if (mCamera != null) { Camera.Parameters params = mCamera.getParameters(); mCamera.setParameters(params); try { mCamera.setPreviewDisplay(holder); } catch (IOException e) { e.printStackTrace(); } mCamera.startPreview(); } prepareMediaRecorder(); } @Override public void surfaceDestroyed(SurfaceHolder arg0) { } private void initMediaRecorder() { mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); CamcorderProfile camcorderProfile_HQ = CamcorderProfile.get(CamcorderProfile.QUALITY_CIF); mediaRecorder.setProfile(camcorderProfile_HQ); File file = new File(getExternalFilesDir(Environment.DIRECTORY_MOVIES), "myvideo.mp4"); if (file.exists()) { file.delete(); } mediaRecorder.setOutputFile(file.getAbsolutePath()); mediaRecorder.setMaxDuration(90000); // Set max duration 90 sec. mediaRecorder.setMaxFileSize(15000000); // Set max file size 15M } private void prepareMediaRecorder() { mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface()); try { mediaRecorder.prepare(); } catch (IllegalStateException | IOException e) { Log.e(LOG_TAG, "Failed to prepare recorder", e); } } } 
  • Android 3.0, Vista previa de widgets
  • Ver movido pero aún en la esquina superior izquierda
  • Cuando establezco MinimumHeight, ¿qué unidades estoy usando?
  • Android: WebView no puede mostrar el signo de porcentaje '%'
  • Android WebView no sólo de vídeo audio
  • SetPivotX funciona extraño en la vista escalada
  • Cómo obtener el estado de la casilla de verificación en el listview expandible en android
  • Las vistas agregadas dinámicamente desaparecen en orientación en Android
  • Vista dinámica con desplazamiento horizontal y vertical
  • android webview Relacionados
  • Sincronizar la posición de dos vistas ScrollView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.