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-
- Android: Creación de vistas personalizadas y su adición al diseño dinámicamente
- ¿Cómo puedo ver que View se vuelve visible
- La superficie de la cámara Android se cambió constantemente
- imagen de ajuste de androide en imagen
- Java.util.ConcurrentModificationException in View.setVisibility
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.
- cómo guardar y restaurar Webview Estado?
- ImageButton en el elemento secundario de lista expandible
- Eliminar márgenes en webView
- Android Canvas.drawTextOnPath no parece correcto cuando la pintura se establece en Stroke
- Android View.OnKeyListener: haga clic una vez, ejecute dos veces
- ¿Mostrar la vista por encima de la barra de estado?
- Detección de vistas invisibles en un evento de movimiento
- EditText setOnFocusChangeListener en todos los EditTexts
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); } } }
- Formato de moneda en Android utilizando separador decimal incorrecto
- ¿Es posible tener iconos de lanzadores animados para aplicaciones de Android?